File indexing completed on 2024-05-19 05:37:08
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 "libreswanwidget.h" 0008 #include "nm-libreswan-service.h" 0009 #include "ui_libreswan.h" 0010 0011 #include <NetworkManagerQt/Setting> 0012 0013 #include <QDBusMetaType> 0014 0015 LibreswanWidget::LibreswanWidget(const NetworkManager::VpnSetting::Ptr &setting, QWidget *parent, Qt::WindowFlags f) 0016 : SettingWidget(setting, parent, f) 0017 , m_ui(new Ui::LibreswanWidget) 0018 , m_setting(setting) 0019 { 0020 qDBusRegisterMetaType<NMStringMap>(); 0021 0022 m_ui->setupUi(this); 0023 0024 m_ui->groupPassword->setPasswordOptionsEnabled(true); 0025 m_ui->userPassword->setPasswordOptionsEnabled(true); 0026 0027 // Connect for setting check 0028 watchChangedSetting(); 0029 0030 // Connect for validity check 0031 connect(m_ui->gateway, &QLineEdit::textChanged, this, &LibreswanWidget::slotWidgetChanged); 0032 connect(m_ui->groupname, &QLineEdit::textChanged, this, &LibreswanWidget::slotWidgetChanged); 0033 0034 KAcceleratorManager::manage(this); 0035 0036 if (setting && !setting->isNull()) { 0037 loadConfig(setting); 0038 } 0039 } 0040 0041 LibreswanWidget::~LibreswanWidget() 0042 { 0043 delete m_ui; 0044 } 0045 0046 void LibreswanWidget::loadConfig(const NetworkManager::Setting::Ptr &setting) 0047 { 0048 Q_UNUSED(setting); 0049 0050 const NMStringMap data = m_setting->data(); 0051 0052 const QString gateway = data.value(NM_LIBRESWAN_RIGHT); 0053 if (!gateway.isEmpty()) { 0054 m_ui->gateway->setText(gateway); 0055 } 0056 0057 const QString groupName = data.value(NM_LIBRESWAN_LEFTID); 0058 if (!groupName.isEmpty()) { 0059 m_ui->groupname->setText(groupName); 0060 } 0061 0062 const NetworkManager::Setting::SecretFlags groupPasswordFlag = 0063 static_cast<NetworkManager::Setting::SecretFlags>(data.value(NM_LIBRESWAN_PSK_VALUE "-flags").toInt()); 0064 if (groupPasswordFlag == NetworkManager::Setting::None) { 0065 m_ui->groupPassword->setPasswordOption(PasswordField::StoreForAllUsers); 0066 } else if (groupPasswordFlag == NetworkManager::Setting::AgentOwned) { 0067 m_ui->groupPassword->setPasswordOption(PasswordField::StoreForUser); 0068 } else { 0069 m_ui->groupPassword->setPasswordOption(PasswordField::AlwaysAsk); 0070 } 0071 0072 const NetworkManager::Setting::SecretFlags userPasswordFlag = 0073 static_cast<NetworkManager::Setting::SecretFlags>(data.value(NM_LIBRESWAN_XAUTH_PASSWORD "-flags").toInt()); 0074 if (userPasswordFlag == NetworkManager::Setting::None) { 0075 m_ui->userPassword->setPasswordOption(PasswordField::StoreForAllUsers); 0076 } else if (userPasswordFlag == NetworkManager::Setting::AgentOwned) { 0077 m_ui->userPassword->setPasswordOption(PasswordField::StoreForUser); 0078 } else { 0079 m_ui->userPassword->setPasswordOption(PasswordField::AlwaysAsk); 0080 } 0081 0082 const QString username = data.value(NM_LIBRESWAN_LEFTXAUTHUSER); 0083 if (!username.isEmpty()) { 0084 m_ui->username->setText(username); 0085 } 0086 0087 const QString phase1 = data.value(NM_LIBRESWAN_IKE); 0088 if (!phase1.isEmpty()) { 0089 m_ui->phase1->setText(phase1); 0090 } 0091 0092 const QString phase2 = data.value(NM_LIBRESWAN_ESP); 0093 if (!phase2.isEmpty()) { 0094 m_ui->phase2->setText(phase2); 0095 } 0096 0097 const QString domain = data.value(NM_LIBRESWAN_DOMAIN); 0098 if (!domain.isEmpty()) { 0099 m_ui->domain->setText(domain); 0100 } 0101 0102 loadSecrets(setting); 0103 } 0104 0105 void LibreswanWidget::loadSecrets(const NetworkManager::Setting::Ptr &setting) 0106 { 0107 NetworkManager::VpnSetting::Ptr vpnSetting = setting.staticCast<NetworkManager::VpnSetting>(); 0108 0109 if (vpnSetting) { 0110 const NMStringMap secrets = vpnSetting->secrets(); 0111 0112 const QString userPassword = secrets.value(NM_LIBRESWAN_XAUTH_PASSWORD); 0113 if (!userPassword.isEmpty()) { 0114 m_ui->userPassword->setText(userPassword); 0115 } 0116 0117 const QString groupPassword = secrets.value(NM_LIBRESWAN_PSK_VALUE); 0118 if (!groupPassword.isEmpty()) { 0119 m_ui->groupPassword->setText(groupPassword); 0120 } 0121 } 0122 } 0123 0124 QVariantMap LibreswanWidget::setting() const 0125 { 0126 NetworkManager::VpnSetting setting; 0127 setting.setServiceType(QLatin1String(NM_DBUS_SERVICE_LIBRESWAN)); 0128 NMStringMap data; 0129 NMStringMap secrets; 0130 0131 if (!m_ui->gateway->text().isEmpty()) { 0132 data.insert(NM_LIBRESWAN_RIGHT, m_ui->gateway->text()); 0133 } 0134 0135 if (!m_ui->groupname->text().isEmpty()) { 0136 data.insert(NM_LIBRESWAN_LEFTID, m_ui->groupname->text()); 0137 } 0138 0139 if (!m_ui->userPassword->text().isEmpty()) { 0140 secrets.insert(NM_LIBRESWAN_XAUTH_PASSWORD, m_ui->userPassword->text()); 0141 } 0142 0143 if (m_ui->userPassword->passwordOption() == PasswordField::StoreForAllUsers) { 0144 data.insert(NM_LIBRESWAN_XAUTH_PASSWORD_INPUT_MODES, NM_LIBRESWAN_PW_TYPE_SAVE); 0145 data.insert(NM_LIBRESWAN_XAUTH_PASSWORD "-flags", QString::number(NetworkManager::Setting::None)); 0146 } else if (m_ui->userPassword->passwordOption() == PasswordField::StoreForUser) { 0147 data.insert(NM_LIBRESWAN_XAUTH_PASSWORD "-flags", QString::number(NetworkManager::Setting::AgentOwned)); 0148 } else { 0149 data.insert(NM_LIBRESWAN_XAUTH_PASSWORD_INPUT_MODES, NM_LIBRESWAN_PW_TYPE_ASK); 0150 data.insert(NM_LIBRESWAN_XAUTH_PASSWORD "-flags", QString::number(NetworkManager::Setting::NotSaved)); 0151 } 0152 0153 if (!m_ui->groupPassword->text().isEmpty()) { 0154 secrets.insert(NM_LIBRESWAN_PSK_VALUE, m_ui->groupPassword->text()); 0155 } 0156 0157 if (m_ui->groupPassword->passwordOption() == PasswordField::StoreForAllUsers) { 0158 data.insert(NM_LIBRESWAN_PSK_INPUT_MODES, NM_LIBRESWAN_PW_TYPE_SAVE); 0159 data.insert(NM_LIBRESWAN_PSK_VALUE "-flags", QString::number(NetworkManager::Setting::None)); 0160 } else if (m_ui->groupPassword->passwordOption() == PasswordField::StoreForUser) { 0161 data.insert(NM_LIBRESWAN_PSK_VALUE "-flags", QString::number(NetworkManager::Setting::AgentOwned)); 0162 } else { 0163 data.insert(NM_LIBRESWAN_PSK_INPUT_MODES, NM_LIBRESWAN_PW_TYPE_ASK); 0164 data.insert(NM_LIBRESWAN_PSK_VALUE "-flags", QString::number(NetworkManager::Setting::NotSaved)); 0165 } 0166 0167 if (!m_ui->username->text().isEmpty()) { 0168 data.insert(NM_LIBRESWAN_LEFTXAUTHUSER, m_ui->username->text()); 0169 } 0170 0171 if (!m_ui->phase1->text().isEmpty()) { 0172 data.insert(NM_LIBRESWAN_IKE, m_ui->phase1->text()); 0173 } 0174 0175 if (!m_ui->phase2->text().isEmpty()) { 0176 data.insert(NM_LIBRESWAN_ESP, m_ui->phase2->text()); 0177 } 0178 0179 if (!m_ui->domain->text().isEmpty()) { 0180 data.insert(NM_LIBRESWAN_DOMAIN, m_ui->domain->text()); 0181 } 0182 0183 setting.setData(data); 0184 setting.setSecrets(secrets); 0185 return setting.toMap(); 0186 } 0187 0188 bool LibreswanWidget::isValid() const 0189 { 0190 return !m_ui->gateway->text().isEmpty(); 0191 } 0192 0193 #include "moc_libreswanwidget.cpp"