File indexing completed on 2024-05-05 17:42:56
0001 /* 0002 SPDX-FileCopyrightText: 2013 Lukas Tinkl <ltinkl@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 "vpncadvancedwidget.h" 0008 #include "nm-vpnc-service.h" 0009 #include "ui_vpncadvanced.h" 0010 0011 #include <KAcceleratorManager> 0012 #include <KLocalizedString> 0013 0014 VpncAdvancedWidget::VpncAdvancedWidget(const NetworkManager::VpnSetting::Ptr &setting, QWidget *parent) 0015 : QDialog(parent) 0016 , m_ui(new Ui::VpncAdvancedWidget) 0017 { 0018 m_ui->setupUi(this); 0019 0020 setWindowTitle(i18n("Advanced VPNC properties")); 0021 0022 // vendor 0023 m_ui->vendor->addItem(i18nc("VPNC vendor name", "Cisco"), NM_VPNC_VENDOR_CISCO); 0024 m_ui->vendor->addItem(i18nc("VPNC vendor name", "Netscreen"), NM_VPNC_VENDOR_NETSCREEN); 0025 0026 // encryption 0027 m_ui->encryption->addItem(i18nc("VPNC encryption method", "Secure (default)")); 0028 m_ui->encryption->addItem(i18nc("VPNC encryption method", "Weak (DES encryption, use with caution)"), NM_VPNC_KEY_SINGLE_DES); 0029 m_ui->encryption->addItem(i18nc("VPNC encryption method", "None (completely insecure)"), NM_VPNC_KEY_NO_ENCRYPTION); 0030 0031 // NAT traversal 0032 m_ui->nat->addItem(i18nc("NAT traversal method", "NAT-T when available (default)"), NM_VPNC_NATT_MODE_NATT); 0033 m_ui->nat->addItem(i18nc("NAT traversal method", "NAT-T always"), NM_VPNC_NATT_MODE_NATT_ALWAYS); 0034 m_ui->nat->addItem(i18nc("NAT traversal method", "Cisco UDP"), NM_VPNC_NATT_MODE_CISCO); 0035 m_ui->nat->addItem(i18nc("NAT traversal method", "Disabled"), NM_VPNC_NATT_MODE_NONE); 0036 0037 // IKE DH group 0038 m_ui->dhGroup->addItem(i18nc("IKE DH group", "DH Group 1"), NM_VPNC_DHGROUP_DH1); 0039 m_ui->dhGroup->addItem(i18nc("IKE DH group", "DH Group 2 (default)"), NM_VPNC_DHGROUP_DH2); 0040 m_ui->dhGroup->addItem(i18nc("IKE DH group", "DH Group 5"), NM_VPNC_DHGROUP_DH5); 0041 0042 // PFS 0043 m_ui->pfs->addItem(i18nc("Perfect Forward Secrecy", "Server (default)"), NM_VPNC_PFS_SERVER); 0044 m_ui->pfs->addItem(i18nc("Perfect Forward Secrecy", "None"), NM_VPNC_PFS_NOPFS); 0045 m_ui->pfs->addItem(i18nc("Perfect Forward Secrecy", "DH Group 1"), NM_VPNC_PFS_DH1); 0046 m_ui->pfs->addItem(i18nc("Perfect Forward Secrecy", "DH Group 2"), NM_VPNC_PFS_DH2); 0047 m_ui->pfs->addItem(i18nc("Perfect Forward Secrecy", "DH Group 5"), NM_VPNC_PFS_DH5); 0048 0049 loadConfig(setting); 0050 0051 KAcceleratorManager::manage(this); 0052 } 0053 0054 VpncAdvancedWidget::~VpncAdvancedWidget() 0055 { 0056 delete m_ui; 0057 } 0058 0059 void VpncAdvancedWidget::loadConfig(const NetworkManager::VpnSetting::Ptr &setting) 0060 { 0061 m_ui->domain->setText(setting->data().value(NM_VPNC_KEY_DOMAIN)); 0062 0063 const QString vendor = setting->data().value(NM_VPNC_KEY_VENDOR); 0064 if (!vendor.isEmpty()) { 0065 m_ui->vendor->setCurrentIndex(m_ui->vendor->findData(vendor)); 0066 } 0067 0068 if (setting->data().value(NM_VPNC_KEY_SINGLE_DES) == "yes") { 0069 m_ui->encryption->setCurrentIndex(m_ui->encryption->findData(NM_VPNC_KEY_SINGLE_DES)); 0070 } else if (setting->data().value(NM_VPNC_KEY_NO_ENCRYPTION) == "yes") { 0071 m_ui->encryption->setCurrentIndex(m_ui->encryption->findData(NM_VPNC_KEY_NO_ENCRYPTION)); 0072 } 0073 0074 const QString nat = setting->data().value(NM_VPNC_KEY_NAT_TRAVERSAL_MODE); 0075 if (!nat.isEmpty()) { 0076 m_ui->nat->setCurrentIndex(m_ui->nat->findData(nat)); 0077 } 0078 0079 const QString dhGroup = setting->data().value(NM_VPNC_KEY_DHGROUP); 0080 if (!dhGroup.isEmpty()) { 0081 m_ui->dhGroup->setCurrentIndex(m_ui->dhGroup->findData(dhGroup)); 0082 } else { 0083 m_ui->dhGroup->setCurrentIndex(m_ui->dhGroup->findData(NM_VPNC_DHGROUP_DH2)); // default 0084 } 0085 0086 const QString pfs = setting->data().value(NM_VPNC_KEY_PERFECT_FORWARD); 0087 if (!pfs.isEmpty()) { 0088 m_ui->pfs->setCurrentIndex(m_ui->pfs->findData(pfs)); 0089 } 0090 0091 bool ok = false; 0092 0093 const QString localport = setting->data().value(NM_VPNC_KEY_LOCAL_PORT); 0094 if (!localport.isEmpty()) { 0095 const uint localportNum = localport.toUInt(&ok); 0096 if (ok && localportNum <= 65535) { 0097 m_ui->localport->setValue(localportNum); 0098 } 0099 } 0100 0101 const uint dpd = setting->data().value(NM_VPNC_KEY_DPD_IDLE_TIMEOUT).toUInt(&ok); 0102 m_ui->deadPeer->setChecked(ok && dpd == 0); 0103 } 0104 0105 NMStringMap VpncAdvancedWidget::setting() const 0106 { 0107 NMStringMap result; 0108 if (!m_ui->domain->text().isEmpty()) { 0109 result.insert(NM_VPNC_KEY_DOMAIN, m_ui->domain->text()); 0110 } 0111 0112 result.insert(NM_VPNC_KEY_VENDOR, m_ui->vendor->currentData().toString()); 0113 0114 const QString encData = m_ui->encryption->currentData().toString(); 0115 if (!encData.isEmpty()) { 0116 if (encData == NM_VPNC_KEY_SINGLE_DES) { 0117 result.insert(NM_VPNC_KEY_SINGLE_DES, "yes"); 0118 } else if (encData == NM_VPNC_KEY_NO_ENCRYPTION) { 0119 result.insert(NM_VPNC_KEY_NO_ENCRYPTION, "yes"); 0120 } 0121 } 0122 0123 result.insert(NM_VPNC_KEY_NAT_TRAVERSAL_MODE, m_ui->nat->currentData().toString()); 0124 result.insert(NM_VPNC_KEY_DHGROUP, m_ui->dhGroup->currentData().toString()); 0125 result.insert(NM_VPNC_KEY_PERFECT_FORWARD, m_ui->pfs->currentData().toString()); 0126 result.insert(NM_VPNC_KEY_LOCAL_PORT, QString::number(m_ui->localport->value())); 0127 0128 if (m_ui->deadPeer->isChecked()) { 0129 result.insert(NM_VPNC_KEY_DPD_IDLE_TIMEOUT, "0"); 0130 } 0131 0132 return result; 0133 }