Merge branch 'fix-totp-options-2541' into v2.0

This commit is contained in:
Maxime Besson 2021-06-25 13:55:53 +02:00
commit 316c734bbc
50 changed files with 164 additions and 171 deletions

View File

@ -574,7 +574,6 @@ tokenUseGlobalStorage Enable global token stor
totp2fActivation TOTP activation ✔ totp2fActivation TOTP activation ✔
totp2fAuthnLevel Authentication level for users authentified by password+TOTP ✔ totp2fAuthnLevel Authentication level for users authentified by password+TOTP ✔
totp2fDigits Number of digits for TOTP code ✔ totp2fDigits Number of digits for TOTP code ✔
totp2fDisplayExistingSecret Display existing TOTP secret in registration form ✔
totp2fInterval TOTP interval ✔ totp2fInterval TOTP interval ✔
totp2fIssuer TOTP Issuer ✔ totp2fIssuer TOTP Issuer ✔
totp2fLabel Portal label for TOTP 2F ✔ totp2fLabel Portal label for TOTP 2F ✔
@ -582,7 +581,6 @@ totp2fLogo Custom logo for TOTP 2F
totp2fRange TOTP range (number of interval to test) ✔ totp2fRange TOTP range (number of interval to test) ✔
totp2fSelfRegistration TOTP self registration activation ✔ totp2fSelfRegistration TOTP self registration activation ✔
totp2fTTL TOTP device time to live ✔ totp2fTTL TOTP device time to live ✔
totp2fUserCanChangeKey Authorize users to change existing TOTP secret ✔
totp2fUserCanRemoveKey Authorize users to remove existing TOTP secret ✔ totp2fUserCanRemoveKey Authorize users to remove existing TOTP secret ✔
trustedDomains Trusted domains ✔ trustedDomains Trusted domains ✔
twitterAppName ✔ twitterAppName ✔

View File

@ -52,10 +52,6 @@ In the manager (advanced parameters), you just have to enable it:
- **Interval**: interval for TOTP algorithm (default: 30) - **Interval**: interval for TOTP algorithm (default: 30)
- **Range**: number of additional intervals to test (default: 1) - **Range**: number of additional intervals to test (default: 1)
- **Digits**: number of digit by codes (default: 6) - **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 - **Allow users to remove TOTP**: If enabled, users can unregister
TOTP. TOTP.
- **Lifetime**: Unlimited by default. Set a Time To Live in seconds. - **Lifetime**: Unlimited by default. Set a Time To Live in seconds.

View File

@ -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. 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 2.0.11
------ ------

View File

@ -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 $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 $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' ); our @sessionTypes = ( 'remoteGlobal', 'global', 'localSession', 'persistent', 'saml', 'oidc', 'cas' );

View File

