File indexing completed on 2024-05-05 17:42:50
0001 /* 0002 SPDX-FileCopyrightText: 2011 Ilia Kats <ilia-kats@gmx.net> 0003 SPDX-FileCopyrightText: 2013 Lukáš Tinkl <ltinkl@redhat.com> 0004 SPDX-FileCopyrightText: 2020 Douglas Kosovic <doug@uq.edu.au> 0005 0006 SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0007 */ 0008 0009 #include "l2tpauth.h" 0010 #include "passwordfield.h" 0011 0012 #include <QCheckBox> 0013 #include <QFormLayout> 0014 #include <QLabel> 0015 #include <QString> 0016 0017 #include <KLocalizedString> 0018 0019 #include "nm-l2tp-service.h" 0020 0021 class L2tpAuthWidgetPrivate 0022 { 0023 public: 0024 NetworkManager::VpnSetting::Ptr setting; 0025 QFormLayout *layout; 0026 }; 0027 0028 L2tpAuthWidget::L2tpAuthWidget(const NetworkManager::VpnSetting::Ptr &setting, const QStringList &hints, QWidget *parent) 0029 : SettingWidget(setting, hints, parent) 0030 , d_ptr(new L2tpAuthWidgetPrivate) 0031 { 0032 Q_D(L2tpAuthWidget); 0033 d->setting = setting; 0034 d->layout = new QFormLayout(this); 0035 setLayout(d->layout); 0036 0037 readSecrets(); 0038 0039 KAcceleratorManager::manage(this); 0040 } 0041 0042 L2tpAuthWidget::~L2tpAuthWidget() 0043 { 0044 delete d_ptr; 0045 } 0046 0047 void L2tpAuthWidget::readSecrets() 0048 { 0049 Q_D(L2tpAuthWidget); 0050 const NMStringMap secrets = d->setting->secrets(); 0051 const NMStringMap dataMap = d->setting->data(); 0052 const QString userAType = dataMap[NM_L2TP_KEY_USER_AUTH_TYPE]; 0053 const QString machineAType = dataMap[NM_L2TP_KEY_MACHINE_AUTH_TYPE]; 0054 QLabel *label; 0055 PasswordField *lineEdit; 0056 0057 NetworkManager::Setting::SecretFlags passType = (NetworkManager::Setting::SecretFlags)dataMap[NM_L2TP_KEY_PASSWORD "-flags"].toInt(); 0058 NetworkManager::Setting::SecretFlags userCertType = (NetworkManager::Setting::SecretFlags)dataMap[NM_L2TP_KEY_USER_CERTPASS "-flags"].toInt(); 0059 NetworkManager::Setting::SecretFlags machineCertType = (NetworkManager::Setting::SecretFlags)dataMap[NM_L2TP_KEY_MACHINE_CERTPASS "-flags"].toInt(); 0060 0061 if ((userAType.isEmpty() || userAType == QLatin1String(NM_L2TP_AUTHTYPE_PASSWORD)) && !(passType.testFlag(NetworkManager::Setting::NotRequired))) { 0062 label = new QLabel(this); 0063 label->setText(i18n("User Password:")); 0064 lineEdit = new PasswordField(this); 0065 lineEdit->setPasswordModeEnabled(true); 0066 lineEdit->setProperty("nm_secrets_key", QLatin1String(NM_L2TP_KEY_PASSWORD)); 0067 lineEdit->setText(secrets.value(QLatin1String(NM_L2TP_KEY_PASSWORD))); 0068 d->layout->addRow(label, lineEdit); 0069 } else if (userAType == QLatin1String(NM_L2TP_AUTHTYPE_TLS) && !(userCertType.testFlag(NetworkManager::Setting::NotRequired))) { 0070 label = new QLabel(this); 0071 label->setText(i18n("User Certificate Password:")); 0072 lineEdit = new PasswordField(this); 0073 lineEdit->setPasswordModeEnabled(true); 0074 lineEdit->setProperty("nm_secrets_key", QLatin1String(NM_L2TP_KEY_USER_CERTPASS)); 0075 lineEdit->setText(secrets.value(QLatin1String(NM_L2TP_KEY_USER_CERTPASS))); 0076 d->layout->addRow(label, lineEdit); 0077 } 0078 0079 if (machineAType == QLatin1String(NM_L2TP_AUTHTYPE_TLS)) { 0080 if (!(machineCertType.testFlag(NetworkManager::Setting::NotRequired))) { 0081 label = new QLabel(this); 0082 label->setText(i18n("Machine Certificate Password:")); 0083 lineEdit = new PasswordField(this); 0084 lineEdit->setPasswordModeEnabled(true); 0085 lineEdit->setProperty("nm_secrets_key", QLatin1String(NM_L2TP_KEY_MACHINE_CERTPASS)); 0086 lineEdit->setText(secrets.value(QLatin1String(NM_L2TP_KEY_MACHINE_CERTPASS))); 0087 d->layout->addRow(label, lineEdit); 0088 } 0089 } 0090 0091 for (int i = 0; i < d->layout->rowCount(); i++) { 0092 auto le = qobject_cast<PasswordField *>(d->layout->itemAt(i, QFormLayout::FieldRole)->widget()); 0093 if (le && le->text().isEmpty()) { 0094 le->setFocus(Qt::OtherFocusReason); 0095 break; 0096 } 0097 } 0098 } 0099 0100 QVariantMap L2tpAuthWidget::setting() const 0101 { 0102 Q_D(const L2tpAuthWidget); 0103 0104 NMStringMap secrets; 0105 QVariantMap secretData; 0106 for (int i = 0; i < d->layout->rowCount(); i++) { 0107 auto le = qobject_cast<PasswordField *>(d->layout->itemAt(i, QFormLayout::FieldRole)->widget()); 0108 if (le && !le->text().isEmpty()) { 0109 const QString key = le->property("nm_secrets_key").toString(); 0110 secrets.insert(key, le->text()); 0111 } 0112 } 0113 0114 secretData.insert("secrets", QVariant::fromValue<NMStringMap>(secrets)); 0115 return secretData; 0116 }