File indexing completed on 2024-04-28 16:52:47

0001 /*
0002     SPDX-FileCopyrightText: 2013 Jan Grulich <jgrulich@redhat.com>
0003 
0004     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0005 */
0006 
0007 #include "libreswanauth.h"
0008 #include "nm-libreswan-service.h"
0009 #include "ui_libreswanauth.h"
0010 
0011 #include <QString>
0012 
0013 class LibreswanAuthDialogPrivate
0014 {
0015 public:
0016     Ui_LibreswanAuth ui;
0017     NetworkManager::VpnSetting::Ptr setting;
0018 };
0019 
0020 LibreswanAuthDialog::LibreswanAuthDialog(const NetworkManager::VpnSetting::Ptr &setting, const QStringList &hints, QWidget *parent)
0021     : SettingWidget(setting, hints, parent)
0022     , d_ptr(new LibreswanAuthDialogPrivate)
0023 {
0024     Q_D(LibreswanAuthDialog);
0025     d->ui.setupUi(this);
0026     d->setting = setting;
0027 
0028     readSecrets();
0029 
0030     KAcceleratorManager::manage(this);
0031 }
0032 
0033 LibreswanAuthDialog::~LibreswanAuthDialog()
0034 {
0035     delete d_ptr;
0036 }
0037 
0038 void LibreswanAuthDialog::readSecrets()
0039 {
0040     Q_D(LibreswanAuthDialog);
0041     const NMStringMap data = d->setting->data();
0042     const NMStringMap secrets = d->setting->secrets();
0043 
0044     const QString groupName = data.value(NM_LIBRESWAN_LEFTID);
0045     if (!groupName.isEmpty()) {
0046         d->ui.leGroupName->setText(groupName);
0047     }
0048 
0049     bool haveUserPassword = true;
0050     if (data.value(NM_LIBRESWAN_XAUTH_PASSWORD_INPUT_MODES) != NM_LIBRESWAN_PW_TYPE_UNUSED) {
0051         d->ui.leUserPassword->setText(secrets.value(NM_LIBRESWAN_XAUTH_PASSWORD));
0052     } else {
0053         d->ui.leUserPassword->setVisible(false);
0054         d->ui.userPasswordLabel->setVisible(false);
0055         haveUserPassword = false;
0056     }
0057 
0058     bool haveGroupPassword = true;
0059     if (data.value(NM_LIBRESWAN_PSK_INPUT_MODES) != NM_LIBRESWAN_PW_TYPE_UNUSED) {
0060         d->ui.leGroupPassword->setText(secrets.value(NM_LIBRESWAN_PSK_VALUE));
0061     } else {
0062         d->ui.leGroupPassword->setVisible(false);
0063         d->ui.groupPasswordLabel->setVisible(false);
0064         haveGroupPassword = false;
0065     }
0066 
0067     if (haveUserPassword && d->ui.leUserPassword->text().isEmpty()) {
0068         d->ui.leUserPassword->setFocus(Qt::OtherFocusReason);
0069     } else if (haveGroupPassword && d->ui.leGroupPassword->text().isEmpty()) {
0070         d->ui.leGroupPassword->setFocus(Qt::OtherFocusReason);
0071     }
0072 }
0073 
0074 QVariantMap LibreswanAuthDialog::setting() const
0075 {
0076     Q_D(const LibreswanAuthDialog);
0077 
0078     NMStringMap secrets;
0079     QVariantMap result;
0080 
0081     if (!d->ui.leUserPassword->text().isEmpty()) {
0082         secrets.insert(NM_LIBRESWAN_XAUTH_PASSWORD, d->ui.leUserPassword->text());
0083     }
0084 
0085     if (!d->ui.leGroupPassword->text().isEmpty()) {
0086         secrets.insert(NM_LIBRESWAN_PSK_VALUE, d->ui.leGroupPassword->text());
0087     }
0088 
0089     result.insert("secrets", QVariant::fromValue<NMStringMap>(secrets));
0090 
0091     return result;
0092 }