diff --git a/vpn/fortisslvpn/fortisslvpnadvanced.ui b/vpn/fortisslvpn/fortisslvpnadvanced.ui --- a/vpn/fortisslvpn/fortisslvpnadvanced.ui +++ b/vpn/fortisslvpn/fortisslvpnadvanced.ui @@ -6,8 +6,8 @@ 0 0 - 410 - 110 + 400 + 175 @@ -24,6 +24,28 @@ + + + + 0 + 0 + + + + Autentication + + + + + + Use a One-Time Password + + + + + + + @@ -58,7 +80,7 @@ - + Qt::Vertical diff --git a/vpn/fortisslvpn/fortisslvpnauth.cpp b/vpn/fortisslvpn/fortisslvpnauth.cpp --- a/vpn/fortisslvpn/fortisslvpnauth.cpp +++ b/vpn/fortisslvpn/fortisslvpnauth.cpp @@ -40,6 +40,13 @@ d->ui.setupUi(this); d->setting = setting; + const NetworkManager::Setting::SecretFlags otpFlag = static_cast(data.value(NM_FORTISSLVPN_KEY_OTP"-flags").toInt()); + if (otpFlag == NetworkManager::Setting::NotSaved){ + d->ui.otpFrame->setVisible(true); + } else { + d->ui.otpFrame->setVisible(false); + } + KAcceleratorManager::manage(this); } @@ -58,6 +65,13 @@ if (!d->ui.password->text().isEmpty()) { secrets.insert(QLatin1String(NM_FORTISSLVPN_KEY_PASSWORD), d->ui.password->text()); } + + if (!data.value(NM_FORTISSLVPN_KEY_OTP"-flags").isEmpty()){ + const NetworkManager::Setting::SecretFlags otpFlag = static_cast(data.value(NM_FORTISSLVPN_KEY_OTP"-flags").toInt()); + if (otpFlag == NetworkManager::Setting::NotSaved && !d->ui.otp->text().isEmpty()){ + secrets.insert(QLatin1String(NM_FORTISSLVPN_KEY_OTP),d->ui.otp->text()); + } + } secretData.insert("secrets", QVariant::fromValue(secrets)); return secretData; diff --git a/vpn/fortisslvpn/fortisslvpnauth.ui b/vpn/fortisslvpn/fortisslvpnauth.ui --- a/vpn/fortisslvpn/fortisslvpnauth.ui +++ b/vpn/fortisslvpn/fortisslvpnauth.ui @@ -34,6 +34,38 @@ + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + 0 + + + + + One Time Password + + + + + + + Token: + + + + + + + + + diff --git a/vpn/fortisslvpn/fortisslvpnwidget.cpp b/vpn/fortisslvpn/fortisslvpnwidget.cpp --- a/vpn/fortisslvpn/fortisslvpnwidget.cpp +++ b/vpn/fortisslvpn/fortisslvpnwidget.cpp @@ -128,6 +128,12 @@ d->advUi.trustedCert->setText(trustedCert); } + if (!data.value(NM_FORTISSLVPN_KEY_OTP"-flags").isEmpty()){ + const NetworkManager::Setting::SecretFlags otpFlag = static_cast(data.value(NM_FORTISSLVPN_KEY_OTP"-flags").toInt()); + if (otpFlag & NetworkManager::Setting::NotSaved){ + d->advUi.otp->setChecked(true); + } + } loadSecrets(setting); } @@ -190,7 +196,19 @@ if (!d->advUi.trustedCert->text().isEmpty()) { data.insert(NM_FORTISSLVPN_KEY_TRUSTED_CERT, d->advUi.trustedCert->text()); } - + + const NMStringMap prevData = d->setting->data(); + if (!prevData.value(NM_FORTISSLVPN_KEY_OTP"-flags").isEmpty()){ + const NetworkManager::Setting::SecretFlags otpFlag = static_cast(data.value(NM_FORTISSLVPN_KEY_OTP"-flags").toInt()); + } else { + otpFlag = NULL; + } + if (d->advUi.otp->isChecked()){ + data.insert(QLatin1String(NM_FORTISSLVPN_KEY_OTP"-flags"), QString::number(otpFlags | NetworkManager::Setting::NotSaved); + } else { + data.insert(QLatin1String(NM_FORTISSLVPN_KEY_OTP"-flags"), QString::number(otpFlags & ~NetworkManager::Setting::NotSaved); + } + setting.setData(data); setting.setSecrets(secrets); diff --git a/vpn/fortisslvpn/nm-fortisslvpn-service.h b/vpn/fortisslvpn/nm-fortisslvpn-service.h --- a/vpn/fortisslvpn/nm-fortisslvpn-service.h +++ b/vpn/fortisslvpn/nm-fortisslvpn-service.h @@ -32,6 +32,7 @@ #define NM_FORTISSLVPN_KEY_GATEWAY "gateway" #define NM_FORTISSLVPN_KEY_USER "user" #define NM_FORTISSLVPN_KEY_PASSWORD "password" +#define NM_FORTISSLVPN_KEY_OTP "otp" #define NM_FORTISSLVPN_KEY_CA "ca" #define NM_FORTISSLVPN_KEY_CERT "cert" #define NM_FORTISSLVPN_KEY_KEY "key"