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 @@ -37,9 +37,15 @@ , d_ptr(new FortisslvpnAuthDialogPrivate) { Q_D(FortisslvpnAuthDialog); + + const NMStringMap data = d->setting->data(); + d->ui.setupUi(this); d->setting = setting; + const NetworkManager::Setting::SecretFlags otpFlag = static_cast(data.value(NM_FORTISSLVPN_KEY_OTP"-flags").toInt()); + d->ui.otpFrame->setVisible(otpFlag == NetworkManager::Setting::NotSaved); + KAcceleratorManager::manage(this); } @@ -52,13 +58,21 @@ { Q_D(const FortisslvpnAuthDialog); + const NMStringMap data = d->setting->data(); NMStringMap secrets; QVariantMap secretData; 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); } @@ -191,6 +197,10 @@ data.insert(NM_FORTISSLVPN_KEY_TRUSTED_CERT, d->advUi.trustedCert->text()); } + if (d->advUi.otp->isChecked()) { + data.insert(QLatin1String(NM_FORTISSLVPN_KEY_OTP"-flags"), QString::number(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"