@ -4158,10 +4158,6 @@ qr/^(?:(?:(?:(?:(?:(?:[a-zA-Z0-9][-a-zA-Z0-9]*)?[a-zA-Z0-9])[.])*(?:[a-zA-Z][-a-
'default' => 6, 'default' => 6,
'type' => 'int' 'type' => 'int'
}, },
'totp2fDisplayExistingSecret' => {
'default' => 0,
'type' => 'bool'
},
'totp2fInterval' => { 'totp2fInterval' => {
'default' => 30, 'default' => 30,
'type' => 'int' 'type' => 'int'
@ -4186,10 +4182,6 @@ qr/^(?:(?:(?:(?:(?:(?:[a-zA-Z0-9][-a-zA-Z0-9]*)?[a-zA-Z0-9])[.])*(?:[a-zA-Z][-a-
'totp2fTTL' => { 'totp2fTTL' => {
'type' => 'int' 'type' => 'int'
}, },
'totp2fUserCanChangeKey' => {
'default' => 0,
'type' => 'bool'
},
'totp2fUserCanRemoveKey' => { 'totp2fUserCanRemoveKey' => {
'default' => 1, 'default' => 1,
'type' => 'bool' 'type' => 'bool'

View File

@ -1873,17 +1873,6 @@ sub attributes {
default => 6, default => 6,
documentation => 'Number of digits for TOTP code', 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 => { totp2fUserCanRemoveKey => {
type => 'bool', type => 'bool',
default => 1, default => 1,

View File

@ -880,12 +880,10 @@ sub tree {
'totp2fActivation', 'totp2fActivation',
'totp2fSelfRegistration', 'totp2fSelfRegistration',
'totp2fUserCanRemoveKey', 'totp2fUserCanRemoveKey',
'totp2fUserCanChangeKey',
'totp2fIssuer', 'totp2fIssuer',
'totp2fInterval', 'totp2fInterval',
'totp2fRange', 'totp2fRange',
'totp2fDigits', 'totp2fDigits',
'totp2fDisplayExistingSecret',
'totp2fTTL', 'totp2fTTL',
'totp2fAuthnLevel', 'totp2fAuthnLevel',
'totp2fLabel', 'totp2fLabel',

View File

@ -1108,7 +1108,6 @@
"totp2fActivation":"تفعيل", "totp2fActivation":"تفعيل",
"totp2fAuthnLevel":"TOTP authentication level", "totp2fAuthnLevel":"TOTP authentication level",
"totp2fDigits":"Number of digits", "totp2fDigits":"Number of digits",
"totp2fDisplayExistingSecret":"Display existing secret",
"totp2fInterval":"Interval", "totp2fInterval":"Interval",
"totp2fIssuer":"TOTP Issuer name", "totp2fIssuer":"TOTP Issuer name",
"totp2fLabel":"Label", "totp2fLabel":"Label",
@ -1116,7 +1115,6 @@
"totp2fRange":"Range of attempts", "totp2fRange":"Range of attempts",
"totp2fSelfRegistration":"التسجيل الذاتي", "totp2fSelfRegistration":"التسجيل الذاتي",
"totp2fTTL":"Lifetime", "totp2fTTL":"Lifetime",
"totp2fUserCanChangeKey":"Change existing secret",
"totp2fUserCanRemoveKey":"Allow user to remove TOTP", "totp2fUserCanRemoveKey":"Allow user to remove TOTP",
"trustedDomains":"النطاقات الموثوق بها", "trustedDomains":"النطاقات الموثوق بها",
"trustedProxies":"عناوين الآي بي البروكسي الموثوق بها", "trustedProxies":"عناوين الآي بي البروكسي الموثوق بها",

View File

@ -1108,7 +1108,6 @@
"totp2fActivation":"Activation", "totp2fActivation":"Activation",
"totp2fAuthnLevel":"TOTP authentication level", "totp2fAuthnLevel":"TOTP authentication level",
"totp2fDigits":"Number of digits", "totp2fDigits":"Number of digits",
"totp2fDisplayExistingSecret":"Display existing secret",
"totp2fInterval":"Interval", "totp2fInterval":"Interval",
"totp2fIssuer":"TOTP Issuer name", "totp2fIssuer":"TOTP Issuer name",
"totp2fLabel":"Label", "totp2fLabel":"Label",
@ -1116,7 +1115,6 @@
"totp2fRange":"Range of attempts", "totp2fRange":"Range of attempts",
"totp2fSelfRegistration":"Self registration", "totp2fSelfRegistration":"Self registration",
"totp2fTTL":"Lifetime", "totp2fTTL":"Lifetime",
"totp2fUserCanChangeKey":"Change existing secret",
"totp2fUserCanRemoveKey":"Allow user to remove TOTP", "totp2fUserCanRemoveKey":"Allow user to remove TOTP",
"trustedDomains":"Trusted domains", "trustedDomains":"Trusted domains",
"trustedProxies":"Trusted proxies IP", "trustedProxies":"Trusted proxies IP",

View File

@ -1108,7 +1108,6 @@
"totp2fActivation":"Activation", "totp2fActivation":"Activation",
"totp2fAuthnLevel":"TOTP authentication level", "totp2fAuthnLevel":"TOTP authentication level",
"totp2fDigits":"Number of digits", "totp2fDigits":"Number of digits",
"totp2fDisplayExistingSecret":"Display existing secret",
"totp2fInterval":"Interval", "totp2fInterval":"Interval",
"totp2fIssuer":"TOTP Issuer name", "totp2fIssuer":"TOTP Issuer name",
"totp2fLabel":"Label", "totp2fLabel":"Label",
@ -1116,7 +1115,6 @@
"totp2fRange":"Range of attempts", "totp2fRange":"Range of attempts",
"totp2fSelfRegistration":"Self registration", "totp2fSelfRegistration":"Self registration",
"totp2fTTL":"Lifetime", "totp2fTTL":"Lifetime",
"totp2fUserCanChangeKey":"Change existing secret",
"totp2fUserCanRemoveKey":"Allow user to remove TOTP", "totp2fUserCanRemoveKey":"Allow user to remove TOTP",
"trustedDomains":"Trusted domains", "trustedDomains":"Trusted domains",
"trustedProxies":"Trusted proxies IP", "trustedProxies":"Trusted proxies IP",

View File

@ -1108,7 +1108,6 @@
"totp2fActivation":"Activación", "totp2fActivation":"Activación",
"totp2fAuthnLevel":"Nivel de autentificación TOTP", "totp2fAuthnLevel":"Nivel de autentificación TOTP",
"totp2fDigits":"Cantidad de dígitos", "totp2fDigits":"Cantidad de dígitos",
"totp2fDisplayExistingSecret":"Mostrar secreto existente",
"totp2fInterval":"Intervalo", "totp2fInterval":"Intervalo",
"totp2fIssuer":"Nombre de emisor TOTP", "totp2fIssuer":"Nombre de emisor TOTP",
"totp2fLabel":"Etiqueta", "totp2fLabel":"Etiqueta",
@ -1116,7 +1115,6 @@
"totp2fRange":"Rango de intentos", "totp2fRange":"Rango de intentos",
"totp2fSelfRegistration":"Autoregistro", "totp2fSelfRegistration":"Autoregistro",
"totp2fTTL":"Tiempo de vida", "totp2fTTL":"Tiempo de vida",
"totp2fUserCanChangeKey":"Cambiar secreto existente",
"totp2fUserCanRemoveKey":"Permitir al usuario eliminación de TOTP", "totp2fUserCanRemoveKey":"Permitir al usuario eliminación de TOTP",
"trustedDomains":"Dominios de confianza", "trustedDomains":"Dominios de confianza",
"trustedProxies":"IP de proxies de confianza", "trustedProxies":"IP de proxies de confianza",

View File

@ -1108,7 +1108,6 @@
"totp2fActivation":"Activation", "totp2fActivation":"Activation",
"totp2fAuthnLevel":"Niveau d'authentification TOTP", "totp2fAuthnLevel":"Niveau d'authentification TOTP",
"totp2fDigits":"Nombre de chiffres", "totp2fDigits":"Nombre de chiffres",
"totp2fDisplayExistingSecret":"Afficher la clef existante",
"totp2fInterval":"Intervalle", "totp2fInterval":"Intervalle",
"totp2fIssuer":"Nom du fournisseur TOTP", "totp2fIssuer":"Nom du fournisseur TOTP",
"totp2fLabel":"Label", "totp2fLabel":"Label",
@ -1116,7 +1115,6 @@
"totp2fRange":"Nombre d'intervalles à tester", "totp2fRange":"Nombre d'intervalles à tester",
"totp2fSelfRegistration":"Auto-enregistrement", "totp2fSelfRegistration":"Auto-enregistrement",
"totp2fTTL":"Durée de vie", "totp2fTTL":"Durée de vie",
"totp2fUserCanChangeKey":"Changer une clef existante",
"totp2fUserCanRemoveKey":"Autoriser les utilisateurs à effacer leur TOTP", "totp2fUserCanRemoveKey":"Autoriser les utilisateurs à effacer leur TOTP",
"trustedDomains":"Domaines approuvés", "trustedDomains":"Domaines approuvés",
"trustedProxies":"IP des proxys de confiance", "trustedProxies":"IP des proxys de confiance",

View File

@ -1108,7 +1108,6 @@
"totp2fActivation":"Attivazione", "totp2fActivation":"Attivazione",
"totp2fAuthnLevel":"Livello di autenticazione TOTP", "totp2fAuthnLevel":"Livello di autenticazione TOTP",
"totp2fDigits":"Numero di cifre", "totp2fDigits":"Numero di cifre",
"totp2fDisplayExistingSecret":"Mostra segreto esistente",
"totp2fInterval":"Intervallo", "totp2fInterval":"Intervallo",
"totp2fIssuer":"Nome dell'emittente TOTP", "totp2fIssuer":"Nome dell'emittente TOTP",
"totp2fLabel":"Label", "totp2fLabel":"Label",
@ -1116,7 +1115,6 @@
"totp2fRange":"Gamma di tentativi", "totp2fRange":"Gamma di tentativi",
"totp2fSelfRegistration":"Auto-registrazione", "totp2fSelfRegistration":"Auto-registrazione",
"totp2fTTL":"Lifetime", "totp2fTTL":"Lifetime",
"totp2fUserCanChangeKey":"Cambia segreto esistente",
"totp2fUserCanRemoveKey":"Autorizza l'utente a rimuovere TOTP", "totp2fUserCanRemoveKey":"Autorizza l'utente a rimuovere TOTP",
"trustedDomains":"Domini attendibili", "trustedDomains":"Domini attendibili",
"trustedProxies":"IP proxy attendibili", "trustedProxies":"IP proxy attendibili",

View File

@ -1108,7 +1108,6 @@
"totp2fActivation":"Aktywacja", "totp2fActivation":"Aktywacja",
"totp2fAuthnLevel":"Poziom uwierzytelnienia TOTP", "totp2fAuthnLevel":"Poziom uwierzytelnienia TOTP",
"totp2fDigits":"Ilość cyfr", "totp2fDigits":"Ilość cyfr",
"totp2fDisplayExistingSecret":"Pokaż istniejący sekret",
"totp2fInterval":"Interwał", "totp2fInterval":"Interwał",
"totp2fIssuer":"TOTP Nazwa wystawcy", "totp2fIssuer":"TOTP Nazwa wystawcy",
"totp2fLabel":"Etykieta", "totp2fLabel":"Etykieta",
@ -1116,7 +1115,6 @@
"totp2fRange":"Zakres prób", "totp2fRange":"Zakres prób",
"totp2fSelfRegistration":"Samodzielna rejestracja", "totp2fSelfRegistration":"Samodzielna rejestracja",
"totp2fTTL":"Dożywotni", "totp2fTTL":"Dożywotni",
"totp2fUserCanChangeKey":"Zmień istniejący sekret",
"totp2fUserCanRemoveKey":"Pozwól użytkownikowi usunąć TOTP", "totp2fUserCanRemoveKey":"Pozwól użytkownikowi usunąć TOTP",
"trustedDomains":"Zaufane domeny", "trustedDomains":"Zaufane domeny",
"trustedProxies":"Zaufane proxy IP", "trustedProxies":"Zaufane proxy IP",

View File

@ -1108,7 +1108,6 @@
"totp2fActivation":"Aktivasyon", "totp2fActivation":"Aktivasyon",
"totp2fAuthnLevel":"TOTP doğrulama seviyesi", "totp2fAuthnLevel":"TOTP doğrulama seviyesi",
"totp2fDigits":"Rakam sayısı", "totp2fDigits":"Rakam sayısı",
"totp2fDisplayExistingSecret":"Mevcut sırı görüntüle",
"totp2fInterval":"Süre aralığı", "totp2fInterval":"Süre aralığı",
"totp2fIssuer":"TOTP Düzenleyici adı", "totp2fIssuer":"TOTP Düzenleyici adı",
"totp2fLabel":"Etiket", "totp2fLabel":"Etiket",
@ -1116,7 +1115,6 @@
"totp2fRange":"Deneme sayısı", "totp2fRange":"Deneme sayısı",
"totp2fSelfRegistration":"Kendi kendine kayıt", "totp2fSelfRegistration":"Kendi kendine kayıt",
"totp2fTTL":"Ömür boyu", "totp2fTTL":"Ömür boyu",
"totp2fUserCanChangeKey":"Mevcut sırı değiştir",
"totp2fUserCanRemoveKey":"Kullanıcının TOTP'yi kaldırmasına izin ver", "totp2fUserCanRemoveKey":"Kullanıcının TOTP'yi kaldırmasına izin ver",
"trustedDomains":"Güvenilir etki alanları", "trustedDomains":"Güvenilir etki alanları",
"trustedProxies":"Güvenilir tünel IP'si", "trustedProxies":"Güvenilir tünel IP'si",

View File

@ -1108,7 +1108,6 @@
"totp2fActivation":"Kích hoạt", "totp2fActivation":"Kích hoạt",
"totp2fAuthnLevel":"TOTP authentication level", "totp2fAuthnLevel":"TOTP authentication level",
"totp2fDigits":"Number of digits", "totp2fDigits":"Number of digits",
"totp2fDisplayExistingSecret":"Display existing secret",
"totp2fInterval":"Interval", "totp2fInterval":"Interval",
"totp2fIssuer":"TOTP Issuer name", "totp2fIssuer":"TOTP Issuer name",
"totp2fLabel":"Label", "totp2fLabel":"Label",
@ -1116,7 +1115,6 @@
"totp2fRange":"Range of attempts", "totp2fRange":"Range of attempts",
"totp2fSelfRegistration":"Tự đăng ký", "totp2fSelfRegistration":"Tự đăng ký",
"totp2fTTL":"Lifetime", "totp2fTTL":"Lifetime",
"totp2fUserCanChangeKey":"Change existing secret",
"totp2fUserCanRemoveKey":"Allow user to remove TOTP", "totp2fUserCanRemoveKey":"Allow user to remove TOTP",
"trustedDomains":"Miền tin cậy", "trustedDomains":"Miền tin cậy",
"trustedProxies":"proxies IP tin cậy", "trustedProxies":"proxies IP tin cậy",

View File

@ -1108,7 +1108,6 @@
"totp2fActivation":"激活", "totp2fActivation":"激活",
"totp2fAuthnLevel":"TOTP authentication level", "totp2fAuthnLevel":"TOTP authentication level",
"totp2fDigits":"Number of digits", "totp2fDigits":"Number of digits",
"totp2fDisplayExistingSecret":"Display existing secret",
"totp2fInterval":"Interval", "totp2fInterval":"Interval",
"totp2fIssuer":"TOTP Issuer name", "totp2fIssuer":"TOTP Issuer name",
"totp2fLabel":"Label", "totp2fLabel":"Label",
@ -1116,7 +1115,6 @@
"totp2fRange":"Range of attempts", "totp2fRange":"Range of attempts",
"totp2fSelfRegistration":"Self registration", "totp2fSelfRegistration":"Self registration",
"totp2fTTL":"Lifetime", "totp2fTTL":"Lifetime",
"totp2fUserCanChangeKey":"Change existing secret",
"totp2fUserCanRemoveKey":"Allow user to remove TOTP", "totp2fUserCanRemoveKey":"Allow user to remove TOTP",
"trustedDomains":"Trusted domains", "trustedDomains":"Trusted domains",
"trustedProxies":"Trusted proxies IP", "trustedProxies":"Trusted proxies IP",

View File

@ -1108,7 +1108,6 @@
"totp2fActivation":"啟用", "totp2fActivation":"啟用",
"totp2fAuthnLevel":"TOTP 驗證等級", "totp2fAuthnLevel":"TOTP 驗證等級",
"totp2fDigits":"位數", "totp2fDigits":"位數",
"totp2fDisplayExistingSecret":"顯示既有的祕密",
"totp2fInterval":"間隔", "totp2fInterval":"間隔",
"totp2fIssuer":"TOTP 發行者名稱", "totp2fIssuer":"TOTP 發行者名稱",
"totp2fLabel":"標籤", "totp2fLabel":"標籤",
@ -1116,7 +1115,6 @@
"totp2fRange":"嘗試範圍", "totp2fRange":"嘗試範圍",
"totp2fSelfRegistration":"自行註冊", "totp2fSelfRegistration":"自行註冊",
"totp2fTTL":"終生", "totp2fTTL":"終生",
"totp2fUserCanChangeKey":"變更既有的祕密",
"totp2fUserCanRemoveKey":"允許使用者移除 TOTP", "totp2fUserCanRemoveKey":"允許使用者移除 TOTP",
"trustedDomains":"受信任的網域", "trustedDomains":"受信任的網域",
"trustedProxies":"受信任的代理伺服器 IP", "trustedProxies":"受信任的代理伺服器 IP",

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -2724,18 +2724,6 @@
"title" : "totp2fDigits", "title" : "totp2fDigits",
"type" : "int" "type" : "int"
}, },
{
"default" : 0,
"id" : "totp2fDisplayExistingSecret",
"title" : "totp2fDisplayExistingSecret",
"type" : "bool"
},
{
"default" : 0,
"id" : "totp2fUserCanChangeKey",
"title" : "totp2fUserCanChangeKey",
"type" : "bool"
},
{ {
"default" : 1, "default" : 1,
"id" : "totp2fUserCanRemoveKey", "id" : "totp2fUserCanRemoveKey",

View File

@ -36,8 +36,7 @@ sub init {
sub run { sub run {
my ( $self, $req, $action ) = @_; my ( $self, $req, $action ) = @_;
my $user = $req->userData->{ $self->conf->{whatToTrace} }; my $user = $req->userData->{ $self->conf->{whatToTrace} };
return $self->p->sendError( $req, return $self->p->sendError( $req, 'PE82', 400 )
'No ' . $self->conf->{whatToTrace} . ' found in user data', 500 )
unless $user; unless $user;
# Check if TOTP can be updated # Check if TOTP can be updated
@ -118,7 +117,7 @@ sub run {
}; };
if ($@) { if ($@) {
$self->logger->error("Corrupted session (_2fDevices): $@"); $self->logger->error("Corrupted session (_2fDevices): $@");
return $self->p->sendError( $req, "Corrupted session", 500 ); return $self->p->sendError( $req, "serverError", 500 );
} }
} }
else { else {
@ -139,7 +138,7 @@ sub run {
$self->logger->debug("Reading TOTP secret if exists..."); $self->logger->debug("Reading TOTP secret if exists...");
$secret = $_->{_secret} foreach (@totp2f); $secret = $_->{_secret} foreach (@totp2f);
return $self->p->sendError( $req, 'totpExistingKey', 200 ) return $self->p->sendError( $req, 'totpExistingKey', 200 )
if ( $token->{_totp2fSecret} eq $secret ); if $secret;
### USER CAN ONLY REGISTER ONE TOTP ### ### USER CAN ONLY REGISTER ONE TOTP ###
# Delete TOTP previously registered # Delete TOTP previously registered
@ -192,7 +191,7 @@ sub run {
}; };
if ($@) { if ($@) {
$self->logger->error("Corrupted session (_2fDevices): $@"); $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..."); $self->logger->debug("Reading TOTP secret if exists...");
$secret = $_->{_secret} foreach (@totp2f); $secret = $_->{_secret} foreach (@totp2f);
if ( ( $req->param('newkey') and $self->conf->{totp2fUserCanChangeKey} ) if ($secret) {
or not $secret ) return $self->p->sendError( $req, 'totpExistingKey', 200 );
{ }
else {
$secret = $self->newSecret; $secret = $self->newSecret;
$self->logger->debug("Generating new secret = $secret"); $self->logger->debug("Generating new secret = $secret");
$nk = 1; $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 # Secret is stored in a token: we choose to not accept secret returned
# by Ajax request to avoid some attacks # by Ajax request to avoid some attacks
my $token = $self->ott->createToken( { my $token = $self->ott->createToken( {
@ -283,7 +271,7 @@ sub run {
}; };
if ($@) { if ($@) {
$self->logger->error("Corrupted session (_2fDevices): $@"); $self->logger->error("Corrupted session (_2fDevices): $@");
return $self->p->sendError( $req, "Corrupted session", 500 ); return $self->p->sendError( $req, "serverError", 500 );
} }
} }
else { else {

View File

@ -3,6 +3,7 @@ LemonLDAP::NG 2F registration script
### ###
setMsg = (msg, level) -> setMsg = (msg, level) ->
$('#msg').attr 'trspan', msg
$('#msg').html window.translate msg $('#msg').html window.translate msg
$('#color').removeClass 'message-positive message-warning alert-success alert-warning' $('#color').removeClass 'message-positive message-warning alert-success alert-warning'
$('#color').addClass "message-#{level}" $('#color').addClass "message-#{level}"

View File

@ -3,6 +3,7 @@ LemonLDAP::NG TOTP registration script
### ###
setMsg = (msg, level) -> setMsg = (msg, level) ->
$('#msg').attr 'trspan', msg
$('#msg').html window.translate msg $('#msg').html window.translate msg
$('#color').removeClass 'message-positive message-warning message-danger alert-success alert-warning alert-danger' $('#color').removeClass 'message-positive message-warning message-danger alert-success alert-warning alert-danger'
$('#color').addClass "message-#{level}" $('#color').addClass "message-#{level}"
@ -19,14 +20,12 @@ displayError = (j, status, err) ->
token='' token=''
getKey = (reset) -> getKey = () ->
setMsg 'yourTotpKey', 'warning' setMsg 'yourTotpKey', 'warning'
$.ajax $.ajax
type: "POST", type: "POST",
url: "#{portal}/2fregisters/totp/getkey" url: "#{portal}/2fregisters/totp/getkey"
dataType: 'json' dataType: 'json'
data:
newkey: reset
error: displayError error: displayError
# Display key and QR code # Display key and QR code
success: (data) -> success: (data) ->
@ -50,7 +49,8 @@ getKey = (reset) ->
value: s value: s
size:150 size:150
# Display serialized key # 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) # Show message (warning level if key is new)
if data.newkey if data.newkey
setMsg 'yourNewTotpKey', 'warning' setMsg 'yourNewTotpKey', 'warning'
@ -61,7 +61,8 @@ getKey = (reset) ->
verify = -> verify = ->
val = $('#code').val() val = $('#code').val()
unless val unless val
setMsg 'fillTheForm', 'warning' setMsg 'totpMissingCode', 'warning'
$("#code").focus()
else else
$.ajax $.ajax
type: "POST", type: "POST",
@ -82,6 +83,5 @@ verify = ->
setMsg 'yourKeyIsRegistered', 'success' setMsg 'yourKeyIsRegistered', 'success'
$(document).ready -> $(document).ready ->
getKey(0) getKey()
$('#changekey').on 'click', () -> getKey(1)
$('#verify').on 'click', () -> verify() $('#verify').on 'click', () -> verify()

View File

@ -3,6 +3,7 @@ LemonLDAP::NG U2F registration script
### ###
setMsg = (msg, level) -> setMsg = (msg, level) ->
$('#msg').attr 'trspan', msg
$('#msg').html window.translate msg $('#msg').html window.translate msg
$('#color').removeClass 'message-positive message-warning message-danger alert-success alert-warning alert-danger' $('#color').removeClass 'message-positive message-warning message-danger alert-success alert-warning alert-danger'
$('#color').addClass "message-#{level}" $('#color').addClass "message-#{level}"

View File

@ -8,6 +8,7 @@ LemonLDAP::NG 2F registration script
var delete2F, displayError, setMsg; var delete2F, displayError, setMsg;
setMsg = function(msg, level) { setMsg = function(msg, level) {
$('#msg').attr('trspan', msg);
$('#msg').html(window.translate(msg)); $('#msg').html(window.translate(msg));
$('#color').removeClass('message-positive message-warning alert-success alert-warning'); $('#color').removeClass('message-positive message-warning alert-success alert-warning');
$('#color').addClass("message-" + level); $('#color').addClass("message-" + level);

View File

@ -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);

View File

@ -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"}

View File

@ -8,6 +8,7 @@ LemonLDAP::NG TOTP registration script
var displayError, getKey, setMsg, token, verify; var displayError, getKey, setMsg, token, verify;
setMsg = function(msg, level) { setMsg = function(msg, level) {
$('#msg').attr('trspan', msg);
$('#msg').html(window.translate(msg)); $('#msg').html(window.translate(msg));
$('#color').removeClass('message-positive message-warning message-danger alert-success alert-warning alert-danger'); $('#color').removeClass('message-positive message-warning message-danger alert-success alert-warning alert-danger');
$('#color').addClass("message-" + level); $('#color').addClass("message-" + level);
@ -30,18 +31,15 @@ LemonLDAP::NG TOTP registration script
token = ''; token = '';
getKey = function(reset) { getKey = function() {
setMsg('yourTotpKey', 'warning'); setMsg('yourTotpKey', 'warning');
return $.ajax({ return $.ajax({
type: "POST", type: "POST",
url: portal + "/2fregisters/totp/getkey", url: portal + "/2fregisters/totp/getkey",
dataType: 'json', dataType: 'json',
data: {
newkey: reset
},
error: displayError, error: displayError,
success: function(data) { success: function(data) {
var qr, s; var qr, s, secret;
if (data.error) { if (data.error) {
if (data.error.match(/totpExistingKey/)) { if (data.error.match(/totpExistingKey/)) {
$("#divToHide").hide(); $("#divToHide").hide();
@ -64,7 +62,8 @@ LemonLDAP::NG TOTP registration script
value: s, value: s,
size: 150 size: 150
}); });
$('#serialized').text(s); secret = data.secret || "";
$('#secret').text(secret.toUpperCase().replace(/(.{4})/g, '$1 ').trim());
if (data.newkey) { if (data.newkey) {
setMsg('yourNewTotpKey', 'warning'); setMsg('yourNewTotpKey', 'warning');
} else { } else {
@ -79,7 +78,8 @@ LemonLDAP::NG TOTP registration script
var val; var val;
val = $('#code').val(); val = $('#code').val();
if (!val) { if (!val) {
return setMsg('fillTheForm', 'warning'); setMsg('totpMissingCode', 'warning');
return $("#code").focus();
} else { } else {
return $.ajax({ return $.ajax({
type: "POST", type: "POST",
@ -107,10 +107,7 @@ LemonLDAP::NG TOTP registration script
}; };
$(document).ready(function() { $(document).ready(function() {
getKey(0); getKey();
$('#changekey').on('click', function() {
return getKey(1);
});
return $('#verify').on('click', function() { return $('#verify').on('click', function() {
return verify(); return verify();
}); });

View File

@ -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);

View File

@ -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"}

View File

@ -8,6 +8,7 @@ LemonLDAP::NG U2F registration script
var displayError, register, setMsg, verify; var displayError, register, setMsg, verify;
setMsg = function(msg, level) { setMsg = function(msg, level) {
$('#msg').attr('trspan', msg);
$('#msg').html(window.translate(msg)); $('#msg').html(window.translate(msg));
$('#color').removeClass('message-positive message-warning message-danger alert-success alert-warning alert-danger'); $('#color').removeClass('message-positive message-warning message-danger alert-success alert-warning alert-danger');
$('#color').addClass("message-" + level); $('#color').addClass("message-" + level);

View File

@ -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);

View File

@ -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"}

View File

@ -126,7 +126,6 @@
"cancel":"إلغاء", "cancel":"إلغاء",
"captcha":"كلمة التحقق أو الكابتشا ", "captcha":"كلمة التحقق أو الكابتشا ",
"certificateReset":"Reset my certificate", "certificateReset":"Reset my certificate",
"changeKey":"Generate new key",
"changePwd":"غير كلمة المرور الخاصة بك", "changePwd":"غير كلمة المرور الخاصة بك",
"checkDevOps":"Check DevOps handler file", "checkDevOps":"Check DevOps handler file",
"checkLastLogins":"تحقق من آخر تسجيلات دخول الخاصة بي", "checkLastLogins":"تحقق من آخر تسجيلات دخول الخاصة بي",
@ -169,7 +168,6 @@
"expired2Fremoved":"%s expired 2F devices have been removed!", "expired2Fremoved":"%s expired 2F devices have been removed!",
"explorer":"Explorer", "explorer":"Explorer",
"ext2f":"Verification code", "ext2f":"Verification code",
"fillTheForm":"Fill the form",
"firstName":"الاسم الاول", "firstName":"الاسم الاول",
"forbidden":"Access FORBIDDEN", "forbidden":"Access FORBIDDEN",
"forgotPwd":"نسيت كلمة المرور؟", "forgotPwd":"نسيت كلمة المرور؟",
@ -293,7 +291,12 @@
"submit":"قدم", "submit":"قدم",
"switchContext":"Switch context", "switchContext":"Switch context",
"totp2f":"OTP App", "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 وامض الآن.", "touchU2fDevice":"يرجى لمس جهاز U2F وامض الآن.",
"touchU2fDeviceOrEnterTotp":"Please touch the flashing U2F device or enter TOTP code.", "touchU2fDeviceOrEnterTotp":"Please touch the flashing U2F device or enter TOTP code.",
"type":"نوع", "type":"نوع",
@ -333,4 +336,4 @@
"yourProfile":"Know your profile", "yourProfile":"Know your profile",
"yourTotpKey":"Your TOTP key", "yourTotpKey":"Your TOTP key",
"yubikey2f":"Yubikey" "yubikey2f":"Yubikey"
} }

View File

@ -126,7 +126,6 @@
"cancel":"Abbrechen", "cancel":"Abbrechen",
"captcha":"Captcha", "captcha":"Captcha",
"certificateReset":"Reset my certificate", "certificateReset":"Reset my certificate",
"changeKey":"Neuen Schlüssel erzeugen",
"changePwd":"Ändere dein Passwort", "changePwd":"Ändere dein Passwort",
"checkDevOps":"Check DevOps handler file", "checkDevOps":"Check DevOps handler file",
"checkLastLogins":"Überprüfe meine letzten Logins", "checkLastLogins":"Überprüfe meine letzten Logins",
@ -169,7 +168,6 @@
"expired2Fremoved":"%s expired 2F devices have been removed!", "expired2Fremoved":"%s expired 2F devices have been removed!",
"explorer":"Explorer", "explorer":"Explorer",
"ext2f":"Verification code", "ext2f":"Verification code",
"fillTheForm":"Fülle das Formular aus",
"firstName":"Vorname", "firstName":"Vorname",
"forbidden":"Access FORBIDDEN", "forbidden":"Access FORBIDDEN",
"forgotPwd":"Passwort vergessen ?", "forgotPwd":"Passwort vergessen ?",
@ -294,6 +292,11 @@
"switchContext":"Switch context", "switchContext":"Switch context",
"totp2f":"OTP App", "totp2f":"OTP App",
"totpExistingKey":"Es existiert bereits ein TOTP-Secret", "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.", "touchU2fDevice":"Please touch the flashing U2F device now.",
"touchU2fDeviceOrEnterTotp":"Please touch the flashing U2F device or enter TOTP code.", "touchU2fDeviceOrEnterTotp":"Please touch the flashing U2F device or enter TOTP code.",
"type":"Type", "type":"Type",
@ -333,4 +336,4 @@
"yourProfile":"Know your profile", "yourProfile":"Know your profile",
"yourTotpKey":"Your TOTP key", "yourTotpKey":"Your TOTP key",
"yubikey2f":"Yubikey" "yubikey2f":"Yubikey"
} }

View File

@ -126,7 +126,6 @@
"cancel":"Cancel", "cancel":"Cancel",
"captcha":"Captcha", "captcha":"Captcha",
"certificateReset":"Reset my certificate", "certificateReset":"Reset my certificate",
"changeKey":"Generate new key",
"changePwd":"Change your password", "changePwd":"Change your password",
"checkDevOps":"Check DevOps handler file", "checkDevOps":"Check DevOps handler file",
"checkLastLogins":"Check my last logins", "checkLastLogins":"Check my last logins",
@ -169,7 +168,6 @@
"expired2Fremoved":"%s expired 2F devices have been removed!", "expired2Fremoved":"%s expired 2F devices have been removed!",
"explorer":"Explorer", "explorer":"Explorer",
"ext2f":"Verification code", "ext2f":"Verification code",
"fillTheForm":"Fill the form",
"firstName":"First name", "firstName":"First name",
"forbidden":"Access FORBIDDEN", "forbidden":"Access FORBIDDEN",
"forgotPwd":"Forgot your password?", "forgotPwd":"Forgot your password?",
@ -293,7 +291,12 @@
"submit":"Submit", "submit":"Submit",
"switchContext":"Switch context", "switchContext":"Switch context",
"totp2f":"OTP App", "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.", "touchU2fDevice":"Please touch the flashing U2F device now.",
"touchU2fDeviceOrEnterTotp":"Please touch the flashing U2F device or enter TOTP code.", "touchU2fDeviceOrEnterTotp":"Please touch the flashing U2F device or enter TOTP code.",
"type":"Type", "type":"Type",

View File

@ -126,7 +126,6 @@
"cancel":"Cancelar", "cancel":"Cancelar",
"captcha":"Captcha", "captcha":"Captcha",
"certificateReset":"Reiniciar mi certificado", "certificateReset":"Reiniciar mi certificado",
"changeKey":"Generar nueva llave",
"changePwd":"Cambie su contraseña", "changePwd":"Cambie su contraseña",
"checkDevOps":"Check DevOps handler file", "checkDevOps":"Check DevOps handler file",
"checkLastLogins":"Verificar mis últimos accesos", "checkLastLogins":"Verificar mis últimos accesos",
@ -169,7 +168,6 @@
"expired2Fremoved":"¡%s dispositivos 2F caducados han sido suprimidos!", "expired2Fremoved":"¡%s dispositivos 2F caducados han sido suprimidos!",
"explorer":"Explorer", "explorer":"Explorer",
"ext2f":"Código de verificación", "ext2f":"Código de verificación",
"fillTheForm":"Llene el formulario",
"firstName":"Nombre", "firstName":"Nombre",
"forbidden":"Acceso DENEGADO", "forbidden":"Acceso DENEGADO",
"forgotPwd":"Contraseña olvidada?", "forgotPwd":"Contraseña olvidada?",
@ -294,6 +292,11 @@
"switchContext":"Cambiar contexto", "switchContext":"Cambiar contexto",
"totp2f":"Aplicación OTP", "totp2f":"Aplicación OTP",
"totpExistingKey":"Un secreto TOTP ya existe", "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.", "touchU2fDevice":"Por favor toque el dispositivo U2F centelleante ahora.",
"touchU2fDeviceOrEnterTotp":"Por favor toque el dispositivo U2F centelleante o ingrese el código TOTP.", "touchU2fDeviceOrEnterTotp":"Por favor toque el dispositivo U2F centelleante o ingrese el código TOTP.",
"type":"Tipo", "type":"Tipo",
@ -333,4 +336,4 @@
"yourProfile":"Conozca su perfil", "yourProfile":"Conozca su perfil",
"yourTotpKey":"Su llave TOTP", "yourTotpKey":"Su llave TOTP",
"yubikey2f":"Yubikey" "yubikey2f":"Yubikey"
} }

View File

@ -126,7 +126,6 @@
"cancel":"Peruuta", "cancel":"Peruuta",
"captcha":"Captcha", "captcha":"Captcha",
"certificateReset":"Reset my certificate", "certificateReset":"Reset my certificate",
"changeKey":"Generate new key",
"changePwd":"Vaihda salasanasi", "changePwd":"Vaihda salasanasi",
"checkDevOps":"Check DevOps handler file", "checkDevOps":"Check DevOps handler file",
"checkLastLogins":"Tarkista viimeiset kirjautumiseni", "checkLastLogins":"Tarkista viimeiset kirjautumiseni",
@ -169,7 +168,6 @@
"expired2Fremoved":"%s expired 2F devices have been removed!", "expired2Fremoved":"%s expired 2F devices have been removed!",
"explorer":"Explorer", "explorer":"Explorer",
"ext2f":"Verification code", "ext2f":"Verification code",
"fillTheForm":"Fill the form",
"firstName":"Etunimi", "firstName":"Etunimi",
"forbidden":"Access FORBIDDEN", "forbidden":"Access FORBIDDEN",
"forgotPwd":"Unohditko salasanasi?", "forgotPwd":"Unohditko salasanasi?",
@ -293,7 +291,12 @@
"submit":"Lähetä", "submit":"Lähetä",
"switchContext":"Switch context", "switchContext":"Switch context",
"totp2f":"OTP App", "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.", "touchU2fDevice":"Please touch the flashing U2F device now.",
"touchU2fDeviceOrEnterTotp":"Please touch the flashing U2F device or enter TOTP code.", "touchU2fDeviceOrEnterTotp":"Please touch the flashing U2F device or enter TOTP code.",
"type":"Type", "type":"Type",
@ -333,4 +336,4 @@
"yourProfile":"Know your profile", "yourProfile":"Know your profile",
"yourTotpKey":"Your TOTP key", "yourTotpKey":"Your TOTP key",
"yubikey2f":"Yubikey" "yubikey2f":"Yubikey"
} }

View File

@ -126,7 +126,6 @@
"cancel":"Annuler", "cancel":"Annuler",
"captcha":"Captcha", "captcha":"Captcha",
"certificateReset":"Réinitialiser mon certificat", "certificateReset":"Réinitialiser mon certificat",
"changeKey":"Générer une nouvelle clef",
"changePwd":"Changez votre mot de passe", "changePwd":"Changez votre mot de passe",
"checkDevOps":"Vérifier un fichier DevOps", "checkDevOps":"Vérifier un fichier DevOps",
"checkLastLogins":"Voir mes dernières connexions", "checkLastLogins":"Voir mes dernières connexions",
@ -169,7 +168,6 @@
"expired2Fremoved":"%s seconds facteurs expirés ont été supprimés !", "expired2Fremoved":"%s seconds facteurs expirés ont été supprimés !",
"explorer":"Explorateur", "explorer":"Explorateur",
"ext2f":"Code de vérification", "ext2f":"Code de vérification",
"fillTheForm":"Remplissez le formulaire",
"firstName":"Prénom", "firstName":"Prénom",
"forbidden":"Accès INTERDIT", "forbidden":"Accès INTERDIT",
"forgotPwd":"Mot de passe oublié ?", "forgotPwd":"Mot de passe oublié ?",
@ -293,7 +291,12 @@
"submit":"Envoyer", "submit":"Envoyer",
"switchContext":"Changer de contexte", "switchContext":"Changer de contexte",
"totp2f":"Application OTP", "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", "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", "touchU2fDeviceOrEnterTotp":"Posez votre doigt sur le périphérique U2F ou entrez le code TOTP",
"type":"Type", "type":"Type",

View File

@ -126,7 +126,6 @@
"cancel":"Cancella", "cancel":"Cancella",
"captcha":"Captcha", "captcha":"Captcha",
"certificateReset":"Reset my certificate", "certificateReset":"Reset my certificate",
"changeKey":"Genera nuova chiave",
"changePwd":"Cambia la tua password", "changePwd":"Cambia la tua password",
"checkDevOps":"Check DevOps handler file", "checkDevOps":"Check DevOps handler file",
"checkLastLogins":"Controllare i miei ultimi accessi", "checkLastLogins":"Controllare i miei ultimi accessi",
@ -169,7 +168,6 @@
"expired2Fremoved":"%s expired 2F devices have been removed!", "expired2Fremoved":"%s expired 2F devices have been removed!",
"explorer":"Explorer", "explorer":"Explorer",
"ext2f":"Verification code", "ext2f":"Verification code",
"fillTheForm":"Compila il modulo",
"firstName":"Nome", "firstName":"Nome",
"forbidden":"Accesso VIETATO", "forbidden":"Accesso VIETATO",
"forgotPwd":"Password dimenticata?", "forgotPwd":"Password dimenticata?",
@ -294,6 +292,11 @@
"switchContext":"Switch context", "switchContext":"Switch context",
"totp2f":"OTP App", "totp2f":"OTP App",
"totpExistingKey":"Un segreto TOTP esiste già", "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.", "touchU2fDevice":"Adesso tocca il dispositivo U2F lampeggiante.",
"touchU2fDeviceOrEnterTotp":"Tocca il dispositivo U2F lampeggiante o inserisci il codice TOTP.", "touchU2fDeviceOrEnterTotp":"Tocca il dispositivo U2F lampeggiante o inserisci il codice TOTP.",
"type":"Tipo", "type":"Tipo",
@ -333,4 +336,4 @@
"yourProfile":"Know your profile", "yourProfile":"Know your profile",
"yourTotpKey":"La tua chiave TOTP", "yourTotpKey":"La tua chiave TOTP",
"yubikey2f":"Yubikey" "yubikey2f":"Yubikey"
} }

View File

@ -126,7 +126,6 @@
"cancel":"Cancel", "cancel":"Cancel",
"captcha":"Captcha", "captcha":"Captcha",
"certificateReset":"Reset my certificate", "certificateReset":"Reset my certificate",
"changeKey":"Generate new key",
"changePwd":"Change your password", "changePwd":"Change your password",
"checkDevOps":"Check DevOps handler file", "checkDevOps":"Check DevOps handler file",
"checkLastLogins":"Check my last logins", "checkLastLogins":"Check my last logins",
@ -169,7 +168,6 @@
"expired2Fremoved":"%s expired 2F devices have been removed!", "expired2Fremoved":"%s expired 2F devices have been removed!",
"explorer":"Explorer", "explorer":"Explorer",
"ext2f":"Verification code", "ext2f":"Verification code",
"fillTheForm":"Fill the form",
"firstName":"First name", "firstName":"First name",
"forbidden":"Access FORBIDDEN", "forbidden":"Access FORBIDDEN",
"forgotPwd":"Forgot your password?", "forgotPwd":"Forgot your password?",
@ -293,7 +291,12 @@
"submit":"Submit", "submit":"Submit",
"switchContext":"Switch context", "switchContext":"Switch context",
"totp2f":"OTP App", "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.", "touchU2fDevice":"Please touch the flashing U2F device now.",
"touchU2fDeviceOrEnterTotp":"Please touch the flashing U2F device or enter TOTP code.", "touchU2fDeviceOrEnterTotp":"Please touch the flashing U2F device or enter TOTP code.",
"type":"Type", "type":"Type",
@ -333,4 +336,4 @@
"yourProfile":"Know your profile", "yourProfile":"Know your profile",
"yourTotpKey":"Your TOTP key", "yourTotpKey":"Your TOTP key",
"yubikey2f":"Yubikey" "yubikey2f":"Yubikey"
} }

View File

@ -126,7 +126,6 @@
"cancel":"Anuluj", "cancel":"Anuluj",
"captcha":"Captcha", "captcha":"Captcha",
"certificateReset":"Zresetuj mój certyfikat", "certificateReset":"Zresetuj mój certyfikat",
"changeKey":"Wygeneruj nowy klucz",
"changePwd":"Zmień swoje hasło", "changePwd":"Zmień swoje hasło",
"checkDevOps":"Check DevOps handler file", "checkDevOps":"Check DevOps handler file",
"checkLastLogins":"Sprawdź moje ostatnie logowania", "checkLastLogins":"Sprawdź moje ostatnie logowania",
@ -169,7 +168,6 @@
"expired2Fremoved":"%s przeterminowane urządzenia 2F zostały usunięte!", "expired2Fremoved":"%s przeterminowane urządzenia 2F zostały usunięte!",
"explorer":"Eksplorator", "explorer":"Eksplorator",
"ext2f":"Kod weryfikacyjny", "ext2f":"Kod weryfikacyjny",
"fillTheForm":"Wypełnij formularz",
"firstName":"Imię", "firstName":"Imię",
"forbidden":"Dostęp ZABRONIONY", "forbidden":"Dostęp ZABRONIONY",
"forgotPwd":"Zapomniałeś hasła?", "forgotPwd":"Zapomniałeś hasła?",
@ -294,6 +292,11 @@
"switchContext":"Przełącz kontekst", "switchContext":"Przełącz kontekst",
"totp2f":"Aplikacja OTP", "totp2f":"Aplikacja OTP",
"totpExistingKey":"Sekret TOTP już istnieje", "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.", "touchU2fDevice":"Dotknij teraz migającego urządzenia U2F.",
"touchU2fDeviceOrEnterTotp":"Dotknij migającego urządzenia U2F lub wprowadź kod TOTP.", "touchU2fDeviceOrEnterTotp":"Dotknij migającego urządzenia U2F lub wprowadź kod TOTP.",
"type":"Rodzaj", "type":"Rodzaj",
@ -333,4 +336,4 @@
"yourProfile":"Twój profil", "yourProfile":"Twój profil",
"yourTotpKey":"Twój klucz TOTP", "yourTotpKey":"Twój klucz TOTP",
"yubikey2f":"Yubikey" "yubikey2f":"Yubikey"
} }

View File

@ -126,7 +126,6 @@
"cancel":"Cancel", "cancel":"Cancel",
"captcha":"Captcha", "captcha":"Captcha",
"certificateReset":"Reset my certificate", "certificateReset":"Reset my certificate",
"changeKey":"Generate new key",
"changePwd":"Change your password", "changePwd":"Change your password",
"checkDevOps":"Check DevOps handler file", "checkDevOps":"Check DevOps handler file",
"checkLastLogins":"Check my last logins", "checkLastLogins":"Check my last logins",
@ -169,7 +168,6 @@
"expired2Fremoved":"%s expired 2F devices have been removed!", "expired2Fremoved":"%s expired 2F devices have been removed!",
"explorer":"Explorer", "explorer":"Explorer",
"ext2f":"Verification code", "ext2f":"Verification code",
"fillTheForm":"Fill the form",
"firstName":"First name", "firstName":"First name",
"forbidden":"Access FORBIDDEN", "forbidden":"Access FORBIDDEN",
"forgotPwd":"Forgot your password?", "forgotPwd":"Forgot your password?",
@ -293,7 +291,12 @@
"submit":"Submit", "submit":"Submit",
"switchContext":"Switch context", "switchContext":"Switch context",
"totp2f":"OTP App", "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.", "touchU2fDevice":"Please touch the flashing U2F device now.",
"touchU2fDeviceOrEnterTotp":"Please touch the flashing U2F device or enter TOTP code.", "touchU2fDeviceOrEnterTotp":"Please touch the flashing U2F device or enter TOTP code.",
"type":"Type", "type":"Type",
@ -333,4 +336,4 @@
"yourProfile":"Know your profile", "yourProfile":"Know your profile",
"yourTotpKey":"Your TOTP key", "yourTotpKey":"Your TOTP key",
"yubikey2f":"Yubikey" "yubikey2f":"Yubikey"
} }

View File

@ -126,7 +126,6 @@
"cancel":"Cancel", "cancel":"Cancel",
"captcha":"Captcha", "captcha":"Captcha",
"certificateReset":"Reset my certificate", "certificateReset":"Reset my certificate",
"changeKey":"Generate new key",
"changePwd":"Change your password", "changePwd":"Change your password",
"checkDevOps":"Check DevOps handler file", "checkDevOps":"Check DevOps handler file",
"checkLastLogins":"Check my last logins", "checkLastLogins":"Check my last logins",
@ -169,7 +168,6 @@
"expired2Fremoved":"%s expired 2F devices have been removed!", "expired2Fremoved":"%s expired 2F devices have been removed!",
"explorer":"Explorer", "explorer":"Explorer",
"ext2f":"Verification code", "ext2f":"Verification code",
"fillTheForm":"Fill the form",
"firstName":"First name", "firstName":"First name",
"forbidden":"Access FORBIDDEN", "forbidden":"Access FORBIDDEN",
"forgotPwd":"Forgot your password?", "forgotPwd":"Forgot your password?",
@ -293,7 +291,12 @@
"submit":"Submit", "submit":"Submit",
"switchContext":"Switch context", "switchContext":"Switch context",
"totp2f":"OTP App", "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.", "touchU2fDevice":"Please touch the flashing U2F device now.",
"touchU2fDeviceOrEnterTotp":"Please touch the flashing U2F device or enter TOTP code.", "touchU2fDeviceOrEnterTotp":"Please touch the flashing U2F device or enter TOTP code.",
"type":"Type", "type":"Type",
@ -333,4 +336,4 @@
"yourProfile":"Know your profile", "yourProfile":"Know your profile",
"yourTotpKey":"Your TOTP key", "yourTotpKey":"Your TOTP key",
"yubikey2f":"Yubikey" "yubikey2f":"Yubikey"
} }

View File

@ -126,7 +126,6 @@
"cancel":"İptal Et", "cancel":"İptal Et",
"captcha":"Captcha", "captcha":"Captcha",
"certificateReset":"Sertifikamı sıfırla", "certificateReset":"Sertifikamı sıfırla",
"changeKey":"Yeni anahtar üret",
"changePwd":"Parolanı değiştir", "changePwd":"Parolanı değiştir",
"checkDevOps":"DevOps eğitici dosyasını kontrol edin", "checkDevOps":"DevOps eğitici dosyasını kontrol edin",
"checkLastLogins":"Son girişlerimi kontrol et", "checkLastLogins":"Son girişlerimi kontrol et",
@ -169,7 +168,6 @@
"expired2Fremoved":"Kullanım süresi dolan %s2F cihazı kaldırıldı!", "expired2Fremoved":"Kullanım süresi dolan %s2F cihazı kaldırıldı!",
"explorer":"Explorer", "explorer":"Explorer",
"ext2f":"Doğrulama kodu", "ext2f":"Doğrulama kodu",
"fillTheForm":"Formu doldur",
"firstName":"Ad", "firstName":"Ad",
"forbidden":"Erişim YASAKLI", "forbidden":"Erişim YASAKLI",
"forgotPwd":"Parolanızı mı unuttunuz?", "forgotPwd":"Parolanızı mı unuttunuz?",
@ -294,6 +292,11 @@
"switchContext":"Bağlam değiştir", "switchContext":"Bağlam değiştir",
"totp2f":"OTP Uygulaması", "totp2f":"OTP Uygulaması",
"totpExistingKey":"Bir TOTP sırrı zaten mevcut", "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.", "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.", "touchU2fDeviceOrEnterTotp":"Lütfen şimdi yanıp sönen U2F cihazına dokunun veya TOTP kodunu girin.",
"type":"Tür", "type":"Tür",
@ -333,4 +336,4 @@
"yourProfile":"Profilini bil", "yourProfile":"Profilini bil",
"yourTotpKey":"TOTP anahtarınız", "yourTotpKey":"TOTP anahtarınız",
"yubikey2f":"Yubikey" "yubikey2f":"Yubikey"
} }

View File

@ -126,7 +126,6 @@
"cancel":"Hủy", "cancel":"Hủy",
"captcha":"Mã kiểm tra", "captcha":"Mã kiểm tra",
"certificateReset":"Reset my certificate", "certificateReset":"Reset my certificate",
"changeKey":"Generate new key",
"changePwd":"Thay đổi mật khẩu của bạn", "changePwd":"Thay đổi mật khẩu của bạn",
"checkDevOps":"Check DevOps handler file", "checkDevOps":"Check DevOps handler file",
"checkLastLogins":"Kiểm tra lần đăng nhập cuối cùng của bạn", "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!", "expired2Fremoved":"%s expired 2F devices have been removed!",
"explorer":"Explorer", "explorer":"Explorer",
"ext2f":"Verification code", "ext2f":"Verification code",
"fillTheForm":"Fill the form",
"firstName":"Tên", "firstName":"Tên",
"forbidden":"Access FORBIDDEN", "forbidden":"Access FORBIDDEN",
"forgotPwd":"Quên mật khẩu của bạn?", "forgotPwd":"Quên mật khẩu của bạn?",
@ -293,7 +291,12 @@
"submit":"Gửi", "submit":"Gửi",
"switchContext":"Switch context", "switchContext":"Switch context",
"totp2f":"OTP App", "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ờ.", "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.", "touchU2fDeviceOrEnterTotp":"Please touch the flashing U2F device or enter TOTP code.",
"type":"Loại", "type":"Loại",
@ -333,4 +336,4 @@
"yourProfile":"Know your profile", "yourProfile":"Know your profile",
"yourTotpKey":"Your TOTP key", "yourTotpKey":"Your TOTP key",
"yubikey2f":"Yubikey" "yubikey2f":"Yubikey"
} }

View File

@ -126,7 +126,6 @@
"cancel":"取消", "cancel":"取消",
"captcha":"验证码", "captcha":"验证码",
"certificateReset":"Reset my certificate", "certificateReset":"Reset my certificate",
"changeKey":"Generate new key",
"changePwd":"修改您的密码", "changePwd":"修改您的密码",
"checkDevOps":"Check DevOps handler file", "checkDevOps":"Check DevOps handler file",
"checkLastLogins":"Check my last logins", "checkLastLogins":"Check my last logins",
@ -169,7 +168,6 @@
"expired2Fremoved":"%s expired 2F devices have been removed!", "expired2Fremoved":"%s expired 2F devices have been removed!",
"explorer":"Explorer", "explorer":"Explorer",
"ext2f":"Verification code", "ext2f":"Verification code",
"fillTheForm":"Fill the form",
"firstName":"名", "firstName":"名",
"forbidden":"Access FORBIDDEN", "forbidden":"Access FORBIDDEN",
"forgotPwd":"忘记密码?", "forgotPwd":"忘记密码?",
@ -293,7 +291,12 @@
"submit":"提交", "submit":"提交",
"switchContext":"Switch context", "switchContext":"Switch context",
"totp2f":"OTP App", "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.", "touchU2fDevice":"Please touch the flashing U2F device now.",
"touchU2fDeviceOrEnterTotp":"Please touch the flashing U2F device or enter TOTP code.", "touchU2fDeviceOrEnterTotp":"Please touch the flashing U2F device or enter TOTP code.",
"type":"Type", "type":"Type",
@ -333,4 +336,4 @@
"yourProfile":"Know your profile", "yourProfile":"Know your profile",
"yourTotpKey":"Your TOTP key", "yourTotpKey":"Your TOTP key",
"yubikey2f":"Yubikey" "yubikey2f":"Yubikey"
} }

View File

@ -126,7 +126,6 @@
"cancel":"取消", "cancel":"取消",
"captcha":"驗證碼", "captcha":"驗證碼",
"certificateReset":"重設我們的憑證", "certificateReset":"重設我們的憑證",
"changeKey":"生成新的金鑰",
"changePwd":"變更您的密碼", "changePwd":"變更您的密碼",
"checkDevOps":"Check DevOps handler file", "checkDevOps":"Check DevOps handler file",
"checkLastLogins":"檢查我的上次登入", "checkLastLogins":"檢查我的上次登入",
@ -169,7 +168,6 @@
"expired2Fremoved":"%s 個過期的雙因素驗證已被移除!", "expired2Fremoved":"%s 個過期的雙因素驗證已被移除!",
"explorer":"探索者", "explorer":"探索者",
"ext2f":"驗證代碼", "ext2f":"驗證代碼",
"fillTheForm":"填表單",
"firstName":"名", "firstName":"名",
"forbidden":"禁止存取", "forbidden":"禁止存取",
"forgotPwd":"忘記您的密碼?", "forgotPwd":"忘記您的密碼?",
@ -294,6 +292,11 @@
"switchContext":"切換內容", "switchContext":"切換內容",
"totp2f":"OTP 應用程式", "totp2f":"OTP 應用程式",
"totpExistingKey":"TOTP 祕密已存在", "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 裝置。", "touchU2fDevice":"請立刻碰觸閃爍中的 U2F 裝置。",
"touchU2fDeviceOrEnterTotp":"請立刻碰觸閃爍中的 U2F 裝置或輸入 TOTP 代碼。", "touchU2fDeviceOrEnterTotp":"請立刻碰觸閃爍中的 U2F 裝置或輸入 TOTP 代碼。",
"type":"類型", "type":"類型",
@ -333,4 +336,4 @@
"yourProfile":"知道您的個人檔案", "yourProfile":"知道您的個人檔案",
"yourTotpKey":"您的 TOTP 金鑰", "yourTotpKey":"您的 TOTP 金鑰",
"yubikey2f":"Yubikey" "yubikey2f":"Yubikey"
} }

View File

@ -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 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="card-body">
<div class="row"> <div class="row">
<div id="divToHide" class="col-md-6 text-center"> <div class="col-md-6 text-center">
<div > <div >
<p>&#x2460; <span trspan="totpQrCode"></span></p>
<canvas id="qr"></canvas> <canvas id="qr"></canvas>
<pre id="serialized"></pre>
<p><span trspan="totpSecretKey"></span></p>
<tt id="secret"></tt>
</div> </div>
</div> </div>
<div class="col-md-6"> <div class="col-md-6">
<div class="form-group"> <div class="form-group">
<label for="TOTPName"><span trspan="name">Name</span></label> <label for="TOTPName">&#x2461; <span trspan="totpRegisterName">Name</span></label>
<input type="text" class="form-control" id="TOTPName" name="TOTPName" value="MyTOTP" trplaceholder="name" /> <input type="text" class="form-control" id="TOTPName" name="TOTPName" value="MyTOTP" trplaceholder="name" />
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="code"><span trspan="code">Code</span></label> <label for="code">&#x2462; <span trspan="totpRegisterCode">Code</span></label>
<input id="code" class="form-control" name="code" type="number" autocomplete="off" /> <input id="code" class="form-control" name="code" autocomplete="off" />
</div> </div>
</div> </div>
</div> </div>
<div class="buttons"> <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 id="verify" class="btn btn-success" role="button">
<span class="fa fa-floppy-o"></span> <span class="fa fa-floppy-o"></span>
<span trspan="register">Register</span> <span trspan="register">Register</span>