Merge branch 'fix-totp-options-2541' into v2.0
This commit is contained in:
commit
316c734bbc
|
@ -574,7 +574,6 @@ tokenUseGlobalStorage Enable global token stor
|
|||
totp2fActivation TOTP activation ✔
|
||||
totp2fAuthnLevel Authentication level for users authentified by password+TOTP ✔
|
||||
totp2fDigits Number of digits for TOTP code ✔
|
||||
totp2fDisplayExistingSecret Display existing TOTP secret in registration form ✔
|
||||
totp2fInterval TOTP interval ✔
|
||||
totp2fIssuer TOTP Issuer ✔
|
||||
totp2fLabel Portal label for TOTP 2F ✔
|
||||
|
@ -582,7 +581,6 @@ totp2fLogo Custom logo for TOTP 2F
|
|||
totp2fRange TOTP range (number of interval to test) ✔
|
||||
totp2fSelfRegistration TOTP self registration activation ✔
|
||||
totp2fTTL TOTP device time to live ✔
|
||||
totp2fUserCanChangeKey Authorize users to change existing TOTP secret ✔
|
||||
totp2fUserCanRemoveKey Authorize users to remove existing TOTP secret ✔
|
||||
trustedDomains Trusted domains ✔
|
||||
twitterAppName ✔
|
||||
|
|
|
@ -52,10 +52,6 @@ In the manager (advanced parameters), you just have to enable it:
|
|||
- **Interval**: interval for TOTP algorithm (default: 30)
|
||||
- **Range**: number of additional intervals to test (default: 1)
|
||||
- **Digits**: number of digit by codes (default: 6)
|
||||
- **Display existing secret**: display an already registered secret
|
||||
(default: disabled)
|
||||
- **Change existing secret**: authorize a user to change its previoulsy
|
||||
registered TOTP secret
|
||||
- **Allow users to remove TOTP**: If enabled, users can unregister
|
||||
TOTP.
|
||||
- **Lifetime**: Unlimited by default. Set a Time To Live in seconds.
|
||||
|
|
|
@ -69,6 +69,27 @@ OpenID Connect check session iframe
|
|||
|
||||
The OIDC check session iframe is not working, it has been removed from OIDC configuration metadata. It should not impact any installation as this feature was already broken.
|
||||
|
||||
Simplification of TOTP options
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
The following options have been removed from TOTP configuration:
|
||||
|
||||
* Display existing secret (``totp2fDisplayExistingSecret``)
|
||||
* Change existing secret (``totp2fUserCanChangeKey``)
|
||||
|
||||
As a consequence, users who are *not* using the default `bootstrap` skin may need to ajust their ``totp2fregister.tpl`` template:
|
||||
|
||||
* Move ``#divToHide`` from the ``.col-md-6`` div to the ``.card`` div
|
||||
* Change::
|
||||
|
||||
<pre id="serialized"></pre>
|
||||
|
||||
* to::
|
||||
|
||||
<br/><tt id="secret"></tt>
|
||||
|
||||
* Remove the ``#changekey`` button
|
||||
|
||||
2.0.11
|
||||
------
|
||||
|
||||
|
|
|
@ -31,7 +31,7 @@ use constant DEFAULTCONFBACKENDOPTIONS => (
|
|||
);
|
||||
our $hashParameters = qr/^(?:(?:l(?:o(?:ca(?:lSessionStorageOption|tionRule)|goutService)|dapExportedVar|wp(?:Ssl)?Opt)|(?:(?:d(?:emo|bi)|webID)ExportedVa|exported(?:Heade|Va)|issuerDBGetParamete)r|f(?:indUser(?:Exclud|Search)ingAttribute|acebookExportedVar)|re(?:moteGlobalStorageOption|st2f(?:Verify|Init)Arg|loadUrl)|g(?:r(?:antSessionRule|oup)|lobalStorageOption)|n(?:otificationStorageOption|ginxCustomHandler)|macro)s|o(?:idc(?:S(?:ervice(?:DynamicRegistrationEx(?:portedVar|traClaim)s|MetaDataAuthnContext)|torageOptions)|RPMetaData(?:(?:Option(?:sExtraClaim)?|ExportedVar|ScopeRule|Macro)s|Node)|OPMetaData(?:(?:ExportedVar|Option)s|J(?:SON|WKS)|Node))|penIdExportedVars)|c(?:as(?:A(?:ppMetaData(?:(?:ExportedVar|Option|Macro)s|Node)|ttributes)|S(?:rvMetaData(?:(?:ExportedVar|Option)s|Node)|torageOptions))|(?:ustom(?:Plugins|Add)Param|heckUserHiddenHeader|ombModule)s)|s(?:aml(?:S(?:PMetaData(?:(?:ExportedAttribute|Option|Macro)s|Node|XML)|torageOptions)|IDPMetaData(?:(?:ExportedAttribute|Option)s|Node|XML))|essionDataToRemember|laveExportedVars|fExtra)|a(?:(?:daptativeAuthenticationLevelR|ut(?:hChoiceMod|oSigninR))ules|pplicationList)|p(?:ersistentStorageOptions|o(?:rtalSkinRules|st))|v(?:hostOptions|irtualHost)|S(?:MTPTLSOpts|SLVarIf))$/;
|
||||
our $arrayParameters = qr/^mySessionAuthorizedRWKeys$/;
|
||||
our $boolKeys = qr/^(?:s(?:aml(?:IDP(?:MetaDataOptions(?:(?:Check(?:S[LS]OMessageSignatur|Audienc|Tim)|IsPassiv)e|A(?:llow(?:LoginFromIDP|ProxiedAuthn)|daptSessionUtime)|Force(?:Authn|UTF8)|StoreSAMLToken|RelayStateURL)|SSODescriptorWantAuthnRequestsSigned)|S(?:P(?:MetaDataOptions(?:(?:CheckS[LS]OMessageSignatur|OneTimeUs)e|EnableIDPInitiatedURL|ForceUTF8)|SSODescriptor(?:WantAssertion|AuthnRequest)sSigned)|erviceUseCertificateInResponse)|DiscoveryProtocol(?:Activation|IsPassive)|CommonDomainCookieActivation|UseQueryStringSpecific|MetadataForceUTF8)|f(?:RemovedUseNotif|OnlyUpgrade)|kip(?:Upgrade|Renew)Confirmation|oap(?:Session|Config)Server|t(?:ayConnecte|orePasswor)d|laveDisplayLogo|howLanguages|slByAjax)|o(?:idc(?:RPMetaDataOptions(?:A(?:llow(?:(?:ClientCredentials|Password)Grant|Offline)|ccessToken(?:Claims|JWT))|Re(?:freshToken|quirePKCE)|LogoutSessionRequired|IDTokenForceClaims|BypassConsent|Public)|ServiceAllow(?:(?:AuthorizationCode|Implicit|Hybrid)Flow|DynamicRegistration|OnlyDeclaredScopes)|OPMetaDataOptions(?:(?:CheckJWTSignatur|UseNonc)e|StoreIDToken))|ldNotifFormat)|c(?:a(?:sS(?:rvMetaDataOptions(?:Gateway|Renew)|trictMatching)|ptcha_(?:register|login|mail)_enabled)|o(?:ntextSwitching(?:Allowed2fModifications|StopWithLogout)|mpactConf|rsEnabled)|heck(?:DevOps(?:Download)?|State|User|XSS)|rowdsec|da)|p(?:ortal(?:Display(?:Re(?:freshMyRights|setPassword|gister)|CertificateResetByMail|GeneratePassword|PasswordPolicy)|ErrorOn(?:ExpiredSession|MailNotFound)|(?:CheckLogin|Statu)s|OpenLinkInNewWindow|ForceAuthn|AntiFrame)|roxyUseSoap)|l(?:dap(?:(?:G(?:roup(?:DecodeSearchedValu|Recursiv)|etUserBeforePasswordChang)|UsePasswordResetAttribut)e|(?:AllowResetExpired|Set)Password|ChangePasswordAsUser|PpolicyControl|ITDS)|oginHistoryEnabled)|no(?:tif(?:ication(?:Server(?:(?:POS|GE)T|DELETE)?|sExplorer)?|y(?:Deleted|Other))|AjaxHook)|i(?:ssuerDB(?:OpenID(?:Connect)?|SAML|CAS|Get)Activation|mpersonationSkipEmptyValues)|to(?:tp2f(?:UserCan(?:Chang|Remov)eKey|DisplayExistingSecret)|kenUseGlobalStorage)|u(?:se(?:RedirectOn(?:Forbidden|Error)|SafeJail)|2fUserCanRemoveKey|pgradeSession)|re(?:st(?:(?:Password|Session|Config|Auth)Server|ExportSecretKeys)|freshSessions)|br(?:uteForceProtection(?:IncrementalTempo)?|owsersDontStorePassword)|d(?:is(?:ablePersistentStorage|playSessionId)|biDynamicHashEnabled)|(?:mai(?:lOnPasswordChang|ntenanc)|vhostMaintenanc)e|g(?:roupsBeforeMacros|lobalLogoutTimer)|a(?:voidAssignment|ctiveTimer)|h(?:ideOldPassword|ttpOnly)|yubikey2fUserCanRemoveKey|krb(?:RemoveDomain|ByJs)|(?:wsdlServ|findUs)er)$/;
|
||||
our $boolKeys = qr/^(?:s(?:aml(?:IDP(?:MetaDataOptions(?:(?:Check(?:S[LS]OMessageSignatur|Audienc|Tim)|IsPassiv)e|A(?:llow(?:LoginFromIDP|ProxiedAuthn)|daptSessionUtime)|Force(?:Authn|UTF8)|StoreSAMLToken|RelayStateURL)|SSODescriptorWantAuthnRequestsSigned)|S(?:P(?:MetaDataOptions(?:(?:CheckS[LS]OMessageSignatur|OneTimeUs)e|EnableIDPInitiatedURL|ForceUTF8)|SSODescriptor(?:WantAssertion|AuthnRequest)sSigned)|erviceUseCertificateInResponse)|DiscoveryProtocol(?:Activation|IsPassive)|CommonDomainCookieActivation|UseQueryStringSpecific|MetadataForceUTF8)|f(?:RemovedUseNotif|OnlyUpgrade)|kip(?:Upgrade|Renew)Confirmation|oap(?:Session|Config)Server|t(?:ayConnecte|orePasswor)d|laveDisplayLogo|howLanguages|slByAjax)|o(?:idc(?:RPMetaDataOptions(?:A(?:llow(?:(?:ClientCredentials|Password)Grant|Offline)|ccessToken(?:Claims|JWT))|Re(?:freshToken|quirePKCE)|LogoutSessionRequired|IDTokenForceClaims|BypassConsent|Public)|ServiceAllow(?:(?:AuthorizationCode|Implicit|Hybrid)Flow|DynamicRegistration|OnlyDeclaredScopes)|OPMetaDataOptions(?:(?:CheckJWTSignatur|UseNonc)e|StoreIDToken))|ldNotifFormat)|c(?:a(?:sS(?:rvMetaDataOptions(?:Gateway|Renew)|trictMatching)|ptcha_(?:register|login|mail)_enabled)|o(?:ntextSwitching(?:Allowed2fModifications|StopWithLogout)|mpactConf|rsEnabled)|heck(?:DevOps(?:Download)?|State|User|XSS)|rowdsec|da)|p(?:ortal(?:Display(?:Re(?:freshMyRights|setPassword|gister)|CertificateResetByMail|GeneratePassword|PasswordPolicy)|ErrorOn(?:ExpiredSession|MailNotFound)|(?:CheckLogin|Statu)s|OpenLinkInNewWindow|ForceAuthn|AntiFrame)|roxyUseSoap)|l(?:dap(?:(?:G(?:roup(?:DecodeSearchedValu|Recursiv)|etUserBeforePasswordChang)|UsePasswordResetAttribut)e|(?:AllowResetExpired|Set)Password|ChangePasswordAsUser|PpolicyControl|ITDS)|oginHistoryEnabled)|no(?:tif(?:ication(?:Server(?:(?:POS|GE)T|DELETE)?|sExplorer)?|y(?:Deleted|Other))|AjaxHook)|i(?:ssuerDB(?:OpenID(?:Connect)?|SAML|CAS|Get)Activation|mpersonationSkipEmptyValues)|u(?:se(?:RedirectOn(?:Forbidden|Error)|SafeJail)|2fUserCanRemoveKey|pgradeSession)|re(?:st(?:(?:Password|Session|Config|Auth)Server|ExportSecretKeys)|freshSessions)|br(?:uteForceProtection(?:IncrementalTempo)?|owsersDontStorePassword)|d(?:is(?:ablePersistentStorage|playSessionId)|biDynamicHashEnabled)|(?:mai(?:lOnPasswordChang|ntenanc)|vhostMaintenanc)e|to(?:tp2fUserCanRemoveKey|kenUseGlobalStorage)|g(?:roupsBeforeMacros|lobalLogoutTimer)|a(?:voidAssignment|ctiveTimer)|h(?:ideOldPassword|ttpOnly)|yubikey2fUserCanRemoveKey|krb(?:RemoveDomain|ByJs)|(?:wsdlServ|findUs)er)$/;
|
||||
|
||||
our @sessionTypes = ( 'remoteGlobal', 'global', 'localSession', 'persistent', 'saml', 'oidc', 'cas' );
|
||||
|
||||
|
|
|
@ -4158,10 +4158,6 @@ qr/^(?:(?:(?:(?:(?:(?:[a-zA-Z0-9][-a-zA-Z0-9]*)?[a-zA-Z0-9])[.])*(?:[a-zA-Z][-a-
|
|||
'default' => 6,
|
||||
'type' => 'int'
|
||||
},
|
||||
'totp2fDisplayExistingSecret' => {
|
||||
'default' => 0,
|
||||
'type' => 'bool'
|
||||
},
|
||||
'totp2fInterval' => {
|
||||
'default' => 30,
|
||||
'type' => 'int'
|
||||
|
@ -4186,10 +4182,6 @@ qr/^(?:(?:(?:(?:(?:(?:[a-zA-Z0-9][-a-zA-Z0-9]*)?[a-zA-Z0-9])[.])*(?:[a-zA-Z][-a-
|
|||
'totp2fTTL' => {
|
||||
'type' => 'int'
|
||||
},
|
||||
'totp2fUserCanChangeKey' => {
|
||||
'default' => 0,
|
||||
'type' => 'bool'
|
||||
},
|
||||
'totp2fUserCanRemoveKey' => {
|
||||
'default' => 1,
|
||||
'type' => 'bool'
|
||||
|
|
|
@ -1873,17 +1873,6 @@ sub attributes {
|
|||
default => 6,
|
||||
documentation => 'Number of digits for TOTP code',
|
||||
},
|
||||
totp2fDisplayExistingSecret => {
|
||||
type => 'bool',
|
||||
default => 0,
|
||||
documentation =>
|
||||
'Display existing TOTP secret in registration form',
|
||||
},
|
||||
totp2fUserCanChangeKey => {
|
||||
type => 'bool',
|
||||
default => 0,
|
||||
documentation => 'Authorize users to change existing TOTP secret',
|
||||
},
|
||||
totp2fUserCanRemoveKey => {
|
||||
type => 'bool',
|
||||
default => 1,
|
||||
|
|
|
@ -880,12 +880,10 @@ sub tree {
|
|||
'totp2fActivation',
|
||||
'totp2fSelfRegistration',
|
||||
'totp2fUserCanRemoveKey',
|
||||
'totp2fUserCanChangeKey',
|
||||
'totp2fIssuer',
|
||||
'totp2fInterval',
|
||||
'totp2fRange',
|
||||
'totp2fDigits',
|
||||
'totp2fDisplayExistingSecret',
|
||||
'totp2fTTL',
|
||||
'totp2fAuthnLevel',
|
||||
'totp2fLabel',
|
||||
|
|
|
@ -1108,7 +1108,6 @@
|
|||
"totp2fActivation":"تفعيل",
|
||||
"totp2fAuthnLevel":"TOTP authentication level",
|
||||
"totp2fDigits":"Number of digits",
|
||||
"totp2fDisplayExistingSecret":"Display existing secret",
|
||||
"totp2fInterval":"Interval",
|
||||
"totp2fIssuer":"TOTP Issuer name",
|
||||
"totp2fLabel":"Label",
|
||||
|
@ -1116,7 +1115,6 @@
|
|||
"totp2fRange":"Range of attempts",
|
||||
"totp2fSelfRegistration":"التسجيل الذاتي",
|
||||
"totp2fTTL":"Lifetime",
|
||||
"totp2fUserCanChangeKey":"Change existing secret",
|
||||
"totp2fUserCanRemoveKey":"Allow user to remove TOTP",
|
||||
"trustedDomains":"النطاقات الموثوق بها",
|
||||
"trustedProxies":"عناوين الآي بي البروكسي الموثوق بها",
|
||||
|
|
|
@ -1108,7 +1108,6 @@
|
|||
"totp2fActivation":"Activation",
|
||||
"totp2fAuthnLevel":"TOTP authentication level",
|
||||
"totp2fDigits":"Number of digits",
|
||||
"totp2fDisplayExistingSecret":"Display existing secret",
|
||||
"totp2fInterval":"Interval",
|
||||
"totp2fIssuer":"TOTP Issuer name",
|
||||
"totp2fLabel":"Label",
|
||||
|
@ -1116,7 +1115,6 @@
|
|||
"totp2fRange":"Range of attempts",
|
||||
"totp2fSelfRegistration":"Self registration",
|
||||
"totp2fTTL":"Lifetime",
|
||||
"totp2fUserCanChangeKey":"Change existing secret",
|
||||
"totp2fUserCanRemoveKey":"Allow user to remove TOTP",
|
||||
"trustedDomains":"Trusted domains",
|
||||
"trustedProxies":"Trusted proxies IP",
|
||||
|
|
|
@ -1108,7 +1108,6 @@
|
|||
"totp2fActivation":"Activation",
|
||||
"totp2fAuthnLevel":"TOTP authentication level",
|
||||
"totp2fDigits":"Number of digits",
|
||||
"totp2fDisplayExistingSecret":"Display existing secret",
|
||||
"totp2fInterval":"Interval",
|
||||
"totp2fIssuer":"TOTP Issuer name",
|
||||
"totp2fLabel":"Label",
|
||||
|
@ -1116,7 +1115,6 @@
|
|||
"totp2fRange":"Range of attempts",
|
||||
"totp2fSelfRegistration":"Self registration",
|
||||
"totp2fTTL":"Lifetime",
|
||||
"totp2fUserCanChangeKey":"Change existing secret",
|
||||
"totp2fUserCanRemoveKey":"Allow user to remove TOTP",
|
||||
"trustedDomains":"Trusted domains",
|
||||
"trustedProxies":"Trusted proxies IP",
|
||||
|
|
|
@ -1108,7 +1108,6 @@
|
|||
"totp2fActivation":"Activación",
|
||||
"totp2fAuthnLevel":"Nivel de autentificación TOTP",
|
||||
"totp2fDigits":"Cantidad de dígitos",
|
||||
"totp2fDisplayExistingSecret":"Mostrar secreto existente",
|
||||
"totp2fInterval":"Intervalo",
|
||||
"totp2fIssuer":"Nombre de emisor TOTP",
|
||||
"totp2fLabel":"Etiqueta",
|
||||
|
@ -1116,7 +1115,6 @@
|
|||
"totp2fRange":"Rango de intentos",
|
||||
"totp2fSelfRegistration":"Autoregistro",
|
||||
"totp2fTTL":"Tiempo de vida",
|
||||
"totp2fUserCanChangeKey":"Cambiar secreto existente",
|
||||
"totp2fUserCanRemoveKey":"Permitir al usuario eliminación de TOTP",
|
||||
"trustedDomains":"Dominios de confianza",
|
||||
"trustedProxies":"IP de proxies de confianza",
|
||||
|
|
|
@ -1108,7 +1108,6 @@
|
|||
"totp2fActivation":"Activation",
|
||||
"totp2fAuthnLevel":"Niveau d'authentification TOTP",
|
||||
"totp2fDigits":"Nombre de chiffres",
|
||||
"totp2fDisplayExistingSecret":"Afficher la clef existante",
|
||||
"totp2fInterval":"Intervalle",
|
||||
"totp2fIssuer":"Nom du fournisseur TOTP",
|
||||
"totp2fLabel":"Label",
|
||||
|
@ -1116,7 +1115,6 @@
|
|||
"totp2fRange":"Nombre d'intervalles à tester",
|
||||
"totp2fSelfRegistration":"Auto-enregistrement",
|
||||
"totp2fTTL":"Durée de vie",
|
||||
"totp2fUserCanChangeKey":"Changer une clef existante",
|
||||
"totp2fUserCanRemoveKey":"Autoriser les utilisateurs à effacer leur TOTP",
|
||||
"trustedDomains":"Domaines approuvés",
|
||||
"trustedProxies":"IP des proxys de confiance",
|
||||
|
|
|
@ -1108,7 +1108,6 @@
|
|||
"totp2fActivation":"Attivazione",
|
||||
"totp2fAuthnLevel":"Livello di autenticazione TOTP",
|
||||
"totp2fDigits":"Numero di cifre",
|
||||
"totp2fDisplayExistingSecret":"Mostra segreto esistente",
|
||||
"totp2fInterval":"Intervallo",
|
||||
"totp2fIssuer":"Nome dell'emittente TOTP",
|
||||
"totp2fLabel":"Label",
|
||||
|
@ -1116,7 +1115,6 @@
|
|||
"totp2fRange":"Gamma di tentativi",
|
||||
"totp2fSelfRegistration":"Auto-registrazione",
|
||||
"totp2fTTL":"Lifetime",
|
||||
"totp2fUserCanChangeKey":"Cambia segreto esistente",
|
||||
"totp2fUserCanRemoveKey":"Autorizza l'utente a rimuovere TOTP",
|
||||
"trustedDomains":"Domini attendibili",
|
||||
"trustedProxies":"IP proxy attendibili",
|
||||
|
|
|
@ -1108,7 +1108,6 @@
|
|||
"totp2fActivation":"Aktywacja",
|
||||
"totp2fAuthnLevel":"Poziom uwierzytelnienia TOTP",
|
||||
"totp2fDigits":"Ilość cyfr",
|
||||
"totp2fDisplayExistingSecret":"Pokaż istniejący sekret",
|
||||
"totp2fInterval":"Interwał",
|
||||
"totp2fIssuer":"TOTP Nazwa wystawcy",
|
||||
"totp2fLabel":"Etykieta",
|
||||
|
@ -1116,7 +1115,6 @@
|
|||
"totp2fRange":"Zakres prób",
|
||||
"totp2fSelfRegistration":"Samodzielna rejestracja",
|
||||
"totp2fTTL":"Dożywotni",
|
||||
"totp2fUserCanChangeKey":"Zmień istniejący sekret",
|
||||
"totp2fUserCanRemoveKey":"Pozwól użytkownikowi usunąć TOTP",
|
||||
"trustedDomains":"Zaufane domeny",
|
||||
"trustedProxies":"Zaufane proxy IP",
|
||||
|
|
|
@ -1108,7 +1108,6 @@
|
|||
"totp2fActivation":"Aktivasyon",
|
||||
"totp2fAuthnLevel":"TOTP doğrulama seviyesi",
|
||||
"totp2fDigits":"Rakam sayısı",
|
||||
"totp2fDisplayExistingSecret":"Mevcut sırı görüntüle",
|
||||
"totp2fInterval":"Süre aralığı",
|
||||
"totp2fIssuer":"TOTP Düzenleyici adı",
|
||||
"totp2fLabel":"Etiket",
|
||||
|
@ -1116,7 +1115,6 @@
|
|||
"totp2fRange":"Deneme sayısı",
|
||||
"totp2fSelfRegistration":"Kendi kendine kayıt",
|
||||
"totp2fTTL":"Ömür boyu",
|
||||
"totp2fUserCanChangeKey":"Mevcut sırı değiştir",
|
||||
"totp2fUserCanRemoveKey":"Kullanıcının TOTP'yi kaldırmasına izin ver",
|
||||
"trustedDomains":"Güvenilir etki alanları",
|
||||
"trustedProxies":"Güvenilir tünel IP'si",
|
||||
|
|
|
@ -1108,7 +1108,6 @@
|
|||
"totp2fActivation":"Kích hoạt",
|
||||
"totp2fAuthnLevel":"TOTP authentication level",
|
||||
"totp2fDigits":"Number of digits",
|
||||
"totp2fDisplayExistingSecret":"Display existing secret",
|
||||
"totp2fInterval":"Interval",
|
||||
"totp2fIssuer":"TOTP Issuer name",
|
||||
"totp2fLabel":"Label",
|
||||
|
@ -1116,7 +1115,6 @@
|
|||
"totp2fRange":"Range of attempts",
|
||||
"totp2fSelfRegistration":"Tự đăng ký",
|
||||
"totp2fTTL":"Lifetime",
|
||||
"totp2fUserCanChangeKey":"Change existing secret",
|
||||
"totp2fUserCanRemoveKey":"Allow user to remove TOTP",
|
||||
"trustedDomains":"Miền tin cậy",
|
||||
"trustedProxies":"proxies IP tin cậy",
|
||||
|
|
|
@ -1108,7 +1108,6 @@
|
|||
"totp2fActivation":"激活",
|
||||
"totp2fAuthnLevel":"TOTP authentication level",
|
||||
"totp2fDigits":"Number of digits",
|
||||
"totp2fDisplayExistingSecret":"Display existing secret",
|
||||
"totp2fInterval":"Interval",
|
||||
"totp2fIssuer":"TOTP Issuer name",
|
||||
"totp2fLabel":"Label",
|
||||
|
@ -1116,7 +1115,6 @@
|
|||
"totp2fRange":"Range of attempts",
|
||||
"totp2fSelfRegistration":"Self registration",
|
||||
"totp2fTTL":"Lifetime",
|
||||
"totp2fUserCanChangeKey":"Change existing secret",
|
||||
"totp2fUserCanRemoveKey":"Allow user to remove TOTP",
|
||||
"trustedDomains":"Trusted domains",
|
||||
"trustedProxies":"Trusted proxies IP",
|
||||
|
|
|
@ -1108,7 +1108,6 @@
|
|||
"totp2fActivation":"啟用",
|
||||
"totp2fAuthnLevel":"TOTP 驗證等級",
|
||||
"totp2fDigits":"位數",
|
||||
"totp2fDisplayExistingSecret":"顯示既有的祕密",
|
||||
"totp2fInterval":"間隔",
|
||||
"totp2fIssuer":"TOTP 發行者名稱",
|
||||
"totp2fLabel":"標籤",
|
||||
|
@ -1116,7 +1115,6 @@
|
|||
"totp2fRange":"嘗試範圍",
|
||||
"totp2fSelfRegistration":"自行註冊",
|
||||
"totp2fTTL":"終生",
|
||||
"totp2fUserCanChangeKey":"變更既有的祕密",
|
||||
"totp2fUserCanRemoveKey":"允許使用者移除 TOTP",
|
||||
"trustedDomains":"受信任的網域",
|
||||
"trustedProxies":"受信任的代理伺服器 IP",
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -2724,18 +2724,6 @@
|
|||
"title" : "totp2fDigits",
|
||||
"type" : "int"
|
||||
},
|
||||
{
|
||||
"default" : 0,
|
||||
"id" : "totp2fDisplayExistingSecret",
|
||||
"title" : "totp2fDisplayExistingSecret",
|
||||
"type" : "bool"
|
||||
},
|
||||
{
|
||||
"default" : 0,
|
||||
"id" : "totp2fUserCanChangeKey",
|
||||
"title" : "totp2fUserCanChangeKey",
|
||||
"type" : "bool"
|
||||
},
|
||||
{
|
||||
"default" : 1,
|
||||
"id" : "totp2fUserCanRemoveKey",
|
||||
|
|
|
@ -36,8 +36,7 @@ sub init {
|
|||
sub run {
|
||||
my ( $self, $req, $action ) = @_;
|
||||
my $user = $req->userData->{ $self->conf->{whatToTrace} };
|
||||
return $self->p->sendError( $req,
|
||||
'No ' . $self->conf->{whatToTrace} . ' found in user data', 500 )
|
||||
return $self->p->sendError( $req, 'PE82', 400 )
|
||||
unless $user;
|
||||
|
||||
# Check if TOTP can be updated
|
||||
|
@ -118,7 +117,7 @@ sub run {
|
|||
};
|
||||
if ($@) {
|
||||
$self->logger->error("Corrupted session (_2fDevices): $@");
|
||||
return $self->p->sendError( $req, "Corrupted session", 500 );
|
||||
return $self->p->sendError( $req, "serverError", 500 );
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
@ -139,7 +138,7 @@ sub run {
|
|||
$self->logger->debug("Reading TOTP secret if exists...");
|
||||
$secret = $_->{_secret} foreach (@totp2f);
|
||||
return $self->p->sendError( $req, 'totpExistingKey', 200 )
|
||||
if ( $token->{_totp2fSecret} eq $secret );
|
||||
if $secret;
|
||||
|
||||
### USER CAN ONLY REGISTER ONE TOTP ###
|
||||
# Delete TOTP previously registered
|
||||
|
@ -192,7 +191,7 @@ sub run {
|
|||
};
|
||||
if ($@) {
|
||||
$self->logger->error("Corrupted session (_2fDevices): $@");
|
||||
return $self->p->sendError( $req, "Corrupted session", 500 );
|
||||
return $self->p->sendError( $req, "serverError", 500 );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -214,26 +213,15 @@ sub run {
|
|||
$self->logger->debug("Reading TOTP secret if exists...");
|
||||
$secret = $_->{_secret} foreach (@totp2f);
|
||||
|
||||
if ( ( $req->param('newkey') and $self->conf->{totp2fUserCanChangeKey} )
|
||||
or not $secret )
|
||||
{
|
||||
if ($secret) {
|
||||
return $self->p->sendError( $req, 'totpExistingKey', 200 );
|
||||
}
|
||||
else {
|
||||
$secret = $self->newSecret;
|
||||
$self->logger->debug("Generating new secret = $secret");
|
||||
$nk = 1;
|
||||
}
|
||||
|
||||
elsif ( $req->param('newkey') ) {
|
||||
return $self->p->sendError( $req, 'notAuthorized', 200 );
|
||||
}
|
||||
|
||||
elsif ( $self->conf->{totp2fDisplayExistingSecret} ) {
|
||||
$self->logger->debug("User secret = $secret");
|
||||
}
|
||||
|
||||
else {
|
||||
return $self->p->sendError( $req, 'totpExistingKey', 200 );
|
||||
}
|
||||
|
||||
# Secret is stored in a token: we choose to not accept secret returned
|
||||
# by Ajax request to avoid some attacks
|
||||
my $token = $self->ott->createToken( {
|
||||
|
@ -283,7 +271,7 @@ sub run {
|
|||
};
|
||||
if ($@) {
|
||||
$self->logger->error("Corrupted session (_2fDevices): $@");
|
||||
return $self->p->sendError( $req, "Corrupted session", 500 );
|
||||
return $self->p->sendError( $req, "serverError", 500 );
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
|
|
@ -3,6 +3,7 @@ LemonLDAP::NG 2F registration script
|
|||
###
|
||||
|
||||
setMsg = (msg, level) ->
|
||||
$('#msg').attr 'trspan', msg
|
||||
$('#msg').html window.translate msg
|
||||
$('#color').removeClass 'message-positive message-warning alert-success alert-warning'
|
||||
$('#color').addClass "message-#{level}"
|
||||
|
|
|
@ -3,6 +3,7 @@ LemonLDAP::NG TOTP registration script
|
|||
###
|
||||
|
||||
setMsg = (msg, level) ->
|
||||
$('#msg').attr 'trspan', msg
|
||||
$('#msg').html window.translate msg
|
||||
$('#color').removeClass 'message-positive message-warning message-danger alert-success alert-warning alert-danger'
|
||||
$('#color').addClass "message-#{level}"
|
||||
|
@ -19,14 +20,12 @@ displayError = (j, status, err) ->
|
|||
|
||||
token=''
|
||||
|
||||
getKey = (reset) ->
|
||||
getKey = () ->
|
||||
setMsg 'yourTotpKey', 'warning'
|
||||
$.ajax
|
||||
type: "POST",
|
||||
url: "#{portal}/2fregisters/totp/getkey"
|
||||
dataType: 'json'
|
||||
data:
|
||||
newkey: reset
|
||||
error: displayError
|
||||
# Display key and QR code
|
||||
success: (data) ->
|
||||
|
@ -50,7 +49,8 @@ getKey = (reset) ->
|
|||
value: s
|
||||
size:150
|
||||
# Display serialized key
|
||||
$('#serialized').text(s)
|
||||
secret = data.secret || ""
|
||||
$('#secret').text(secret.toUpperCase().replace(/(.{4})/g, '$1 ').trim())
|
||||
# Show message (warning level if key is new)
|
||||
if data.newkey
|
||||
setMsg 'yourNewTotpKey', 'warning'
|
||||
|
@ -61,7 +61,8 @@ getKey = (reset) ->
|
|||
verify = ->
|
||||
val = $('#code').val()
|
||||
unless val
|
||||
setMsg 'fillTheForm', 'warning'
|
||||
setMsg 'totpMissingCode', 'warning'
|
||||
$("#code").focus()
|
||||
else
|
||||
$.ajax
|
||||
type: "POST",
|
||||
|
@ -82,6 +83,5 @@ verify = ->
|
|||
setMsg 'yourKeyIsRegistered', 'success'
|
||||
|
||||
$(document).ready ->
|
||||
getKey(0)
|
||||
$('#changekey').on 'click', () -> getKey(1)
|
||||
getKey()
|
||||
$('#verify').on 'click', () -> verify()
|
||||
|
|
|
@ -3,6 +3,7 @@ LemonLDAP::NG U2F registration script
|
|||
###
|
||||
|
||||
setMsg = (msg, level) ->
|
||||
$('#msg').attr 'trspan', msg
|
||||
$('#msg').html window.translate msg
|
||||
$('#color').removeClass 'message-positive message-warning message-danger alert-success alert-warning alert-danger'
|
||||
$('#color').addClass "message-#{level}"
|
||||
|
|
|
@ -8,6 +8,7 @@ LemonLDAP::NG 2F registration script
|
|||
var delete2F, displayError, setMsg;
|
||||
|
||||
setMsg = function(msg, level) {
|
||||
$('#msg').attr('trspan', msg);
|
||||
$('#msg').html(window.translate(msg));
|
||||
$('#color').removeClass('message-positive message-warning alert-success alert-warning');
|
||||
$('#color').addClass("message-" + level);
|
||||
|
|
|
@ -1 +1 @@
|
|||
(function(){var e,t,n;n=function(e,r){return $("#msg").html(window.translate(e)),$("#color").removeClass("message-positive message-warning alert-success alert-warning"),$("#color").addClass("message-"+r),"positive"===r&&(r="success"),$("#color").addClass("alert-"+r)},t=function(e,r,t){var o;if(console.log("Error",t),(o=JSON.parse(e.responseText))&&o.error)return o=o.error.replace(/.* /,""),console.log("Returned error",o),o.match(/module/)?n("notAuthorized","warning"):n(o,"warning")},e=function(e,r){return"U2F"===e?e="u":"UBK"===e?e="yubikey":"TOTP"===e?e="totp":n("u2fFailed","warning"),$.ajax({type:"POST",url:portal+"2fregisters/"+e+"/delete",data:{epoch:r},dataType:"json",error:t,success:function(e){return e.error?e.error.match(/notAuthorized/)?n("notAuthorized","warning"):n("unknownAction","warning"):e.result?($("#delete-"+r).hide(),n("yourKeyIsUnregistered","positive")):void 0},error:t})},$(document).ready(function(){return $("body").on("click",".remove2f",function(){return e($(this).attr("device"),$(this).attr("epoch"))}),$("#goback").attr("href",portal),$(".data-epoch").each(function(){var e;return e=new Date(1e3*$(this).text()),$(this).text(e.toLocaleString())})})}).call(this);
|
||||
(function(){var e,t,n;n=function(e,r){return $("#msg").attr("trspan",e),$("#msg").html(window.translate(e)),$("#color").removeClass("message-positive message-warning alert-success alert-warning"),$("#color").addClass("message-"+r),"positive"===r&&(r="success"),$("#color").addClass("alert-"+r)},t=function(e,r,t){var o;if(console.log("Error",t),(o=JSON.parse(e.responseText))&&o.error)return o=o.error.replace(/.* /,""),console.log("Returned error",o),o.match(/module/)?n("notAuthorized","warning"):n(o,"warning")},e=function(e,r){return"U2F"===e?e="u":"UBK"===e?e="yubikey":"TOTP"===e?e="totp":n("u2fFailed","warning"),$.ajax({type:"POST",url:portal+"2fregisters/"+e+"/delete",data:{epoch:r},dataType:"json",error:t,success:function(e){return e.error?e.error.match(/notAuthorized/)?n("notAuthorized","warning"):n("unknownAction","warning"):e.result?($("#delete-"+r).hide(),n("yourKeyIsUnregistered","positive")):void 0},error:t})},$(document).ready(function(){return $("body").on("click",".remove2f",function(){return e($(this).attr("device"),$(this).attr("epoch"))}),$("#goback").attr("href",portal),$(".data-epoch").each(function(){var e;return e=new Date(1e3*$(this).text()),$(this).text(e.toLocaleString())})})}).call(this);
|
|
@ -1 +1 @@
|
|||
{"version":3,"sources":["2fregistration.js"],"names":["delete2F","displayError","setMsg","msg","level","$","html","window","translate","removeClass","addClass","j","status","err","res","console","log","JSON","parse","responseText","error","replace","match","device","epoch","ajax","type","url","portal","data","dataType","success","resp","result","hide","document","ready","on","this","attr","each","myDate","Date","text","toLocaleString","call"],"mappings":"CAMA,WACE,IAAIA,EAAUC,EAAcC,EAE5BA,EAAS,SAASC,EAAKC,GAOrB,OANAC,EAAE,QAAQC,KAAKC,OAAOC,UAAUL,IAChCE,EAAE,UAAUI,YAAY,gEACxBJ,EAAE,UAAUK,SAAS,WAAaN,GACpB,aAAVA,IACFA,EAAQ,WAEHC,EAAE,UAAUK,SAAS,SAAWN,IAGzCH,EAAe,SAASU,EAAGC,EAAQC,GACjC,IAAIC,EAGJ,GAFAC,QAAQC,IAAI,QAASH,IACrBC,EAAMG,KAAKC,MAAMP,EAAEQ,gBACRL,EAAIM,MAGb,OAFAN,EAAMA,EAAIM,MAAMC,QAAQ,MAAO,IAC/BN,QAAQC,IAAI,iBAAkBF,GAC1BA,EAAIQ,MAAM,UACLpB,EAAO,gBAAiB,WAExBA,EAAOY,EAAK,YAKzBd,EAAW,SAASuB,EAAQC,GAU1B,MATe,QAAXD,EACFA,EAAS,IACW,QAAXA,EACTA,EAAS,UACW,SAAXA,EACTA,EAAS,OAETrB,EAAO,YAAa,WAEfG,EAAEoB,KAAK,CACZC,KAAM,OACNC,IAAKC,OAAS,eAAiBL,EAAS,UACxCM,KAAM,CACJL,MAAOA,GAETM,SAAU,OACVV,MAAOnB,EACP8B,QAAS,SAASC,GAChB,OAAIA,EAAKZ,MACHY,EAAKZ,MAAME,MAAM,iBACZpB,EAAO,gBAAiB,WAExBA,EAAO,gBAAiB,WAExB8B,EAAKC,QACd5B,EAAE,WAAamB,GAAOU,OACfhC,EAAO,wBAAyB,kBAFlC,GAKTkB,MAAOnB,KAIXI,EAAE8B,UAAUC,MAAM,WAKhB,OAJA/B,EAAE,QAAQgC,GAAG,QAAS,YAAa,WACjC,OAAOrC,EAASK,EAAEiC,MAAMC,KAAK,UAAWlC,EAAEiC,MAAMC,KAAK,YAEvDlC,EAAE,WAAWkC,KAAK,OAAQX,QACnBvB,EAAE,eAAemC,KAAK,WAC3B,IAAIC,EAEJ,OADAA,EAAS,IAAIC,KAAsB,IAAjBrC,EAAEiC,MAAMK,QACnBtC,EAAEiC,MAAMK,KAAKF,EAAOG,wBAI9BC,KAAKP"}
|
||||
{"version":3,"sources":["2fregistration.js"],"names":["delete2F","displayError","setMsg","msg","level","$","attr","html","window","translate","removeClass","addClass","j","status","err","res","console","log","JSON","parse","responseText","error","replace","match","device","epoch","ajax","type","url","portal","data","dataType","success","resp","result","hide","document","ready","on","this","each","myDate","Date","text","toLocaleString","call"],"mappings":"CAMA,WACE,IAAIA,EAAUC,EAAcC,EAE5BA,EAAS,SAASC,EAAKC,GAQrB,OAPAC,EAAE,QAAQC,KAAK,SAAUH,GACzBE,EAAE,QAAQE,KAAKC,OAAOC,UAAUN,IAChCE,EAAE,UAAUK,YAAY,gEACxBL,EAAE,UAAUM,SAAS,WAAaP,GACpB,aAAVA,IACFA,EAAQ,WAEHC,EAAE,UAAUM,SAAS,SAAWP,IAGzCH,EAAe,SAASW,EAAGC,EAAQC,GACjC,IAAIC,EAGJ,GAFAC,QAAQC,IAAI,QAASH,IACrBC,EAAMG,KAAKC,MAAMP,EAAEQ,gBACRL,EAAIM,MAGb,OAFAN,EAAMA,EAAIM,MAAMC,QAAQ,MAAO,IAC/BN,QAAQC,IAAI,iBAAkBF,GAC1BA,EAAIQ,MAAM,UACLrB,EAAO,gBAAiB,WAExBA,EAAOa,EAAK,YAKzBf,EAAW,SAASwB,EAAQC,GAU1B,MATe,QAAXD,EACFA,EAAS,IACW,QAAXA,EACTA,EAAS,UACW,SAAXA,EACTA,EAAS,OAETtB,EAAO,YAAa,WAEfG,EAAEqB,KAAK,CACZC,KAAM,OACNC,IAAKC,OAAS,eAAiBL,EAAS,UACxCM,KAAM,CACJL,MAAOA,GAETM,SAAU,OACVV,MAAOpB,EACP+B,QAAS,SAASC,GAChB,OAAIA,EAAKZ,MACHY,EAAKZ,MAAME,MAAM,iBACZrB,EAAO,gBAAiB,WAExBA,EAAO,gBAAiB,WAExB+B,EAAKC,QACd7B,EAAE,WAAaoB,GAAOU,OACfjC,EAAO,wBAAyB,kBAFlC,GAKTmB,MAAOpB,KAIXI,EAAE+B,UAAUC,MAAM,WAKhB,OAJAhC,EAAE,QAAQiC,GAAG,QAAS,YAAa,WACjC,OAAOtC,EAASK,EAAEkC,MAAMjC,KAAK,UAAWD,EAAEkC,MAAMjC,KAAK,YAEvDD,EAAE,WAAWC,KAAK,OAAQuB,QACnBxB,EAAE,eAAemC,KAAK,WAC3B,IAAIC,EAEJ,OADAA,EAAS,IAAIC,KAAsB,IAAjBrC,EAAEkC,MAAMI,QACnBtC,EAAEkC,MAAMI,KAAKF,EAAOG,wBAI9BC,KAAKN"}
|
|
@ -8,6 +8,7 @@ LemonLDAP::NG TOTP registration script
|
|||
var displayError, getKey, setMsg, token, verify;
|
||||
|
||||
setMsg = function(msg, level) {
|
||||
$('#msg').attr('trspan', msg);
|
||||
$('#msg').html(window.translate(msg));
|
||||
$('#color').removeClass('message-positive message-warning message-danger alert-success alert-warning alert-danger');
|
||||
$('#color').addClass("message-" + level);
|
||||
|
@ -30,18 +31,15 @@ LemonLDAP::NG TOTP registration script
|
|||
|
||||
token = '';
|
||||
|
||||
getKey = function(reset) {
|
||||
getKey = function() {
|
||||
setMsg('yourTotpKey', 'warning');
|
||||
return $.ajax({
|
||||
type: "POST",
|
||||
url: portal + "/2fregisters/totp/getkey",
|
||||
dataType: 'json',
|
||||
data: {
|
||||
newkey: reset
|
||||
},
|
||||
error: displayError,
|
||||
success: function(data) {
|
||||
var qr, s;
|
||||
var qr, s, secret;
|
||||
if (data.error) {
|
||||
if (data.error.match(/totpExistingKey/)) {
|
||||
$("#divToHide").hide();
|
||||
|
@ -64,7 +62,8 @@ LemonLDAP::NG TOTP registration script
|
|||
value: s,
|
||||
size: 150
|
||||
});
|
||||
$('#serialized').text(s);
|
||||
secret = data.secret || "";
|
||||
$('#secret').text(secret.toUpperCase().replace(/(.{4})/g, '$1 ').trim());
|
||||
if (data.newkey) {
|
||||
setMsg('yourNewTotpKey', 'warning');
|
||||
} else {
|
||||
|
@ -79,7 +78,8 @@ LemonLDAP::NG TOTP registration script
|
|||
var val;
|
||||
val = $('#code').val();
|
||||
if (!val) {
|
||||
return setMsg('fillTheForm', 'warning');
|
||||
setMsg('totpMissingCode', 'warning');
|
||||
return $("#code").focus();
|
||||
} else {
|
||||
return $.ajax({
|
||||
type: "POST",
|
||||
|
@ -107,10 +107,7 @@ LemonLDAP::NG TOTP registration script
|
|||
};
|
||||
|
||||
$(document).ready(function() {
|
||||
getKey(0);
|
||||
$('#changekey').on('click', function() {
|
||||
return getKey(1);
|
||||
});
|
||||
getKey();
|
||||
return $('#verify').on('click', function() {
|
||||
return verify();
|
||||
});
|
||||
|
|
|
@ -1 +1 @@
|
|||
(function(){var r,e,n,t,o;n=function(e,r){return $("#msg").html(window.translate(e)),$("#color").removeClass("message-positive message-warning message-danger alert-success alert-warning alert-danger"),$("#color").addClass("message-"+r),"positive"===r&&(r="success"),$("#color").addClass("alert-"+r)},r=function(e,r,t){var o;if(console.log("Error",t),(o=JSON.parse(e.responseText))&&o.error)return o=o.error.replace(/.* /,""),console.log("Returned error",o),n(o,"warning")},t="",e=function(e){return n("yourTotpKey","warning"),$.ajax({type:"POST",url:portal+"/2fregisters/totp/getkey",dataType:"json",data:{newkey:e},error:r,success:function(e){var r;return e.error?(e.error.match(/totpExistingKey/)&&$("#divToHide").hide(),n(e.error,"warning")):e.portal&&e.user&&e.secret?($("#divToHide").show(),r="otpauth://totp/"+escape(e.portal)+":"+escape(e.user)+"?secret="+e.secret+"&issuer="+escape(e.portal),6!==e.digits&&(r+="&digits="+e.digits),30!==e.interval&&(r+="&period="+e.interval),new QRious({element:document.getElementById("qr"),value:r,size:150}),$("#serialized").text(r),e.newkey?n("yourNewTotpKey","warning"):n("yourTotpKey","success"),t=e.token):n("PE24","danger")}})},o=function(){var e;return(e=$("#code").val())?$.ajax({type:"POST",url:portal+"/2fregisters/totp/verify",dataType:"json",data:{token:t,code:e,TOTPName:$("#TOTPName").val()},error:r,success:function(e){return e.error?e.error.match(/bad(Code|Name)/)?n(e.error,"warning"):n(e.error,"danger"):n("yourKeyIsRegistered","success")}}):n("fillTheForm","warning")},$(document).ready(function(){return e(0),$("#changekey").on("click",function(){return e(1)}),$("#verify").on("click",function(){return o()})})}).call(this);
|
||||
(function(){var r,e,s,o,t;s=function(e,r){return $("#msg").attr("trspan",e),$("#msg").html(window.translate(e)),$("#color").removeClass("message-positive message-warning message-danger alert-success alert-warning alert-danger"),$("#color").addClass("message-"+r),"positive"===r&&(r="success"),$("#color").addClass("alert-"+r)},r=function(e,r,t){var o;if(console.log("Error",t),(o=JSON.parse(e.responseText))&&o.error)return o=o.error.replace(/.* /,""),console.log("Returned error",o),s(o,"warning")},o="",e=function(){return s("yourTotpKey","warning"),$.ajax({type:"POST",url:portal+"/2fregisters/totp/getkey",dataType:"json",error:r,success:function(e){var r,t;return e.error?(e.error.match(/totpExistingKey/)&&$("#divToHide").hide(),s(e.error,"warning")):e.portal&&e.user&&e.secret?($("#divToHide").show(),r="otpauth://totp/"+escape(e.portal)+":"+escape(e.user)+"?secret="+e.secret+"&issuer="+escape(e.portal),6!==e.digits&&(r+="&digits="+e.digits),30!==e.interval&&(r+="&period="+e.interval),new QRious({element:document.getElementById("qr"),value:r,size:150}),t=e.secret||"",$("#secret").text(t.toUpperCase().replace(/(.{4})/g,"$1 ").trim()),e.newkey?s("yourNewTotpKey","warning"):s("yourTotpKey","success"),o=e.token):s("PE24","danger")}})},t=function(){var e;return(e=$("#code").val())?$.ajax({type:"POST",url:portal+"/2fregisters/totp/verify",dataType:"json",data:{token:o,code:e,TOTPName:$("#TOTPName").val()},error:r,success:function(e){return e.error?e.error.match(/bad(Code|Name)/)?s(e.error,"warning"):s(e.error,"danger"):s("yourKeyIsRegistered","success")}}):(s("totpMissingCode","warning"),$("#code").focus())},$(document).ready(function(){return e(),$("#verify").on("click",function(){return t()})})}).call(this);
|
|
@ -1 +1 @@
|
|||
{"version":3,"sources":["totpregistration.js"],"names":["displayError","getKey","setMsg","token","verify","msg","level","$","html","window","translate","removeClass","addClass","j","status","err","res","console","log","JSON","parse","responseText","error","replace","reset","ajax","type","url","portal","dataType","data","newkey","success","s","match","hide","user","secret","show","escape","digits","interval","QRious","element","document","getElementById","value","size","text","val","code","TOTPName","ready","on","call","this"],"mappings":"CAMA,WACE,IAAIA,EAAcC,EAAQC,EAAQC,EAAOC,EAEzCF,EAAS,SAASG,EAAKC,GAOrB,OANAC,EAAE,QAAQC,KAAKC,OAAOC,UAAUL,IAChCE,EAAE,UAAUI,YAAY,4FACxBJ,EAAE,UAAUK,SAAS,WAAaN,GACpB,aAAVA,IACFA,EAAQ,WAEHC,EAAE,UAAUK,SAAS,SAAWN,IAGzCN,EAAe,SAASa,EAAGC,EAAQC,GACjC,IAAIC,EAGJ,GAFAC,QAAQC,IAAI,QAASH,IACrBC,EAAMG,KAAKC,MAAMP,EAAEQ,gBACRL,EAAIM,MAGb,OAFAN,EAAMA,EAAIM,MAAMC,QAAQ,MAAO,IAC/BN,QAAQC,IAAI,iBAAkBF,GACvBd,EAAOc,EAAK,YAIvBb,EAAQ,GAERF,EAAS,SAASuB,GAEhB,OADAtB,EAAO,cAAe,WACfK,EAAEkB,KAAK,CACZC,KAAM,OACNC,IAAKC,OAAS,2BACdC,SAAU,OACVC,KAAM,CACJC,OAAQP,GAEVF,MAAOtB,EACPgC,QAAS,SAASF,GAChB,IAAQG,EACR,OAAIH,EAAKR,OACHQ,EAAKR,MAAMY,MAAM,oBACnB3B,EAAE,cAAc4B,OAEXjC,EAAO4B,EAAKR,MAAO,YAEtBQ,EAAKF,QAAUE,EAAKM,MAAQN,EAAKO,QAGvC9B,EAAE,cAAc+B,OAChBL,EAAI,kBAAqBM,OAAOT,EAAKF,QAAW,IAAOW,OAAOT,EAAKM,MAAS,WAAaN,EAAKO,OAAS,WAAcE,OAAOT,EAAKF,QAC7G,IAAhBE,EAAKU,SACPP,GAAK,WAAaH,EAAKU,QAEH,KAAlBV,EAAKW,WACPR,GAAK,WAAaH,EAAKW,UAEpB,IAAIC,OAAO,CACdC,QAASC,SAASC,eAAe,MACjCC,MAAOb,EACPc,KAAM,MAERxC,EAAE,eAAeyC,KAAKf,GAClBH,EAAKC,OACP7B,EAAO,iBAAkB,WAEzBA,EAAO,cAAe,WAEjBC,EAAQ2B,EAAK3B,OArBXD,EAAO,OAAQ,cA0B9BE,EAAS,WACP,IAAI6C,EAEJ,OADAA,EAAM1C,EAAE,SAAS0C,OAIR1C,EAAEkB,KAAK,CACZC,KAAM,OACNC,IAAKC,OAAS,2BACdC,SAAU,OACVC,KAAM,CACJ3B,MAAOA,EACP+C,KAAMD,EACNE,SAAU5C,EAAE,aAAa0C,OAE3B3B,MAAOtB,EACPgC,QAAS,SAASF,GAChB,OAAIA,EAAKR,MACHQ,EAAKR,MAAMY,MAAM,kBACZhC,EAAO4B,EAAKR,MAAO,WAEnBpB,EAAO4B,EAAKR,MAAO,UAGrBpB,EAAO,sBAAuB,cApBpCA,EAAO,cAAe,YA2BjCK,EAAEqC,UAAUQ,MAAM,WAKhB,OAJAnD,EAAO,GACPM,EAAE,cAAc8C,GAAG,QAAS,WAC1B,OAAOpD,EAAO,KAETM,EAAE,WAAW8C,GAAG,QAAS,WAC9B,OAAOjD,UAIVkD,KAAKC"}
|
||||
{"version":3,"sources":["totpregistration.js"],"names":["displayError","getKey","setMsg","token","verify","msg","level","$","attr","html","window","translate","removeClass","addClass","j","status","err","res","console","log","JSON","parse","responseText","error","replace","ajax","type","url","portal","dataType","success","data","s","secret","match","hide","user","show","escape","digits","interval","QRious","element","document","getElementById","value","size","text","toUpperCase","trim","newkey","val","code","TOTPName","focus","ready","on","call","this"],"mappings":"CAMA,WACE,IAAIA,EAAcC,EAAQC,EAAQC,EAAOC,EAEzCF,EAAS,SAASG,EAAKC,GAQrB,OAPAC,EAAE,QAAQC,KAAK,SAAUH,GACzBE,EAAE,QAAQE,KAAKC,OAAOC,UAAUN,IAChCE,EAAE,UAAUK,YAAY,4FACxBL,EAAE,UAAUM,SAAS,WAAaP,GACpB,aAAVA,IACFA,EAAQ,WAEHC,EAAE,UAAUM,SAAS,SAAWP,IAGzCN,EAAe,SAASc,EAAGC,EAAQC,GACjC,IAAIC,EAGJ,GAFAC,QAAQC,IAAI,QAASH,IACrBC,EAAMG,KAAKC,MAAMP,EAAEQ,gBACRL,EAAIM,MAGb,OAFAN,EAAMA,EAAIM,MAAMC,QAAQ,MAAO,IAC/BN,QAAQC,IAAI,iBAAkBF,GACvBf,EAAOe,EAAK,YAIvBd,EAAQ,GAERF,EAAS,WAEP,OADAC,EAAO,cAAe,WACfK,EAAEkB,KAAK,CACZC,KAAM,OACNC,IAAKC,OAAS,2BACdC,SAAU,OACVN,MAAOvB,EACP8B,QAAS,SAASC,GAChB,IAAQC,EAAGC,EACX,OAAIF,EAAKR,OACHQ,EAAKR,MAAMW,MAAM,oBACnB3B,EAAE,cAAc4B,OAEXjC,EAAO6B,EAAKR,MAAO,YAEtBQ,EAAKH,QAAUG,EAAKK,MAAQL,EAAKE,QAGvC1B,EAAE,cAAc8B,OAChBL,EAAI,kBAAqBM,OAAOP,EAAKH,QAAW,IAAOU,OAAOP,EAAKK,MAAS,WAAaL,EAAKE,OAAS,WAAcK,OAAOP,EAAKH,QAC7G,IAAhBG,EAAKQ,SACPP,GAAK,WAAaD,EAAKQ,QAEH,KAAlBR,EAAKS,WACPR,GAAK,WAAaD,EAAKS,UAEpB,IAAIC,OAAO,CACdC,QAASC,SAASC,eAAe,MACjCC,MAAOb,EACPc,KAAM,MAERb,EAASF,EAAKE,QAAU,GACxB1B,EAAE,WAAWwC,KAAKd,EAAOe,cAAcxB,QAAQ,UAAW,OAAOyB,QAC7DlB,EAAKmB,OACPhD,EAAO,iBAAkB,WAEzBA,EAAO,cAAe,WAEjBC,EAAQ4B,EAAK5B,OAtBXD,EAAO,OAAQ,cA2B9BE,EAAS,WACP,IAAI+C,EAEJ,OADAA,EAAM5C,EAAE,SAAS4C,OAKR5C,EAAEkB,KAAK,CACZC,KAAM,OACNC,IAAKC,OAAS,2BACdC,SAAU,OACVE,KAAM,CACJ5B,MAAOA,EACPiD,KAAMD,EACNE,SAAU9C,EAAE,aAAa4C,OAE3B5B,MAAOvB,EACP8B,QAAS,SAASC,GAChB,OAAIA,EAAKR,MACHQ,EAAKR,MAAMW,MAAM,kBACZhC,EAAO6B,EAAKR,MAAO,WAEnBrB,EAAO6B,EAAKR,MAAO,UAGrBrB,EAAO,sBAAuB,eArB3CA,EAAO,kBAAmB,WACnBK,EAAE,SAAS+C,UA2BtB/C,EAAEoC,UAAUY,MAAM,WAEhB,OADAtD,IACOM,EAAE,WAAWiD,GAAG,QAAS,WAC9B,OAAOpD,UAIVqD,KAAKC"}
|
|
@ -8,6 +8,7 @@ LemonLDAP::NG U2F registration script
|
|||
var displayError, register, setMsg, verify;
|
||||
|
||||
setMsg = function(msg, level) {
|
||||
$('#msg').attr('trspan', msg);
|
||||
$('#msg').html(window.translate(msg));
|
||||
$('#color').removeClass('message-positive message-warning message-danger alert-success alert-warning alert-danger');
|
||||
$('#color').addClass("message-" + level);
|
||||
|
|
|
@ -1 +1 @@
|
|||
(function(){var n,e,t,r;t=function(e,r){return $("#msg").html(window.translate(e)),$("#color").removeClass("message-positive message-warning message-danger alert-success alert-warning alert-danger"),$("#color").addClass("message-"+r),"positive"===r&&(r="success"),$("#color").addClass("alert-"+r)},n=function(e,r,n){var s;if(console.log("Error",n),(s=JSON.parse(e.responseText))&&s.error)return s=s.error.replace(/.* /,""),console.log("Returned error",s),t(s,"warning")},e=function(){return $.ajax({type:"POST",url:portal+"2fregisters/u/register",data:{},dataType:"json",error:n,success:function(r){var e;return e=[{challenge:r.challenge,version:r.version}],t("touchU2fDevice","positive"),$("#u2fPermission").show(),u2f.register(r.appId,e,[],function(e){return $("#u2fPermission").hide(),e.errorCode?t(e.error,"warning"):$.ajax({type:"POST",url:portal+"2fregisters/u/registration",data:{registration:JSON.stringify(e),challenge:JSON.stringify(r),keyName:$("#keyName").val()},dataType:"json",success:function(e){return e.error?e.error.match(/badName/)?t(e.error,"warning"):t("u2fFailed","danger"):e.result?t("yourKeyIsRegistered","positive"):void 0},error:n})})}})},r=function(){return $.ajax({type:"POST",url:portal+"2fregisters/u/verify",data:{},dataType:"json",error:n,success:function(r){return t("touchU2fDevice","positive"),u2f.sign(r.appId,r.challenge,r.registeredKeys,function(e){return e.errorCode?t("unableToGetKey","warning"):$.ajax({type:"POST",url:portal+"2fregisters/u/signature",data:{signature:JSON.stringify(e),challenge:r.challenge},dataType:"json",success:function(e){return e.error?t("u2fFailed","danger"):e.result?t("yourKeyIsVerified","positive"):void 0},error:function(e,r,n){return console.log("error",n)}})})}})},$(document).ready(function(){return $("#u2fPermission").hide(),$("#register").on("click",e),$("#verify").on("click",r),$("#goback").attr("href",portal)})}).call(this);
|
||||
(function(){var n,r,t,e;t=function(r,e){return $("#msg").attr("trspan",r),$("#msg").html(window.translate(r)),$("#color").removeClass("message-positive message-warning message-danger alert-success alert-warning alert-danger"),$("#color").addClass("message-"+e),"positive"===e&&(e="success"),$("#color").addClass("alert-"+e)},n=function(r,e,n){var s;if(console.log("Error",n),(s=JSON.parse(r.responseText))&&s.error)return s=s.error.replace(/.* /,""),console.log("Returned error",s),t(s,"warning")},r=function(){return $.ajax({type:"POST",url:portal+"2fregisters/u/register",data:{},dataType:"json",error:n,success:function(e){var r;return r=[{challenge:e.challenge,version:e.version}],t("touchU2fDevice","positive"),$("#u2fPermission").show(),u2f.register(e.appId,r,[],function(r){return $("#u2fPermission").hide(),r.errorCode?t(r.error,"warning"):$.ajax({type:"POST",url:portal+"2fregisters/u/registration",data:{registration:JSON.stringify(r),challenge:JSON.stringify(e),keyName:$("#keyName").val()},dataType:"json",success:function(r){return r.error?r.error.match(/badName/)?t(r.error,"warning"):t("u2fFailed","danger"):r.result?t("yourKeyIsRegistered","positive"):void 0},error:n})})}})},e=function(){return $.ajax({type:"POST",url:portal+"2fregisters/u/verify",data:{},dataType:"json",error:n,success:function(e){return t("touchU2fDevice","positive"),u2f.sign(e.appId,e.challenge,e.registeredKeys,function(r){return r.errorCode?t("unableToGetKey","warning"):$.ajax({type:"POST",url:portal+"2fregisters/u/signature",data:{signature:JSON.stringify(r),challenge:e.challenge},dataType:"json",success:function(r){return r.error?t("u2fFailed","danger"):r.result?t("yourKeyIsVerified","positive"):void 0},error:function(r,e,n){return console.log("error",n)}})})}})},$(document).ready(function(){return $("#u2fPermission").hide(),$("#register").on("click",r),$("#verify").on("click",e),$("#goback").attr("href",portal)})}).call(this);
|
|
@ -1 +1 @@
|
|||
{"version":3,"sources":["u2fregistration.js"],"names":["displayError","register","setMsg","verify","msg","level","$","html","window","translate","removeClass","addClass","j","status","err","res","console","log","JSON","parse","responseText","error","replace","ajax","type","url","portal","data","dataType","success","ch","request","challenge","version","show","u2f","appId","hide","errorCode","registration","stringify","keyName","val","resp","match","result","sign","registeredKeys","signature","document","ready","on","attr","call","this"],"mappings":"CAMA,WACE,IAAIA,EAAcC,EAAUC,EAAQC,EAEpCD,EAAS,SAASE,EAAKC,GAOrB,OANAC,EAAE,QAAQC,KAAKC,OAAOC,UAAUL,IAChCE,EAAE,UAAUI,YAAY,4FACxBJ,EAAE,UAAUK,SAAS,WAAaN,GACpB,aAAVA,IACFA,EAAQ,WAEHC,EAAE,UAAUK,SAAS,SAAWN,IAGzCL,EAAe,SAASY,EAAGC,EAAQC,GACjC,IAAIC,EAGJ,GAFAC,QAAQC,IAAI,QAASH,IACrBC,EAAMG,KAAKC,MAAMP,EAAEQ,gBACRL,EAAIM,MAGb,OAFAN,EAAMA,EAAIM,MAAMC,QAAQ,MAAO,IAC/BN,QAAQC,IAAI,iBAAkBF,GACvBb,EAAOa,EAAK,YAIvBd,EAAW,WACT,OAAOK,EAAEiB,KAAK,CACZC,KAAM,OACNC,IAAKC,OAAS,yBACdC,KAAM,GACNC,SAAU,OACVP,MAAOrB,EACP6B,QAAS,SAASC,GAChB,IAAIC,EASJ,OARAA,EAAU,CACR,CACEC,UAAWF,EAAGE,UACdC,QAASH,EAAGG,UAGhB/B,EAAO,iBAAkB,YACzBI,EAAE,kBAAkB4B,OACbC,IAAIlC,SAAS6B,EAAGM,MAAOL,EAAS,GAAI,SAASJ,GAElD,OADArB,EAAE,kBAAkB+B,OAChBV,EAAKW,UACApC,EAAOyB,EAAKN,MAAO,WAEnBf,EAAEiB,KAAK,CACZC,KAAM,OACNC,IAAKC,OAAS,6BACdC,KAAM,CACJY,aAAcrB,KAAKsB,UAAUb,GAC7BK,UAAWd,KAAKsB,UAAUV,GAC1BW,QAASnC,EAAE,YAAYoC,OAEzBd,SAAU,OACVC,QAAS,SAASc,GAChB,OAAIA,EAAKtB,MACHsB,EAAKtB,MAAMuB,MAAM,WACZ1C,EAAOyC,EAAKtB,MAAO,WAEnBnB,EAAO,YAAa,UAEpByC,EAAKE,OACP3C,EAAO,sBAAuB,iBADhC,GAITmB,MAAOrB,UAQnBG,EAAS,WACP,OAAOG,EAAEiB,KAAK,CACZC,KAAM,OACNC,IAAKC,OAAS,uBACdC,KAAM,GACNC,SAAU,OACVP,MAAOrB,EACP6B,QAAS,SAASC,GAEhB,OADA5B,EAAO,iBAAkB,YAClBiC,IAAIW,KAAKhB,EAAGM,MAAON,EAAGE,UAAWF,EAAGiB,eAAgB,SAASpB,GAClE,OAAIA,EAAKW,UACApC,EAAO,iBAAkB,WAEzBI,EAAEiB,KAAK,CACZC,KAAM,OACNC,IAAKC,OAAS,0BACdC,KAAM,CACJqB,UAAW9B,KAAKsB,UAAUb,GAC1BK,UAAWF,EAAGE,WAEhBJ,SAAU,OACVC,QAAS,SAASc,GAChB,OAAIA,EAAKtB,MACAnB,EAAO,YAAa,UAClByC,EAAKE,OACP3C,EAAO,oBAAqB,iBAD9B,GAITmB,MAAO,SAAST,EAAGC,EAAQC,GACzB,OAAOE,QAAQC,IAAI,QAASH,YAS1CR,EAAE2C,UAAUC,MAAM,WAIhB,OAHA5C,EAAE,kBAAkB+B,OACpB/B,EAAE,aAAa6C,GAAG,QAASlD,GAC3BK,EAAE,WAAW6C,GAAG,QAAShD,GAClBG,EAAE,WAAW8C,KAAK,OAAQ1B,YAGlC2B,KAAKC"}
|
||||
{"version":3,"sources":["u2fregistration.js"],"names":["displayError","register","setMsg","verify","msg","level","$","attr","html","window","translate","removeClass","addClass","j","status","err","res","console","log","JSON","parse","responseText","error","replace","ajax","type","url","portal","data","dataType","success","ch","request","challenge","version","show","u2f","appId","hide","errorCode","registration","stringify","keyName","val","resp","match","result","sign","registeredKeys","signature","document","ready","on","call","this"],"mappings":"CAMA,WACE,IAAIA,EAAcC,EAAUC,EAAQC,EAEpCD,EAAS,SAASE,EAAKC,GAQrB,OAPAC,EAAE,QAAQC,KAAK,SAAUH,GACzBE,EAAE,QAAQE,KAAKC,OAAOC,UAAUN,IAChCE,EAAE,UAAUK,YAAY,4FACxBL,EAAE,UAAUM,SAAS,WAAaP,GACpB,aAAVA,IACFA,EAAQ,WAEHC,EAAE,UAAUM,SAAS,SAAWP,IAGzCL,EAAe,SAASa,EAAGC,EAAQC,GACjC,IAAIC,EAGJ,GAFAC,QAAQC,IAAI,QAASH,IACrBC,EAAMG,KAAKC,MAAMP,EAAEQ,gBACRL,EAAIM,MAGb,OAFAN,EAAMA,EAAIM,MAAMC,QAAQ,MAAO,IAC/BN,QAAQC,IAAI,iBAAkBF,GACvBd,EAAOc,EAAK,YAIvBf,EAAW,WACT,OAAOK,EAAEkB,KAAK,CACZC,KAAM,OACNC,IAAKC,OAAS,yBACdC,KAAM,GACNC,SAAU,OACVP,MAAOtB,EACP8B,QAAS,SAASC,GAChB,IAAIC,EASJ,OARAA,EAAU,CACR,CACEC,UAAWF,EAAGE,UACdC,QAASH,EAAGG,UAGhBhC,EAAO,iBAAkB,YACzBI,EAAE,kBAAkB6B,OACbC,IAAInC,SAAS8B,EAAGM,MAAOL,EAAS,GAAI,SAASJ,GAElD,OADAtB,EAAE,kBAAkBgC,OAChBV,EAAKW,UACArC,EAAO0B,EAAKN,MAAO,WAEnBhB,EAAEkB,KAAK,CACZC,KAAM,OACNC,IAAKC,OAAS,6BACdC,KAAM,CACJY,aAAcrB,KAAKsB,UAAUb,GAC7BK,UAAWd,KAAKsB,UAAUV,GAC1BW,QAASpC,EAAE,YAAYqC,OAEzBd,SAAU,OACVC,QAAS,SAASc,GAChB,OAAIA,EAAKtB,MACHsB,EAAKtB,MAAMuB,MAAM,WACZ3C,EAAO0C,EAAKtB,MAAO,WAEnBpB,EAAO,YAAa,UAEpB0C,EAAKE,OACP5C,EAAO,sBAAuB,iBADhC,GAIToB,MAAOtB,UAQnBG,EAAS,WACP,OAAOG,EAAEkB,KAAK,CACZC,KAAM,OACNC,IAAKC,OAAS,uBACdC,KAAM,GACNC,SAAU,OACVP,MAAOtB,EACP8B,QAAS,SAASC,GAEhB,OADA7B,EAAO,iBAAkB,YAClBkC,IAAIW,KAAKhB,EAAGM,MAAON,EAAGE,UAAWF,EAAGiB,eAAgB,SAASpB,GAClE,OAAIA,EAAKW,UACArC,EAAO,iBAAkB,WAEzBI,EAAEkB,KAAK,CACZC,KAAM,OACNC,IAAKC,OAAS,0BACdC,KAAM,CACJqB,UAAW9B,KAAKsB,UAAUb,GAC1BK,UAAWF,EAAGE,WAEhBJ,SAAU,OACVC,QAAS,SAASc,GAChB,OAAIA,EAAKtB,MACApB,EAAO,YAAa,UAClB0C,EAAKE,OACP5C,EAAO,oBAAqB,iBAD9B,GAIToB,MAAO,SAAST,EAAGC,EAAQC,GACzB,OAAOE,QAAQC,IAAI,QAASH,YAS1CT,EAAE4C,UAAUC,MAAM,WAIhB,OAHA7C,EAAE,kBAAkBgC,OACpBhC,EAAE,aAAa8C,GAAG,QAASnD,GAC3BK,EAAE,WAAW8C,GAAG,QAASjD,GAClBG,EAAE,WAAWC,KAAK,OAAQoB,YAGlC0B,KAAKC"}
|
|
@ -126,7 +126,6 @@
|
|||
"cancel":"إلغاء",
|
||||
"captcha":"كلمة التحقق أو الكابتشا ",
|
||||
"certificateReset":"Reset my certificate",
|
||||
"changeKey":"Generate new key",
|
||||
"changePwd":"غير كلمة المرور الخاصة بك",
|
||||
"checkDevOps":"Check DevOps handler file",
|
||||
"checkLastLogins":"تحقق من آخر تسجيلات دخول الخاصة بي",
|
||||
|
@ -169,7 +168,6 @@
|
|||
"expired2Fremoved":"%s expired 2F devices have been removed!",
|
||||
"explorer":"Explorer",
|
||||
"ext2f":"Verification code",
|
||||
"fillTheForm":"Fill the form",
|
||||
"firstName":"الاسم الاول",
|
||||
"forbidden":"Access FORBIDDEN",
|
||||
"forgotPwd":"نسيت كلمة المرور؟",
|
||||
|
@ -293,7 +291,12 @@
|
|||
"submit":"قدم",
|
||||
"switchContext":"Switch context",
|
||||
"totp2f":"OTP App",
|
||||
"totpExistingKey":"A TOTP secret already exists",
|
||||
"totpExistingKey":"A TOTP device is already registered, you must remove it before adding a new TOTP device",
|
||||
"totpMissingCode":"Please enter the code supplied by your TOTP application",
|
||||
"totpQrCode":"Scan this QR code in your TOTP application",
|
||||
"totpRegisterCode":"Input the code provided by your application",
|
||||
"totpRegisterName":"Choose a name for this TOTP device",
|
||||
"totpSecretKey":"If your TOTP application does not support QR codes, enter the following key instead:",
|
||||
"touchU2fDevice":"يرجى لمس جهاز U2F وامض الآن.",
|
||||
"touchU2fDeviceOrEnterTotp":"Please touch the flashing U2F device or enter TOTP code.",
|
||||
"type":"نوع",
|
||||
|
@ -333,4 +336,4 @@
|
|||
"yourProfile":"Know your profile",
|
||||
"yourTotpKey":"Your TOTP key",
|
||||
"yubikey2f":"Yubikey"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -126,7 +126,6 @@
|
|||
"cancel":"Abbrechen",
|
||||
"captcha":"Captcha",
|
||||
"certificateReset":"Reset my certificate",
|
||||
"changeKey":"Neuen Schlüssel erzeugen",
|
||||
"changePwd":"Ändere dein Passwort",
|
||||
"checkDevOps":"Check DevOps handler file",
|
||||
"checkLastLogins":"Überprüfe meine letzten Logins",
|
||||
|
@ -169,7 +168,6 @@
|
|||
"expired2Fremoved":"%s expired 2F devices have been removed!",
|
||||
"explorer":"Explorer",
|
||||
"ext2f":"Verification code",
|
||||
"fillTheForm":"Fülle das Formular aus",
|
||||
"firstName":"Vorname",
|
||||
"forbidden":"Access FORBIDDEN",
|
||||
"forgotPwd":"Passwort vergessen ?",
|
||||
|
@ -294,6 +292,11 @@
|
|||
"switchContext":"Switch context",
|
||||
"totp2f":"OTP App",
|
||||
"totpExistingKey":"Es existiert bereits ein TOTP-Secret",
|
||||
"totpMissingCode":"Please enter the code supplied by your TOTP application",
|
||||
"totpQrCode":"Scan this QR code in your TOTP application",
|
||||
"totpRegisterCode":"Input the code provided by your application",
|
||||
"totpRegisterName":"Choose a name for this TOTP device",
|
||||
"totpSecretKey":"If your TOTP application does not support QR codes, enter the following key instead:",
|
||||
"touchU2fDevice":"Please touch the flashing U2F device now.",
|
||||
"touchU2fDeviceOrEnterTotp":"Please touch the flashing U2F device or enter TOTP code.",
|
||||
"type":"Type",
|
||||
|
@ -333,4 +336,4 @@
|
|||
"yourProfile":"Know your profile",
|
||||
"yourTotpKey":"Your TOTP key",
|
||||
"yubikey2f":"Yubikey"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -126,7 +126,6 @@
|
|||
"cancel":"Cancel",
|
||||
"captcha":"Captcha",
|
||||
"certificateReset":"Reset my certificate",
|
||||
"changeKey":"Generate new key",
|
||||
"changePwd":"Change your password",
|
||||
"checkDevOps":"Check DevOps handler file",
|
||||
"checkLastLogins":"Check my last logins",
|
||||
|
@ -169,7 +168,6 @@
|
|||
"expired2Fremoved":"%s expired 2F devices have been removed!",
|
||||
"explorer":"Explorer",
|
||||
"ext2f":"Verification code",
|
||||
"fillTheForm":"Fill the form",
|
||||
"firstName":"First name",
|
||||
"forbidden":"Access FORBIDDEN",
|
||||
"forgotPwd":"Forgot your password?",
|
||||
|
@ -293,7 +291,12 @@
|
|||
"submit":"Submit",
|
||||
"switchContext":"Switch context",
|
||||
"totp2f":"OTP App",
|
||||
"totpExistingKey":"A TOTP secret already exists",
|
||||
"totpExistingKey":"A TOTP device is already registered, you must remove it before adding a new TOTP device",
|
||||
"totpMissingCode":"Please enter the code supplied by your TOTP application",
|
||||
"totpQrCode":"Scan this QR code in your TOTP application",
|
||||
"totpRegisterCode":"Input the code provided by your application",
|
||||
"totpRegisterName":"Choose a name for this TOTP device",
|
||||
"totpSecretKey":"If your TOTP application does not support QR codes, enter the following key instead:",
|
||||
"touchU2fDevice":"Please touch the flashing U2F device now.",
|
||||
"touchU2fDeviceOrEnterTotp":"Please touch the flashing U2F device or enter TOTP code.",
|
||||
"type":"Type",
|
||||
|
|
|
@ -126,7 +126,6 @@
|
|||
"cancel":"Cancelar",
|
||||
"captcha":"Captcha",
|
||||
"certificateReset":"Reiniciar mi certificado",
|
||||
"changeKey":"Generar nueva llave",
|
||||
"changePwd":"Cambie su contraseña",
|
||||
"checkDevOps":"Check DevOps handler file",
|
||||
"checkLastLogins":"Verificar mis últimos accesos",
|
||||
|
@ -169,7 +168,6 @@
|
|||
"expired2Fremoved":"¡%s dispositivos 2F caducados han sido suprimidos!",
|
||||
"explorer":"Explorer",
|
||||
"ext2f":"Código de verificación",
|
||||
"fillTheForm":"Llene el formulario",
|
||||
"firstName":"Nombre",
|
||||
"forbidden":"Acceso DENEGADO",
|
||||
"forgotPwd":"Contraseña olvidada?",
|
||||
|
@ -294,6 +292,11 @@
|
|||
"switchContext":"Cambiar contexto",
|
||||
"totp2f":"Aplicación OTP",
|
||||
"totpExistingKey":"Un secreto TOTP ya existe",
|
||||
"totpMissingCode":"Please enter the code supplied by your TOTP application",
|
||||
"totpQrCode":"Scan this QR code in your TOTP application",
|
||||
"totpRegisterCode":"Input the code provided by your application",
|
||||
"totpRegisterName":"Choose a name for this TOTP device",
|
||||
"totpSecretKey":"If your TOTP application does not support QR codes, enter the following key instead:",
|
||||
"touchU2fDevice":"Por favor toque el dispositivo U2F centelleante ahora.",
|
||||
"touchU2fDeviceOrEnterTotp":"Por favor toque el dispositivo U2F centelleante o ingrese el código TOTP.",
|
||||
"type":"Tipo",
|
||||
|
@ -333,4 +336,4 @@
|
|||
"yourProfile":"Conozca su perfil",
|
||||
"yourTotpKey":"Su llave TOTP",
|
||||
"yubikey2f":"Yubikey"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -126,7 +126,6 @@
|
|||
"cancel":"Peruuta",
|
||||
"captcha":"Captcha",
|
||||
"certificateReset":"Reset my certificate",
|
||||
"changeKey":"Generate new key",
|
||||
"changePwd":"Vaihda salasanasi",
|
||||
"checkDevOps":"Check DevOps handler file",
|
||||
"checkLastLogins":"Tarkista viimeiset kirjautumiseni",
|
||||
|
@ -169,7 +168,6 @@
|
|||
"expired2Fremoved":"%s expired 2F devices have been removed!",
|
||||
"explorer":"Explorer",
|
||||
"ext2f":"Verification code",
|
||||
"fillTheForm":"Fill the form",
|
||||
"firstName":"Etunimi",
|
||||
"forbidden":"Access FORBIDDEN",
|
||||
"forgotPwd":"Unohditko salasanasi?",
|
||||
|
@ -293,7 +291,12 @@
|
|||
"submit":"Lähetä",
|
||||
"switchContext":"Switch context",
|
||||
"totp2f":"OTP App",
|
||||
"totpExistingKey":"A TOTP secret already exists",
|
||||
"totpExistingKey":"A TOTP device is already registered, you must remove it before adding a new TOTP device",
|
||||
"totpMissingCode":"Please enter the code supplied by your TOTP application",
|
||||
"totpQrCode":"Scan this QR code in your TOTP application",
|
||||
"totpRegisterCode":"Input the code provided by your application",
|
||||
"totpRegisterName":"Choose a name for this TOTP device",
|
||||
"totpSecretKey":"If your TOTP application does not support QR codes, enter the following key instead:",
|
||||
"touchU2fDevice":"Please touch the flashing U2F device now.",
|
||||
"touchU2fDeviceOrEnterTotp":"Please touch the flashing U2F device or enter TOTP code.",
|
||||
"type":"Type",
|
||||
|
@ -333,4 +336,4 @@
|
|||
"yourProfile":"Know your profile",
|
||||
"yourTotpKey":"Your TOTP key",
|
||||
"yubikey2f":"Yubikey"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -126,7 +126,6 @@
|
|||
"cancel":"Annuler",
|
||||
"captcha":"Captcha",
|
||||
"certificateReset":"Réinitialiser mon certificat",
|
||||
"changeKey":"Générer une nouvelle clef",
|
||||
"changePwd":"Changez votre mot de passe",
|
||||
"checkDevOps":"Vérifier un fichier DevOps",
|
||||
"checkLastLogins":"Voir mes dernières connexions",
|
||||
|
@ -169,7 +168,6 @@
|
|||
"expired2Fremoved":"%s seconds facteurs expirés ont été supprimés !",
|
||||
"explorer":"Explorateur",
|
||||
"ext2f":"Code de vérification",
|
||||
"fillTheForm":"Remplissez le formulaire",
|
||||
"firstName":"Prénom",
|
||||
"forbidden":"Accès INTERDIT",
|
||||
"forgotPwd":"Mot de passe oublié ?",
|
||||
|
@ -293,7 +291,12 @@
|
|||
"submit":"Envoyer",
|
||||
"switchContext":"Changer de contexte",
|
||||
"totp2f":"Application OTP",
|
||||
"totpExistingKey":"Un secret TOTP existe déjà !",
|
||||
"totpExistingKey":"Un périphérique TOTP est déja enregistré, vous devez le supprimer pour pouvoir en ajouter un nouveau",
|
||||
"totpMissingCode":"Veuillez entrer le code fourni par votre application TOTP",
|
||||
"totpQrCode":"Scannez ce QR code dans votre application TOTP",
|
||||
"totpRegisterCode":"Recopiez le code affiché par votre application",
|
||||
"totpRegisterName":"Choisissez un nom pour votre périphérique TOTP",
|
||||
"totpSecretKey":"Si votre application n'accepte pas les QR codes, saisissez la clé suivante:",
|
||||
"touchU2fDevice":"Posez votre doigt sur le périphérique U2F",
|
||||
"touchU2fDeviceOrEnterTotp":"Posez votre doigt sur le périphérique U2F ou entrez le code TOTP",
|
||||
"type":"Type",
|
||||
|
|
|
@ -126,7 +126,6 @@
|
|||
"cancel":"Cancella",
|
||||
"captcha":"Captcha",
|
||||
"certificateReset":"Reset my certificate",
|
||||
"changeKey":"Genera nuova chiave",
|
||||
"changePwd":"Cambia la tua password",
|
||||
"checkDevOps":"Check DevOps handler file",
|
||||
"checkLastLogins":"Controllare i miei ultimi accessi",
|
||||
|
@ -169,7 +168,6 @@
|
|||
"expired2Fremoved":"%s expired 2F devices have been removed!",
|
||||
"explorer":"Explorer",
|
||||
"ext2f":"Verification code",
|
||||
"fillTheForm":"Compila il modulo",
|
||||
"firstName":"Nome",
|
||||
"forbidden":"Accesso VIETATO",
|
||||
"forgotPwd":"Password dimenticata?",
|
||||
|
@ -294,6 +292,11 @@
|
|||
"switchContext":"Switch context",
|
||||
"totp2f":"OTP App",
|
||||
"totpExistingKey":"Un segreto TOTP esiste già",
|
||||
"totpMissingCode":"Please enter the code supplied by your TOTP application",
|
||||
"totpQrCode":"Scan this QR code in your TOTP application",
|
||||
"totpRegisterCode":"Input the code provided by your application",
|
||||
"totpRegisterName":"Choose a name for this TOTP device",
|
||||
"totpSecretKey":"If your TOTP application does not support QR codes, enter the following key instead:",
|
||||
"touchU2fDevice":"Adesso tocca il dispositivo U2F lampeggiante.",
|
||||
"touchU2fDeviceOrEnterTotp":"Tocca il dispositivo U2F lampeggiante o inserisci il codice TOTP.",
|
||||
"type":"Tipo",
|
||||
|
@ -333,4 +336,4 @@
|
|||
"yourProfile":"Know your profile",
|
||||
"yourTotpKey":"La tua chiave TOTP",
|
||||
"yubikey2f":"Yubikey"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -126,7 +126,6 @@
|
|||
"cancel":"Cancel",
|
||||
"captcha":"Captcha",
|
||||
"certificateReset":"Reset my certificate",
|
||||
"changeKey":"Generate new key",
|
||||
"changePwd":"Change your password",
|
||||
"checkDevOps":"Check DevOps handler file",
|
||||
"checkLastLogins":"Check my last logins",
|
||||
|
@ -169,7 +168,6 @@
|
|||
"expired2Fremoved":"%s expired 2F devices have been removed!",
|
||||
"explorer":"Explorer",
|
||||
"ext2f":"Verification code",
|
||||
"fillTheForm":"Fill the form",
|
||||
"firstName":"First name",
|
||||
"forbidden":"Access FORBIDDEN",
|
||||
"forgotPwd":"Forgot your password?",
|
||||
|
@ -293,7 +291,12 @@
|
|||
"submit":"Submit",
|
||||
"switchContext":"Switch context",
|
||||
"totp2f":"OTP App",
|
||||
"totpExistingKey":"A TOTP secret already exists",
|
||||
"totpExistingKey":"A TOTP device is already registered, you must remove it before adding a new TOTP device",
|
||||
"totpMissingCode":"Please enter the code supplied by your TOTP application",
|
||||
"totpQrCode":"Scan this QR code in your TOTP application",
|
||||
"totpRegisterCode":"Input the code provided by your application",
|
||||
"totpRegisterName":"Choose a name for this TOTP device",
|
||||
"totpSecretKey":"If your TOTP application does not support QR codes, enter the following key instead:",
|
||||
"touchU2fDevice":"Please touch the flashing U2F device now.",
|
||||
"touchU2fDeviceOrEnterTotp":"Please touch the flashing U2F device or enter TOTP code.",
|
||||
"type":"Type",
|
||||
|
@ -333,4 +336,4 @@
|
|||
"yourProfile":"Know your profile",
|
||||
"yourTotpKey":"Your TOTP key",
|
||||
"yubikey2f":"Yubikey"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -126,7 +126,6 @@
|
|||
"cancel":"Anuluj",
|
||||
"captcha":"Captcha",
|
||||
"certificateReset":"Zresetuj mój certyfikat",
|
||||
"changeKey":"Wygeneruj nowy klucz",
|
||||
"changePwd":"Zmień swoje hasło",
|
||||
"checkDevOps":"Check DevOps handler file",
|
||||
"checkLastLogins":"Sprawdź moje ostatnie logowania",
|
||||
|
@ -169,7 +168,6 @@
|
|||
"expired2Fremoved":"%s przeterminowane urządzenia 2F zostały usunięte!",
|
||||
"explorer":"Eksplorator",
|
||||
"ext2f":"Kod weryfikacyjny",
|
||||
"fillTheForm":"Wypełnij formularz",
|
||||
"firstName":"Imię",
|
||||
"forbidden":"Dostęp ZABRONIONY",
|
||||
"forgotPwd":"Zapomniałeś hasła?",
|
||||
|
@ -294,6 +292,11 @@
|
|||
"switchContext":"Przełącz kontekst",
|
||||
"totp2f":"Aplikacja OTP",
|
||||
"totpExistingKey":"Sekret TOTP już istnieje",
|
||||
"totpMissingCode":"Please enter the code supplied by your TOTP application",
|
||||
"totpQrCode":"Scan this QR code in your TOTP application",
|
||||
"totpRegisterCode":"Input the code provided by your application",
|
||||
"totpRegisterName":"Choose a name for this TOTP device",
|
||||
"totpSecretKey":"If your TOTP application does not support QR codes, enter the following key instead:",
|
||||
"touchU2fDevice":"Dotknij teraz migającego urządzenia U2F.",
|
||||
"touchU2fDeviceOrEnterTotp":"Dotknij migającego urządzenia U2F lub wprowadź kod TOTP.",
|
||||
"type":"Rodzaj",
|
||||
|
@ -333,4 +336,4 @@
|
|||
"yourProfile":"Twój profil",
|
||||
"yourTotpKey":"Twój klucz TOTP",
|
||||
"yubikey2f":"Yubikey"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -126,7 +126,6 @@
|
|||
"cancel":"Cancel",
|
||||
"captcha":"Captcha",
|
||||
"certificateReset":"Reset my certificate",
|
||||
"changeKey":"Generate new key",
|
||||
"changePwd":"Change your password",
|
||||
"checkDevOps":"Check DevOps handler file",
|
||||
"checkLastLogins":"Check my last logins",
|
||||
|
@ -169,7 +168,6 @@
|
|||
"expired2Fremoved":"%s expired 2F devices have been removed!",
|
||||
"explorer":"Explorer",
|
||||
"ext2f":"Verification code",
|
||||
"fillTheForm":"Fill the form",
|
||||
"firstName":"First name",
|
||||
"forbidden":"Access FORBIDDEN",
|
||||
"forgotPwd":"Forgot your password?",
|
||||
|
@ -293,7 +291,12 @@
|
|||
"submit":"Submit",
|
||||
"switchContext":"Switch context",
|
||||
"totp2f":"OTP App",
|
||||
"totpExistingKey":"A TOTP secret already exists",
|
||||
"totpExistingKey":"A TOTP device is already registered, you must remove it before adding a new TOTP device",
|
||||
"totpMissingCode":"Please enter the code supplied by your TOTP application",
|
||||
"totpQrCode":"Scan this QR code in your TOTP application",
|
||||
"totpRegisterCode":"Input the code provided by your application",
|
||||
"totpRegisterName":"Choose a name for this TOTP device",
|
||||
"totpSecretKey":"If your TOTP application does not support QR codes, enter the following key instead:",
|
||||
"touchU2fDevice":"Please touch the flashing U2F device now.",
|
||||
"touchU2fDeviceOrEnterTotp":"Please touch the flashing U2F device or enter TOTP code.",
|
||||
"type":"Type",
|
||||
|
@ -333,4 +336,4 @@
|
|||
"yourProfile":"Know your profile",
|
||||
"yourTotpKey":"Your TOTP key",
|
||||
"yubikey2f":"Yubikey"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -126,7 +126,6 @@
|
|||
"cancel":"Cancel",
|
||||
"captcha":"Captcha",
|
||||
"certificateReset":"Reset my certificate",
|
||||
"changeKey":"Generate new key",
|
||||
"changePwd":"Change your password",
|
||||
"checkDevOps":"Check DevOps handler file",
|
||||
"checkLastLogins":"Check my last logins",
|
||||
|
@ -169,7 +168,6 @@
|
|||
"expired2Fremoved":"%s expired 2F devices have been removed!",
|
||||
"explorer":"Explorer",
|
||||
"ext2f":"Verification code",
|
||||
"fillTheForm":"Fill the form",
|
||||
"firstName":"First name",
|
||||
"forbidden":"Access FORBIDDEN",
|
||||
"forgotPwd":"Forgot your password?",
|
||||
|
@ -293,7 +291,12 @@
|
|||
"submit":"Submit",
|
||||
"switchContext":"Switch context",
|
||||
"totp2f":"OTP App",
|
||||
"totpExistingKey":"A TOTP secret already exists",
|
||||
"totpExistingKey":"A TOTP device is already registered, you must remove it before adding a new TOTP device",
|
||||
"totpMissingCode":"Please enter the code supplied by your TOTP application",
|
||||
"totpQrCode":"Scan this QR code in your TOTP application",
|
||||
"totpRegisterCode":"Input the code provided by your application",
|
||||
"totpRegisterName":"Choose a name for this TOTP device",
|
||||
"totpSecretKey":"If your TOTP application does not support QR codes, enter the following key instead:",
|
||||
"touchU2fDevice":"Please touch the flashing U2F device now.",
|
||||
"touchU2fDeviceOrEnterTotp":"Please touch the flashing U2F device or enter TOTP code.",
|
||||
"type":"Type",
|
||||
|
@ -333,4 +336,4 @@
|
|||
"yourProfile":"Know your profile",
|
||||
"yourTotpKey":"Your TOTP key",
|
||||
"yubikey2f":"Yubikey"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -126,7 +126,6 @@
|
|||
"cancel":"İptal Et",
|
||||
"captcha":"Captcha",
|
||||
"certificateReset":"Sertifikamı sıfırla",
|
||||
"changeKey":"Yeni anahtar üret",
|
||||
"changePwd":"Parolanı değiştir",
|
||||
"checkDevOps":"DevOps eğitici dosyasını kontrol edin",
|
||||
"checkLastLogins":"Son girişlerimi kontrol et",
|
||||
|
@ -169,7 +168,6 @@
|
|||
"expired2Fremoved":"Kullanım süresi dolan %s2F cihazı kaldırıldı!",
|
||||
"explorer":"Explorer",
|
||||
"ext2f":"Doğrulama kodu",
|
||||
"fillTheForm":"Formu doldur",
|
||||
"firstName":"Ad",
|
||||
"forbidden":"Erişim YASAKLI",
|
||||
"forgotPwd":"Parolanızı mı unuttunuz?",
|
||||
|
@ -294,6 +292,11 @@
|
|||
"switchContext":"Bağlam değiştir",
|
||||
"totp2f":"OTP Uygulaması",
|
||||
"totpExistingKey":"Bir TOTP sırrı zaten mevcut",
|
||||
"totpMissingCode":"Please enter the code supplied by your TOTP application",
|
||||
"totpQrCode":"Scan this QR code in your TOTP application",
|
||||
"totpRegisterCode":"Input the code provided by your application",
|
||||
"totpRegisterName":"Choose a name for this TOTP device",
|
||||
"totpSecretKey":"If your TOTP application does not support QR codes, enter the following key instead:",
|
||||
"touchU2fDevice":"Lütfen şimdi yanıp sönen U2F cihazına dokunun.",
|
||||
"touchU2fDeviceOrEnterTotp":"Lütfen şimdi yanıp sönen U2F cihazına dokunun veya TOTP kodunu girin.",
|
||||
"type":"Tür",
|
||||
|
@ -333,4 +336,4 @@
|
|||
"yourProfile":"Profilini bil",
|
||||
"yourTotpKey":"TOTP anahtarınız",
|
||||
"yubikey2f":"Yubikey"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -126,7 +126,6 @@
|
|||
"cancel":"Hủy",
|
||||
"captcha":"Mã kiểm tra",
|
||||
"certificateReset":"Reset my certificate",
|
||||
"changeKey":"Generate new key",
|
||||
"changePwd":"Thay đổi mật khẩu của bạn",
|
||||
"checkDevOps":"Check DevOps handler file",
|
||||
"checkLastLogins":"Kiểm tra lần đăng nhập cuối cùng của bạn",
|
||||
|
@ -169,7 +168,6 @@
|
|||
"expired2Fremoved":"%s expired 2F devices have been removed!",
|
||||
"explorer":"Explorer",
|
||||
"ext2f":"Verification code",
|
||||
"fillTheForm":"Fill the form",
|
||||
"firstName":"Tên",
|
||||
"forbidden":"Access FORBIDDEN",
|
||||
"forgotPwd":"Quên mật khẩu của bạn?",
|
||||
|
@ -293,7 +291,12 @@
|
|||
"submit":"Gửi",
|
||||
"switchContext":"Switch context",
|
||||
"totp2f":"OTP App",
|
||||
"totpExistingKey":"A TOTP secret already exists",
|
||||
"totpExistingKey":"A TOTP device is already registered, you must remove it before adding a new TOTP device",
|
||||
"totpMissingCode":"Please enter the code supplied by your TOTP application",
|
||||
"totpQrCode":"Scan this QR code in your TOTP application",
|
||||
"totpRegisterCode":"Input the code provided by your application",
|
||||
"totpRegisterName":"Choose a name for this TOTP device",
|
||||
"totpSecretKey":"If your TOTP application does not support QR codes, enter the following key instead:",
|
||||
"touchU2fDevice":"Vui lòng chạm vào thiết bị U2F nhấp nháy ngay bây giờ.",
|
||||
"touchU2fDeviceOrEnterTotp":"Please touch the flashing U2F device or enter TOTP code.",
|
||||
"type":"Loại",
|
||||
|
@ -333,4 +336,4 @@
|
|||
"yourProfile":"Know your profile",
|
||||
"yourTotpKey":"Your TOTP key",
|
||||
"yubikey2f":"Yubikey"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -126,7 +126,6 @@
|
|||
"cancel":"取消",
|
||||
"captcha":"验证码",
|
||||
"certificateReset":"Reset my certificate",
|
||||
"changeKey":"Generate new key",
|
||||
"changePwd":"修改您的密码",
|
||||
"checkDevOps":"Check DevOps handler file",
|
||||
"checkLastLogins":"Check my last logins",
|
||||
|
@ -169,7 +168,6 @@
|
|||
"expired2Fremoved":"%s expired 2F devices have been removed!",
|
||||
"explorer":"Explorer",
|
||||
"ext2f":"Verification code",
|
||||
"fillTheForm":"Fill the form",
|
||||
"firstName":"名",
|
||||
"forbidden":"Access FORBIDDEN",
|
||||
"forgotPwd":"忘记密码?",
|
||||
|
@ -293,7 +291,12 @@
|
|||
"submit":"提交",
|
||||
"switchContext":"Switch context",
|
||||
"totp2f":"OTP App",
|
||||
"totpExistingKey":"A TOTP secret already exists",
|
||||
"totpExistingKey":"A TOTP device is already registered, you must remove it before adding a new TOTP device",
|
||||
"totpMissingCode":"Please enter the code supplied by your TOTP application",
|
||||
"totpQrCode":"Scan this QR code in your TOTP application",
|
||||
"totpRegisterCode":"Input the code provided by your application",
|
||||
"totpRegisterName":"Choose a name for this TOTP device",
|
||||
"totpSecretKey":"If your TOTP application does not support QR codes, enter the following key instead:",
|
||||
"touchU2fDevice":"Please touch the flashing U2F device now.",
|
||||
"touchU2fDeviceOrEnterTotp":"Please touch the flashing U2F device or enter TOTP code.",
|
||||
"type":"Type",
|
||||
|
@ -333,4 +336,4 @@
|
|||
"yourProfile":"Know your profile",
|
||||
"yourTotpKey":"Your TOTP key",
|
||||
"yubikey2f":"Yubikey"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -126,7 +126,6 @@
|
|||
"cancel":"取消",
|
||||
"captcha":"驗證碼",
|
||||
"certificateReset":"重設我們的憑證",
|
||||
"changeKey":"生成新的金鑰",
|
||||
"changePwd":"變更您的密碼",
|
||||
"checkDevOps":"Check DevOps handler file",
|
||||
"checkLastLogins":"檢查我的上次登入",
|
||||
|
@ -169,7 +168,6 @@
|
|||
"expired2Fremoved":"%s 個過期的雙因素驗證已被移除!",
|
||||
"explorer":"探索者",
|
||||
"ext2f":"驗證代碼",
|
||||
"fillTheForm":"填表單",
|
||||
"firstName":"名",
|
||||
"forbidden":"禁止存取",
|
||||
"forgotPwd":"忘記您的密碼?",
|
||||
|
@ -294,6 +292,11 @@
|
|||
"switchContext":"切換內容",
|
||||
"totp2f":"OTP 應用程式",
|
||||
"totpExistingKey":"TOTP 祕密已存在",
|
||||
"totpMissingCode":"Please enter the code supplied by your TOTP application",
|
||||
"totpQrCode":"Scan this QR code in your TOTP application",
|
||||
"totpRegisterCode":"Input the code provided by your application",
|
||||
"totpRegisterName":"Choose a name for this TOTP device",
|
||||
"totpSecretKey":"If your TOTP application does not support QR codes, enter the following key instead:",
|
||||
"touchU2fDevice":"請立刻碰觸閃爍中的 U2F 裝置。",
|
||||
"touchU2fDeviceOrEnterTotp":"請立刻碰觸閃爍中的 U2F 裝置或輸入 TOTP 代碼。",
|
||||
"type":"類型",
|
||||
|
@ -333,4 +336,4 @@
|
|||
"yourProfile":"知道您的個人檔案",
|
||||
"yourTotpKey":"您的 TOTP 金鑰",
|
||||
"yubikey2f":"Yubikey"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,34 +4,33 @@
|
|||
|
||||
<div id="color" class="message message-<TMPL_VAR NAME="ALERT"> alert"><span id="msg" trspan="<TMPL_VAR NAME="MSG">"></span></div>
|
||||
|
||||
<div class="card">
|
||||
<div id="divToHide" class="card">
|
||||
<div class="card-body">
|
||||
|
||||
<div class="row">
|
||||
<div id="divToHide" class="col-md-6 text-center">
|
||||
<div class="col-md-6 text-center">
|
||||
<div >
|
||||
<p>① <span trspan="totpQrCode"></span></p>
|
||||
<canvas id="qr"></canvas>
|
||||
<pre id="serialized"></pre>
|
||||
|
||||
<p><span trspan="totpSecretKey"></span></p>
|
||||
<tt id="secret"></tt>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
<div class="form-group">
|
||||
<label for="TOTPName"><span trspan="name">Name</span></label>
|
||||
<label for="TOTPName">② <span trspan="totpRegisterName">Name</span></label>
|
||||
<input type="text" class="form-control" id="TOTPName" name="TOTPName" value="MyTOTP" trplaceholder="name" />
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="code"><span trspan="code">Code</span></label>
|
||||
<input id="code" class="form-control" name="code" type="number" autocomplete="off" />
|
||||
<label for="code">③ <span trspan="totpRegisterCode">Code</span></label>
|
||||
<input id="code" class="form-control" name="code" autocomplete="off" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="buttons">
|
||||
<span id="changekey" class="btn btn-info" role="button">
|
||||
<span class="fa fa-refresh"></span>
|
||||
<span trspan="changeKey">Change key</span>
|
||||
</span>
|
||||
<span id="verify" class="btn btn-success" role="button">
|
||||
<span class="fa fa-floppy-o"></span>
|
||||
<span trspan="register">Register</span>
|
||||
|
|
Loading…
Reference in New Issue
Block a user