mirror of
https://github.com/the-djmaze/snappymail.git
synced 2026-07-13 03:27:39 +03:00
Add support for global 2FA enforcement #349
This commit is contained in:
parent
375f715b78
commit
8b3cfc7a67
15 changed files with 85 additions and 54 deletions
|
|
@ -7,9 +7,9 @@ class TwoFactorAuthPlugin extends \RainLoop\Plugins\AbstractPlugin
|
||||||
{
|
{
|
||||||
const
|
const
|
||||||
NAME = 'Two Factor Authentication',
|
NAME = 'Two Factor Authentication',
|
||||||
VERSION = '2.13.3',
|
VERSION = '2.15.0',
|
||||||
RELEASE = '2022-03-04',
|
RELEASE = '2022-04-25',
|
||||||
REQUIRED = '2.13.2',
|
REQUIRED = '2.15.0',
|
||||||
CATEGORY = 'Login',
|
CATEGORY = 'Login',
|
||||||
DESCRIPTION = 'Provides support for TOTP 2FA';
|
DESCRIPTION = 'Provides support for TOTP 2FA';
|
||||||
|
|
||||||
|
|
@ -21,6 +21,7 @@ class TwoFactorAuthPlugin extends \RainLoop\Plugins\AbstractPlugin
|
||||||
$this->addJs('js/TwoFactorAuthSettings.js');
|
$this->addJs('js/TwoFactorAuthSettings.js');
|
||||||
|
|
||||||
$this->addHook('login.success', 'DoLogin');
|
$this->addHook('login.success', 'DoLogin');
|
||||||
|
$this->addHook('filter.app-data', 'FilterAppData');
|
||||||
|
|
||||||
$this->addJsonHook('GetTwoFactorInfo', 'DoGetTwoFactorInfo');
|
$this->addJsonHook('GetTwoFactorInfo', 'DoGetTwoFactorInfo');
|
||||||
$this->addJsonHook('CreateTwoFactorSecret', 'DoCreateTwoFactorSecret');
|
$this->addJsonHook('CreateTwoFactorSecret', 'DoCreateTwoFactorSecret');
|
||||||
|
|
@ -33,6 +34,23 @@ class TwoFactorAuthPlugin extends \RainLoop\Plugins\AbstractPlugin
|
||||||
$this->addTemplate('templates/PopupsTwoFactorAuthTest.html');
|
$this->addTemplate('templates/PopupsTwoFactorAuthTest.html');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function configMapping() : array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
\RainLoop\Plugins\Property::NewInstance("force_two_factor_auth")
|
||||||
|
// ->SetLabel('PLUGIN_TWO_FACTOR/LABEL_FORCE')
|
||||||
|
->SetLabel('Enforce 2-Step Verification')
|
||||||
|
->SetType(\RainLoop\Enumerations\PluginPropertyType::BOOL),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function FilterAppData($bAdmin, &$aResult)
|
||||||
|
{
|
||||||
|
if (!$bAdmin && \is_array($aResult)/* && isset($aResult['Auth']) && !$aResult['Auth']*/) {
|
||||||
|
$aResult['RequireTwoFactor'] = $this->Config()->Get('plugin', 'force_two_factor_auth', false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public function DoLogin(MainAccount $oAccount)
|
public function DoLogin(MainAccount $oAccount)
|
||||||
{
|
{
|
||||||
if ($this->TwoFactorAuthProvider($oAccount)) {
|
if ($this->TwoFactorAuthProvider($oAccount)) {
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,10 @@
|
||||||
|
|
||||||
(rl => {
|
(rl => {
|
||||||
|
|
||||||
rl && addEventListener('rl-view-model', e => {
|
addEventListener('rl-view-model', e => {
|
||||||
if (e.detail && 'Login' === e.detail.viewModelTemplateID) {
|
if (e.detail && 'Login' === e.detail.viewModelTemplateID) {
|
||||||
const container = e.detail.viewModelDom.querySelector('#plugin-Login-BottomControlGroup'),
|
const container = e.detail.viewModelDom.querySelector('#plugin-Login-BottomControlGroup'),
|
||||||
placeholder = 'LOGIN/LABEL_TWO_FACTOR_CODE';
|
placeholder = 'PLUGIN_2FA/LABEL_TWO_FACTOR_CODE';
|
||||||
if (container) {
|
if (container) {
|
||||||
container.prepend(Element.fromHTML('<div class="controls">'
|
container.prepend(Element.fromHTML('<div class="controls">'
|
||||||
+ '<span class="fontastic">⏱</span>'
|
+ '<span class="fontastic">⏱</span>'
|
||||||
|
|
@ -18,4 +18,15 @@
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// https://github.com/the-djmaze/snappymail/issues/349
|
||||||
|
let code;
|
||||||
|
addEventListener('sm-user-login', e => {
|
||||||
|
code = e.detail.get('totp_code');
|
||||||
|
});
|
||||||
|
addEventListener('sm-user-login-response', e => {
|
||||||
|
if (e.detail && !e.detail.error && rl.settings.get('RequireTwoFactor') && !code) {
|
||||||
|
document.location.hash = '#/settings/two-factor-auth';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
})(window.rl);
|
})(window.rl);
|
||||||
|
|
|
||||||
|
|
@ -70,12 +70,12 @@ class TwoFactorAuthSettings
|
||||||
// translatorTrigger();
|
// translatorTrigger();
|
||||||
return this.twoFactorTested() || this.viewEnable_()
|
return this.twoFactorTested() || this.viewEnable_()
|
||||||
? ''
|
? ''
|
||||||
: rl.i18n('POPUPS_TWO_FACTOR_CFG/TWO_FACTOR_SECRET_TEST_BEFORE_DESC');
|
: rl.i18n('PLUGIN_2FA/TWO_FACTOR_SECRET_TEST_BEFORE_DESC');
|
||||||
},
|
},
|
||||||
|
|
||||||
viewTwoFactorStatus: () => {
|
viewTwoFactorStatus: () => {
|
||||||
// translatorTrigger();
|
// translatorTrigger();
|
||||||
return rl.i18n('POPUPS_TWO_FACTOR_CFG/TWO_FACTOR_SECRET_'
|
return rl.i18n('PLUGIN_2FA/TWO_FACTOR_SECRET_'
|
||||||
+ (this.twoFactorStatus() ? '' : 'NOT_')
|
+ (this.twoFactorStatus() ? '' : 'NOT_')
|
||||||
+ 'CONFIGURED_DESC'
|
+ 'CONFIGURED_DESC'
|
||||||
);
|
);
|
||||||
|
|
@ -202,7 +202,7 @@ class TwoFactorAuthTestPopupView extends rl.pluginPopupView {
|
||||||
rl.addSettingsViewModel(
|
rl.addSettingsViewModel(
|
||||||
TwoFactorAuthSettings,
|
TwoFactorAuthSettings,
|
||||||
'TwoFactorAuthSettings',
|
'TwoFactorAuthSettings',
|
||||||
'POPUPS_TWO_FACTOR_CFG/LEGEND_TWO_FACTOR_AUTH',
|
'PLUGIN_2FA/LEGEND_TWO_FACTOR_AUTH',
|
||||||
'two-factor-auth'
|
'two-factor-auth'
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
||||||
20
plugins/two-factor-auth/langs/cs-CZ.ini
Normal file
20
plugins/two-factor-auth/langs/cs-CZ.ini
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
[PLUGIN_2FA]
|
||||||
|
LEGEND_TWO_FACTOR_AUTH = "Dvoufázové ověření"
|
||||||
|
LABEL_ENABLE_TWO_FACTOR = "Povolit dvoufázové ověření"
|
||||||
|
LABEL_TWO_FACTOR_USER = "Uživatel"
|
||||||
|
LABEL_TWO_FACTOR_STATUS = "Stav"
|
||||||
|
LABEL_TWO_FACTOR_SECRET = "Tajný klíč"
|
||||||
|
LABEL_TWO_FACTOR_BACKUP_CODES = "Backup codes"
|
||||||
|
BUTTON_CREATE = "Create a secret"
|
||||||
|
BUTTON_ACTIVATE = "Activate"
|
||||||
|
LINK_TEST = "test"
|
||||||
|
BUTTON_SHOW_SECRET = "Show Secret"
|
||||||
|
BUTTON_HIDE_SECRET = "Hide Secret"
|
||||||
|
TWO_FACTOR_SECRET_CONFIGURED_DESC = "Configured"
|
||||||
|
TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "Not configured"
|
||||||
|
TWO_FACTOR_SECRET_DESC = "Import this info into your Google Authenticator client (or other TOTP client) using the provided QR code below or by entering the code manually.\n"
|
||||||
|
TWO_FACTOR_BACKUP_CODES_DESC = "If you can't receive codes via Google Authenticator (or other TOTP client), you can use backup codes to sign in. After you’ve used a backup code to sign in, it will become inactive.\n"
|
||||||
|
TWO_FACTOR_SECRET_TEST_BEFORE_DESC = "You can't change this setting before test."
|
||||||
|
TITLE_TEST_CODE = "2-Step verification test"
|
||||||
|
LABEL_CODE = "Code"
|
||||||
|
LABEL_TWO_FACTOR_CODE = "Verification Code"
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
[POPUPS_TWO_FACTOR_CFG]
|
[PLUGIN_2FA]
|
||||||
LEGEND_TWO_FACTOR_AUTH = "Zwei-Faktor-Authentifizierung"
|
LEGEND_TWO_FACTOR_AUTH = "Zwei-Faktor-Authentifizierung"
|
||||||
LABEL_ENABLE_TWO_FACTOR = "Zwei-Faktor-Authentifizierung aktivieren"
|
LABEL_ENABLE_TWO_FACTOR = "Zwei-Faktor-Authentifizierung aktivieren"
|
||||||
LABEL_TWO_FACTOR_USER = "Benutzer"
|
LABEL_TWO_FACTOR_USER = "Benutzer"
|
||||||
|
|
@ -15,8 +15,6 @@ TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "Nicht konfiguriert"
|
||||||
TWO_FACTOR_SECRET_DESC = "Importieren Sie diese Information in Ihre Google-Authenticator-Anwendung (oder andere TOTP-Anwendung), indem Sie den unten bereitgestellten QR-Code verwenden oder den Code manuell eingeben."
|
TWO_FACTOR_SECRET_DESC = "Importieren Sie diese Information in Ihre Google-Authenticator-Anwendung (oder andere TOTP-Anwendung), indem Sie den unten bereitgestellten QR-Code verwenden oder den Code manuell eingeben."
|
||||||
TWO_FACTOR_BACKUP_CODES_DESC = "Sollten Sie keine Codes über den Google Authenticator erhalten, können Sie einen Sicherungscode zur Anmeldung verwenden. Der Sicherungscode wird inaktiv, sobald Sie ihn zur Anmeldung verwendet haben."
|
TWO_FACTOR_BACKUP_CODES_DESC = "Sollten Sie keine Codes über den Google Authenticator erhalten, können Sie einen Sicherungscode zur Anmeldung verwenden. Der Sicherungscode wird inaktiv, sobald Sie ihn zur Anmeldung verwendet haben."
|
||||||
TWO_FACTOR_SECRET_TEST_BEFORE_DESC = "Sie können diese Einstellung nicht ohne vorherigen Test verändern."
|
TWO_FACTOR_SECRET_TEST_BEFORE_DESC = "Sie können diese Einstellung nicht ohne vorherigen Test verändern."
|
||||||
[POPUPS_TWO_FACTOR_TEST]
|
|
||||||
TITLE_TEST_CODE = "Zwei-Faktor-Authentifizierung"
|
TITLE_TEST_CODE = "Zwei-Faktor-Authentifizierung"
|
||||||
LABEL_CODE = "Code"
|
LABEL_CODE = "Code"
|
||||||
[LOGIN]
|
|
||||||
LABEL_TWO_FACTOR_CODE = "Verifizierungscode"
|
LABEL_TWO_FACTOR_CODE = "Verifizierungscode"
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,4 @@
|
||||||
[POPUPS_TWO_FACTOR_TEST]
|
[PLUGIN_2FA]
|
||||||
TITLE_TEST_CODE = "2-Step verification test"
|
|
||||||
LABEL_CODE = "Code"
|
|
||||||
[POPUPS_TWO_FACTOR_CFG]
|
|
||||||
LEGEND_TWO_FACTOR_AUTH = "2-Step Verification (TOTP)"
|
LEGEND_TWO_FACTOR_AUTH = "2-Step Verification (TOTP)"
|
||||||
LABEL_ENABLE_TWO_FACTOR = "Enable 2-Step verification"
|
LABEL_ENABLE_TWO_FACTOR = "Enable 2-Step verification"
|
||||||
LABEL_TWO_FACTOR_USER = "User"
|
LABEL_TWO_FACTOR_USER = "User"
|
||||||
|
|
@ -18,5 +15,6 @@ TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "Not configured"
|
||||||
TWO_FACTOR_SECRET_DESC = "Import this info into your Google Authenticator client (or other TOTP client) using the provided QR code below or by entering the code manually.\n"
|
TWO_FACTOR_SECRET_DESC = "Import this info into your Google Authenticator client (or other TOTP client) using the provided QR code below or by entering the code manually.\n"
|
||||||
TWO_FACTOR_BACKUP_CODES_DESC = "If you can't receive codes via Google Authenticator (or other TOTP client), you can use backup codes to sign in. After you’ve used a backup code to sign in, it will become inactive.\n"
|
TWO_FACTOR_BACKUP_CODES_DESC = "If you can't receive codes via Google Authenticator (or other TOTP client), you can use backup codes to sign in. After you’ve used a backup code to sign in, it will become inactive.\n"
|
||||||
TWO_FACTOR_SECRET_TEST_BEFORE_DESC = "You can't change this setting before test."
|
TWO_FACTOR_SECRET_TEST_BEFORE_DESC = "You can't change this setting before test."
|
||||||
[LOGIN]
|
TITLE_TEST_CODE = "2-Step verification test"
|
||||||
|
LABEL_CODE = "Code"
|
||||||
LABEL_TWO_FACTOR_CODE = "Verification Code"
|
LABEL_TWO_FACTOR_CODE = "Verification Code"
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,4 @@
|
||||||
[POPUPS_TWO_FACTOR_TEST]
|
[PLUGIN_2FA]
|
||||||
TITLE_TEST_CODE = "Prueba de verificación de 2 pasos"
|
|
||||||
LABEL_CODE = "Código"
|
|
||||||
[POPUPS_TWO_FACTOR_CFG]
|
|
||||||
LEGEND_TWO_FACTOR_AUTH = "Verificación de 2 Pasos"
|
LEGEND_TWO_FACTOR_AUTH = "Verificación de 2 Pasos"
|
||||||
LABEL_ENABLE_TWO_FACTOR = "Activar la verificación de 2 pasos"
|
LABEL_ENABLE_TWO_FACTOR = "Activar la verificación de 2 pasos"
|
||||||
LABEL_TWO_FACTOR_USER = "Usuario"
|
LABEL_TWO_FACTOR_USER = "Usuario"
|
||||||
|
|
@ -18,5 +15,6 @@ TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "No configurado"
|
||||||
TWO_FACTOR_SECRET_DESC = "Importar esta información en su cliente Google Authenticator (u otro cliente TOTP) utilizando el código QR se indica debajo o introduciendo el código manualmente."
|
TWO_FACTOR_SECRET_DESC = "Importar esta información en su cliente Google Authenticator (u otro cliente TOTP) utilizando el código QR se indica debajo o introduciendo el código manualmente."
|
||||||
TWO_FACTOR_BACKUP_CODES_DESC = "Si usted no puede recibir los códigos a través de Google Authenticator, puede utilizar códigos de copia de seguridad para firmar pulg Después de que usted ha utilizado un código de copia de seguridad para iniciar sesión, se convertirá en inactiva."
|
TWO_FACTOR_BACKUP_CODES_DESC = "Si usted no puede recibir los códigos a través de Google Authenticator, puede utilizar códigos de copia de seguridad para firmar pulg Después de que usted ha utilizado un código de copia de seguridad para iniciar sesión, se convertirá en inactiva."
|
||||||
TWO_FACTOR_SECRET_TEST_BEFORE_DESC = "You can't change this setting before test."
|
TWO_FACTOR_SECRET_TEST_BEFORE_DESC = "You can't change this setting before test."
|
||||||
[LOGIN]
|
TITLE_TEST_CODE = "Prueba de verificación de 2 pasos"
|
||||||
|
LABEL_CODE = "Código"
|
||||||
LABEL_TWO_FACTOR_CODE = "Código de verificación"
|
LABEL_TWO_FACTOR_CODE = "Código de verificación"
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
[POPUPS_TWO_FACTOR_CFG]
|
[PLUGIN_2FA]
|
||||||
LEGEND_TWO_FACTOR_AUTH = "Authentification en deux étapes"
|
LEGEND_TWO_FACTOR_AUTH = "Authentification en deux étapes"
|
||||||
LABEL_ENABLE_TWO_FACTOR = "Activer l'authentification en deux étapes"
|
LABEL_ENABLE_TWO_FACTOR = "Activer l'authentification en deux étapes"
|
||||||
LABEL_TWO_FACTOR_USER = "Utilisateur"
|
LABEL_TWO_FACTOR_USER = "Utilisateur"
|
||||||
|
|
@ -15,8 +15,6 @@ TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "Non configuré"
|
||||||
TWO_FACTOR_SECRET_DESC = "Importez ces informations dans votre client Google Authenticator (ou un autre client TOTP) en utilisant le code QR fourni ci-dessous ou en entrant les valeurs manuellement."
|
TWO_FACTOR_SECRET_DESC = "Importez ces informations dans votre client Google Authenticator (ou un autre client TOTP) en utilisant le code QR fourni ci-dessous ou en entrant les valeurs manuellement."
|
||||||
TWO_FACTOR_BACKUP_CODES_DESC = "Si vous ne pouvez pas recevoir les codes par Google Authenticator, vous pouvez utiliser les codes de sauvegarde pour vous connecter. Après avoir fait cela, il deviendra inactif."
|
TWO_FACTOR_BACKUP_CODES_DESC = "Si vous ne pouvez pas recevoir les codes par Google Authenticator, vous pouvez utiliser les codes de sauvegarde pour vous connecter. Après avoir fait cela, il deviendra inactif."
|
||||||
TWO_FACTOR_SECRET_TEST_BEFORE_DESC = "Vous ne pouvez pas modifier ce paramètre avant de l'avoir essayé."
|
TWO_FACTOR_SECRET_TEST_BEFORE_DESC = "Vous ne pouvez pas modifier ce paramètre avant de l'avoir essayé."
|
||||||
[POPUPS_TWO_FACTOR_TEST]
|
|
||||||
TITLE_TEST_CODE = "Test d'authentification en deux étapes"
|
TITLE_TEST_CODE = "Test d'authentification en deux étapes"
|
||||||
LABEL_CODE = "Code"
|
LABEL_CODE = "Code"
|
||||||
[LOGIN]
|
|
||||||
LABEL_TWO_FACTOR_CODE = "Code de vérification"
|
LABEL_TWO_FACTOR_CODE = "Code de vérification"
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
[POPUPS_TWO_FACTOR_CFG]
|
[PLUGIN_2FA]
|
||||||
LEGEND_TWO_FACTOR_AUTH = "2 lépcsős hitelesítés"
|
LEGEND_TWO_FACTOR_AUTH = "2 lépcsős hitelesítés"
|
||||||
LABEL_ENABLE_TWO_FACTOR = "2 lépcsős hitelesítés engedélyezése"
|
LABEL_ENABLE_TWO_FACTOR = "2 lépcsős hitelesítés engedélyezése"
|
||||||
LABEL_TWO_FACTOR_USER = "Felhasználó"
|
LABEL_TWO_FACTOR_USER = "Felhasználó"
|
||||||
|
|
@ -15,8 +15,6 @@ TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "Nincs beállítva"
|
||||||
TWO_FACTOR_SECRET_DESC = "Importáld ezt az infót a Google Authenticator kliensedbe (vagy más TOTP kliensbe) az alábbi QR kód használatával vagy a kód manuális megadatásával.\n"
|
TWO_FACTOR_SECRET_DESC = "Importáld ezt az infót a Google Authenticator kliensedbe (vagy más TOTP kliensbe) az alábbi QR kód használatával vagy a kód manuális megadatásával.\n"
|
||||||
TWO_FACTOR_BACKUP_CODES_DESC = "Ha nem kapod meg a kódokat a Google Authenticator kliensből (vagy más TOTP kliensből), akkor a bejelentkezéshez használhatod a biztonsági kódot. A biztonsági kód használata után inaktívvá válik.\n"
|
TWO_FACTOR_BACKUP_CODES_DESC = "Ha nem kapod meg a kódokat a Google Authenticator kliensből (vagy más TOTP kliensből), akkor a bejelentkezéshez használhatod a biztonsági kódot. A biztonsági kód használata után inaktívvá válik.\n"
|
||||||
TWO_FACTOR_SECRET_TEST_BEFORE_DESC = "Tesztelés nélkül nem lehet megváltoztatni ezt a beállítást."
|
TWO_FACTOR_SECRET_TEST_BEFORE_DESC = "Tesztelés nélkül nem lehet megváltoztatni ezt a beállítást."
|
||||||
[POPUPS_TWO_FACTOR_TEST]
|
|
||||||
TITLE_TEST_CODE = "2-lépéses hitelesítés teszt"
|
TITLE_TEST_CODE = "2-lépéses hitelesítés teszt"
|
||||||
LABEL_CODE = "Kód"
|
LABEL_CODE = "Kód"
|
||||||
[LOGIN]
|
|
||||||
LABEL_TWO_FACTOR_CODE = "Megerősítő kód"
|
LABEL_TWO_FACTOR_CODE = "Megerősítő kód"
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,4 @@
|
||||||
[POPUPS_TWO_FACTOR_TEST]
|
[PLUGIN_2FA]
|
||||||
TITLE_TEST_CODE = "Test di verifica a 2 fattori"
|
|
||||||
LABEL_CODE = "Codice"
|
|
||||||
[POPUPS_TWO_FACTOR_CFG]
|
|
||||||
LEGEND_TWO_FACTOR_AUTH = "Verifica a 2 Fattori"
|
LEGEND_TWO_FACTOR_AUTH = "Verifica a 2 Fattori"
|
||||||
LABEL_ENABLE_TWO_FACTOR = "Abilita la verifica a 2 fattori"
|
LABEL_ENABLE_TWO_FACTOR = "Abilita la verifica a 2 fattori"
|
||||||
LABEL_TWO_FACTOR_USER = "Utente"
|
LABEL_TWO_FACTOR_USER = "Utente"
|
||||||
|
|
@ -18,5 +15,6 @@ TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "Non configurato"
|
||||||
TWO_FACTOR_SECRET_DESC = "Importa queste informazioni nella tua app Google Authenticator (o un altro programma per l'autenticazione a due fattori) utilizzando il codice QR fornito qui sotto o inserendo il codice manualmente.\n"
|
TWO_FACTOR_SECRET_DESC = "Importa queste informazioni nella tua app Google Authenticator (o un altro programma per l'autenticazione a due fattori) utilizzando il codice QR fornito qui sotto o inserendo il codice manualmente.\n"
|
||||||
TWO_FACTOR_BACKUP_CODES_DESC = "Se non riesci a ricevere i codici tramite Google Authenticator (o un altro programma per l'autenticazione a due fattori), puoi utilizzare i codici di backup per accedere. Dopo che hai utilizzato un codice di backup per accedere, diventerà inattivo.\n"
|
TWO_FACTOR_BACKUP_CODES_DESC = "Se non riesci a ricevere i codici tramite Google Authenticator (o un altro programma per l'autenticazione a due fattori), puoi utilizzare i codici di backup per accedere. Dopo che hai utilizzato un codice di backup per accedere, diventerà inattivo.\n"
|
||||||
TWO_FACTOR_SECRET_TEST_BEFORE_DESC = "Non puoi modificare questa impostazione prima del test."
|
TWO_FACTOR_SECRET_TEST_BEFORE_DESC = "Non puoi modificare questa impostazione prima del test."
|
||||||
[LOGIN]
|
TITLE_TEST_CODE = "Test di verifica a 2 fattori"
|
||||||
|
LABEL_CODE = "Codice"
|
||||||
LABEL_TWO_FACTOR_CODE = "Codice di Verifica"
|
LABEL_TWO_FACTOR_CODE = "Codice di Verifica"
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
[POPUPS_TWO_FACTOR_CFG]
|
[PLUGIN_2FA]
|
||||||
LEGEND_TWO_FACTOR_AUTH = "2-Stap verificatie"
|
LEGEND_TWO_FACTOR_AUTH = "2-Stap verificatie"
|
||||||
LABEL_ENABLE_TWO_FACTOR = "Gebruik 2-Stap verificatie"
|
LABEL_ENABLE_TWO_FACTOR = "Gebruik 2-Stap verificatie"
|
||||||
LABEL_TWO_FACTOR_USER = "Gebruikersnaam"
|
LABEL_TWO_FACTOR_USER = "Gebruikersnaam"
|
||||||
|
|
@ -15,8 +15,6 @@ TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "Niet geconfigureerd"
|
||||||
TWO_FACTOR_SECRET_DESC = "Importeer deze informatie in uw Google Authenticator-client (of andere TOTP-client) door gebruik te maken van de QR code hier beneden of door de code handmatig in te voeren."
|
TWO_FACTOR_SECRET_DESC = "Importeer deze informatie in uw Google Authenticator-client (of andere TOTP-client) door gebruik te maken van de QR code hier beneden of door de code handmatig in te voeren."
|
||||||
TWO_FACTOR_BACKUP_CODES_DESC = "Als u geen codes ontvangt via de Google Authenticator kunt u de backup codes gebruiken om in te loggen. Na gebruik van de backup code wordt deze inactief."
|
TWO_FACTOR_BACKUP_CODES_DESC = "Als u geen codes ontvangt via de Google Authenticator kunt u de backup codes gebruiken om in te loggen. Na gebruik van de backup code wordt deze inactief."
|
||||||
TWO_FACTOR_SECRET_TEST_BEFORE_DESC = "U kunt 2-stap verificatie niet activeren voordat u het succesvol getest heeft."
|
TWO_FACTOR_SECRET_TEST_BEFORE_DESC = "U kunt 2-stap verificatie niet activeren voordat u het succesvol getest heeft."
|
||||||
[POPUPS_TWO_FACTOR_TEST]
|
|
||||||
TITLE_TEST_CODE = "2-Stap verificatie test"
|
TITLE_TEST_CODE = "2-Stap verificatie test"
|
||||||
LABEL_CODE = "Code"
|
LABEL_CODE = "Code"
|
||||||
[LOGIN]
|
|
||||||
LABEL_TWO_FACTOR_CODE = "Verificatie Code"
|
LABEL_TWO_FACTOR_CODE = "Verificatie Code"
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
[POPUPS_TWO_FACTOR_CFG]
|
[PLUGIN_2FA]
|
||||||
LEGEND_TWO_FACTOR_AUTH = "Tvåstegsverifiering (TOTP)"
|
LEGEND_TWO_FACTOR_AUTH = "Tvåstegsverifiering (TOTP)"
|
||||||
LABEL_ENABLE_TWO_FACTOR = "Aktivera tvåstegsverifiering"
|
LABEL_ENABLE_TWO_FACTOR = "Aktivera tvåstegsverifiering"
|
||||||
LABEL_TWO_FACTOR_USER = "Användare"
|
LABEL_TWO_FACTOR_USER = "Användare"
|
||||||
|
|
@ -15,8 +15,6 @@ TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "Inte konfigurarad"
|
||||||
TWO_FACTOR_SECRET_DESC = "Importera denna information till din Google Authenticator klient (eller annan TOTP klient) med denna QR kod eller manuellt med koden här nedan."
|
TWO_FACTOR_SECRET_DESC = "Importera denna information till din Google Authenticator klient (eller annan TOTP klient) med denna QR kod eller manuellt med koden här nedan."
|
||||||
TWO_FACTOR_BACKUP_CODES_DESC = "Om du inte kan ta emot koderna med Google Authenticator, så använd backupkoderna för att logga in. När du använt backupkoderna för att logga in så blir dom inaktiva."
|
TWO_FACTOR_BACKUP_CODES_DESC = "Om du inte kan ta emot koderna med Google Authenticator, så använd backupkoderna för att logga in. När du använt backupkoderna för att logga in så blir dom inaktiva."
|
||||||
TWO_FACTOR_SECRET_TEST_BEFORE_DESC = "Du kan inte ändra denna inställning innan test."
|
TWO_FACTOR_SECRET_TEST_BEFORE_DESC = "Du kan inte ändra denna inställning innan test."
|
||||||
[POPUPS_TWO_FACTOR_TEST]
|
|
||||||
TITLE_TEST_CODE = "Tvåstegsverifieringstest"
|
TITLE_TEST_CODE = "Tvåstegsverifieringstest"
|
||||||
LABEL_CODE = "Kod"
|
LABEL_CODE = "Kod"
|
||||||
[LOGIN]
|
|
||||||
LABEL_TWO_FACTOR_CODE = "Verifikationskod"
|
LABEL_TWO_FACTOR_CODE = "Verifikationskod"
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
[POPUPS_TWO_FACTOR_CFG]
|
[PLUGIN_2FA]
|
||||||
LEGEND_TWO_FACTOR_AUTH = "两步验证 (TOTP)"
|
LEGEND_TWO_FACTOR_AUTH = "两步验证 (TOTP)"
|
||||||
LABEL_ENABLE_TWO_FACTOR = "启用两步验证"
|
LABEL_ENABLE_TWO_FACTOR = "启用两步验证"
|
||||||
LABEL_TWO_FACTOR_USER = "用户"
|
LABEL_TWO_FACTOR_USER = "用户"
|
||||||
|
|
@ -15,8 +15,6 @@ TWO_FACTOR_SECRET_NOT_CONFIGURED_DESC = "未设置"
|
||||||
TWO_FACTOR_SECRET_DESC = "将下面的信息导入 Google Authenticator (或其他 TOTP 客户端)。 扫描下面的二维码或手动输入密钥。\n"
|
TWO_FACTOR_SECRET_DESC = "将下面的信息导入 Google Authenticator (或其他 TOTP 客户端)。 扫描下面的二维码或手动输入密钥。\n"
|
||||||
TWO_FACTOR_BACKUP_CODES_DESC = "如果你无法从验证器获取验证码,你可以使用备用代码登录。 当你使用过某一个备用代码后,它将会失效。\n"
|
TWO_FACTOR_BACKUP_CODES_DESC = "如果你无法从验证器获取验证码,你可以使用备用代码登录。 当你使用过某一个备用代码后,它将会失效。\n"
|
||||||
TWO_FACTOR_SECRET_TEST_BEFORE_DESC = "完成测试前你无法更改此设置。"
|
TWO_FACTOR_SECRET_TEST_BEFORE_DESC = "完成测试前你无法更改此设置。"
|
||||||
[POPUPS_TWO_FACTOR_TEST]
|
|
||||||
TITLE_TEST_CODE = "两步验证测试"
|
TITLE_TEST_CODE = "两步验证测试"
|
||||||
LABEL_CODE = "代码"
|
LABEL_CODE = "代码"
|
||||||
[LOGIN]
|
|
||||||
LABEL_TWO_FACTOR_CODE = "验证码"
|
LABEL_TWO_FACTOR_CODE = "验证码"
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,10 @@
|
||||||
<header>
|
<header>
|
||||||
<a class="close" href="#" data-bind="click: close">×</a>
|
<a class="close" href="#" data-bind="click: close">×</a>
|
||||||
<h3 data-i18n="POPUPS_TWO_FACTOR_TEST/TITLE_TEST_CODE"></h3>
|
<h3 data-i18n="PLUGIN_2FA/TITLE_TEST_CODE"></h3>
|
||||||
</header>
|
</header>
|
||||||
<div class="modal-body form-horizontal">
|
<div class="modal-body form-horizontal">
|
||||||
<div class="control-group">
|
<div class="control-group">
|
||||||
<label data-i18n="POPUPS_TWO_FACTOR_TEST/LABEL_CODE"></label>
|
<label data-i18n="PLUGIN_2FA/LABEL_CODE"></label>
|
||||||
<input type="text" class="uiInput inputName"
|
<input type="text" class="uiInput inputName"
|
||||||
autofocus="" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
|
autofocus="" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
|
||||||
data-bind="textInput: code, onEnter: testCodeCommand" />
|
data-bind="textInput: code, onEnter: testCodeCommand" />
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<div class="b-settings-two-factor form-horizontal">
|
<div class="b-settings-two-factor form-horizontal">
|
||||||
<div class="legend" data-i18n="POPUPS_TWO_FACTOR_CFG/LEGEND_TWO_FACTOR_AUTH"></div>
|
<div class="legend" data-i18n="PLUGIN_2FA/LEGEND_TWO_FACTOR_AUTH"></div>
|
||||||
<div class="form-horizontal">
|
<div class="form-horizontal">
|
||||||
<div class="control-group" data-bind="visible: twoFactorStatus">
|
<div class="control-group" data-bind="visible: twoFactorStatus">
|
||||||
<div class="controls">
|
<div class="controls">
|
||||||
|
|
@ -7,7 +7,7 @@
|
||||||
<div data-bind="component: {
|
<div data-bind="component: {
|
||||||
name: 'Checkbox',
|
name: 'Checkbox',
|
||||||
params: {
|
params: {
|
||||||
label: 'POPUPS_TWO_FACTOR_CFG/LABEL_ENABLE_TWO_FACTOR',
|
label: 'PLUGIN_2FA/LABEL_ENABLE_TWO_FACTOR',
|
||||||
enable: twoFactorAllowedEnable,
|
enable: twoFactorAllowedEnable,
|
||||||
value: viewEnable,
|
value: viewEnable,
|
||||||
inline: true
|
inline: true
|
||||||
|
|
@ -16,12 +16,12 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<span class="g-ui-link" data-bind="click: testTwoFactor, visible: twoFactorStatus"
|
<span class="g-ui-link" data-bind="click: testTwoFactor, visible: twoFactorStatus"
|
||||||
data-i18n="POPUPS_TWO_FACTOR_CFG/LINK_TEST"></span>
|
data-i18n="PLUGIN_2FA/LINK_TEST"></span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="control-group">
|
<div class="control-group">
|
||||||
<label class="control-label">
|
<label class="control-label">
|
||||||
<span data-i18n="POPUPS_TWO_FACTOR_CFG/LABEL_TWO_FACTOR_USER"></span>
|
<span data-i18n="PLUGIN_2FA/LABEL_TWO_FACTOR_USER"></span>
|
||||||
</label>
|
</label>
|
||||||
<div class="controls" style="padding-top: 5px;">
|
<div class="controls" style="padding-top: 5px;">
|
||||||
<strong data-bind="text: viewUser"></strong>
|
<strong data-bind="text: viewUser"></strong>
|
||||||
|
|
@ -31,34 +31,34 @@
|
||||||
<div class="controls" style="padding-top: 5px;">
|
<div class="controls" style="padding-top: 5px;">
|
||||||
<strong data-bind="visible: secreting">...</strong>
|
<strong data-bind="visible: secreting">...</strong>
|
||||||
<span class="g-ui-link" data-bind="click: showSecret, visible: !secreting()"
|
<span class="g-ui-link" data-bind="click: showSecret, visible: !secreting()"
|
||||||
data-i18n="POPUPS_TWO_FACTOR_CFG/BUTTON_SHOW_SECRET"></span>
|
data-i18n="PLUGIN_2FA/BUTTON_SHOW_SECRET"></span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="control-group" data-bind="visible: '' !== viewSecret()">
|
<div class="control-group" data-bind="visible: '' !== viewSecret()">
|
||||||
<label class="control-label">
|
<label class="control-label">
|
||||||
<span data-i18n="POPUPS_TWO_FACTOR_CFG/LABEL_TWO_FACTOR_SECRET"></span>
|
<span data-i18n="PLUGIN_2FA/LABEL_TWO_FACTOR_SECRET"></span>
|
||||||
</label>
|
</label>
|
||||||
<div class="controls" style="padding-top: 5px;">
|
<div class="controls" style="padding-top: 5px;">
|
||||||
<strong data-bind="text: viewSecret" style="user-select:text"></strong>
|
<strong data-bind="text: viewSecret" style="user-select:text"></strong>
|
||||||
|
|
||||||
<span class="g-ui-link" data-bind="click: hideSecret" data-i18n="POPUPS_TWO_FACTOR_CFG/BUTTON_HIDE_SECRET"></span>
|
<span class="g-ui-link" data-bind="click: hideSecret" data-i18n="PLUGIN_2FA/BUTTON_HIDE_SECRET"></span>
|
||||||
<br />
|
<br />
|
||||||
<br />
|
<br />
|
||||||
<blockquote>
|
<blockquote>
|
||||||
<p class="muted width100-on-mobile" style="width: 550px" data-i18n="POPUPS_TWO_FACTOR_CFG/TWO_FACTOR_SECRET_DESC"></p>
|
<p class="muted width100-on-mobile" style="width: 550px" data-i18n="PLUGIN_2FA/TWO_FACTOR_SECRET_DESC"></p>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
<pre data-bind="text: viewQRCode" style="line-height:1;letter-spacing:-1px"></pre>
|
<pre data-bind="text: viewQRCode" style="line-height:1;letter-spacing:-1px"></pre>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="control-group" data-bind="visible: '' !== viewBackupCodes()">
|
<div class="control-group" data-bind="visible: '' !== viewBackupCodes()">
|
||||||
<label class="control-label">
|
<label class="control-label">
|
||||||
<span data-i18n="POPUPS_TWO_FACTOR_CFG/LABEL_TWO_FACTOR_BACKUP_CODES"></span>
|
<span data-i18n="PLUGIN_2FA/LABEL_TWO_FACTOR_BACKUP_CODES"></span>
|
||||||
</label>
|
</label>
|
||||||
<div class="controls" style="padding-top: 5px;">
|
<div class="controls" style="padding-top: 5px;">
|
||||||
<pre data-bind="text: viewBackupCodes" style="user-select: text; width: 230px; word-break: break-word;"></pre>
|
<pre data-bind="text: viewBackupCodes" style="user-select: text; width: 230px; word-break: break-word;"></pre>
|
||||||
<br />
|
<br />
|
||||||
<blockquote>
|
<blockquote>
|
||||||
<p class="muted width100-on-mobile" style="width: 550px" data-i18n="POPUPS_TWO_FACTOR_CFG/TWO_FACTOR_BACKUP_CODES_DESC"></p>
|
<p class="muted width100-on-mobile" style="width: 550px" data-i18n="PLUGIN_2FA/TWO_FACTOR_BACKUP_CODES_DESC"></p>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -70,7 +70,7 @@
|
||||||
</a>
|
</a>
|
||||||
<a class="btn" data-bind="click: createTwoFactor, visible: !twoFactorStatus()">
|
<a class="btn" data-bind="click: createTwoFactor, visible: !twoFactorStatus()">
|
||||||
<i class="fontastic" data-bind="css: {'icon-spinner': processing()}">▶</i>
|
<i class="fontastic" data-bind="css: {'icon-spinner': processing()}">▶</i>
|
||||||
<span data-i18n="POPUPS_TWO_FACTOR_CFG/BUTTON_ACTIVATE"></span>
|
<span data-i18n="PLUGIN_2FA/BUTTON_ACTIVATE"></span>
|
||||||
</a>
|
</a>
|
||||||
<!--
|
<!--
|
||||||
<a class="btn" data-bind="click: close, visible: viewEnable()">
|
<a class="btn" data-bind="click: close, visible: viewEnable()">
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue