diff --git a/lemonldap-ng-manager/site/htdocs/static/js/conftree.js b/lemonldap-ng-manager/site/htdocs/static/js/conftree.js
deleted file mode 100644
index 79e57ef40..000000000
--- a/lemonldap-ng-manager/site/htdocs/static/js/conftree.js
+++ /dev/null
@@ -1,1154 +0,0 @@
-function templates(tpl,key) {
- var ind;
- var scalarTemplate = function(r) {
- return {
- "id": tpl+"s/"+(ind++),
- "title": r,
- "get": tpl+"s/"+key+"/"+r
- };
- };
- switch(tpl){
- case 'casAppMetaDataNode':
- return [
- {
- "_nodes" : [
- {
- "get" : tpl+"s/"+key+"/"+"casAppMetaDataOptionsService",
- "id" : tpl+"s/"+key+"/"+"casAppMetaDataOptionsService",
- "title" : "casAppMetaDataOptionsService"
- },
- {
- "get" : tpl+"s/"+key+"/"+"casAppMetaDataOptionsRule",
- "id" : tpl+"s/"+key+"/"+"casAppMetaDataOptionsRule",
- "title" : "casAppMetaDataOptionsRule"
- }
- ],
- "id" : "casAppMetaDataOptions",
- "title" : "casAppMetaDataOptions",
- "type" : "simpleInputContainer"
- },
- {
- "cnodes" : tpl+"s/"+key+"/"+"casAppMetaDataExportedVars",
- "default" : [
- {
- "data" : "cn",
- "id" : tpl+"s/"+key+"/"+"casAppMetaDataExportedVars/cn",
- "title" : "cn",
- "type" : "keyText"
- },
- {
- "data" : "mail",
- "id" : tpl+"s/"+key+"/"+"casAppMetaDataExportedVars/mail",
- "title" : "mail",
- "type" : "keyText"
- },
- {
- "data" : "uid",
- "id" : tpl+"s/"+key+"/"+"casAppMetaDataExportedVars/uid",
- "title" : "uid",
- "type" : "keyText"
- }
- ],
- "id" : tpl+"s/"+key+"/"+"casAppMetaDataExportedVars",
- "title" : "casAppMetaDataExportedVars",
- "type" : "keyTextContainer"
- }
-]
-;
- case 'casSrvMetaDataNode':
- return [
- {
- "_nodes" : [
- {
- "get" : tpl+"s/"+key+"/"+"casSrvMetaDataOptionsUrl",
- "id" : tpl+"s/"+key+"/"+"casSrvMetaDataOptionsUrl",
- "title" : "casSrvMetaDataOptionsUrl"
- },
- {
- "default" : 0,
- "get" : tpl+"s/"+key+"/"+"casSrvMetaDataOptionsRenew",
- "id" : tpl+"s/"+key+"/"+"casSrvMetaDataOptionsRenew",
- "title" : "casSrvMetaDataOptionsRenew",
- "type" : "bool"
- },
- {
- "default" : 0,
- "get" : tpl+"s/"+key+"/"+"casSrvMetaDataOptionsGateway",
- "id" : tpl+"s/"+key+"/"+"casSrvMetaDataOptionsGateway",
- "title" : "casSrvMetaDataOptionsGateway",
- "type" : "bool"
- },
- {
- "get" : tpl+"s/"+key+"/"+"casSrvMetaDataOptionsDisplayName",
- "id" : tpl+"s/"+key+"/"+"casSrvMetaDataOptionsDisplayName",
- "title" : "casSrvMetaDataOptionsDisplayName"
- },
- {
- "get" : tpl+"s/"+key+"/"+"casSrvMetaDataOptionsIcon",
- "id" : tpl+"s/"+key+"/"+"casSrvMetaDataOptionsIcon",
- "title" : "casSrvMetaDataOptionsIcon"
- }
- ],
- "id" : "casSrvMetaDataOptions",
- "title" : "casSrvMetaDataOptions",
- "type" : "simpleInputContainer"
- },
- {
- "cnodes" : tpl+"s/"+key+"/"+"casSrvMetaDataExportedVars",
- "default" : [
- {
- "data" : "cn",
- "id" : tpl+"s/"+key+"/"+"casSrvMetaDataExportedVars/cn",
- "title" : "cn",
- "type" : "keyText"
- },
- {
- "data" : "mail",
- "id" : tpl+"s/"+key+"/"+"casSrvMetaDataExportedVars/mail",
- "title" : "mail",
- "type" : "keyText"
- },
- {
- "data" : "uid",
- "id" : tpl+"s/"+key+"/"+"casSrvMetaDataExportedVars/uid",
- "title" : "uid",
- "type" : "keyText"
- }
- ],
- "id" : tpl+"s/"+key+"/"+"casSrvMetaDataExportedVars",
- "title" : "casSrvMetaDataExportedVars",
- "type" : "keyTextContainer"
- },
- {
- "cnodes" : tpl+"s/"+key+"/"+"casSrvMetaDataOptionsProxiedServices",
- "id" : tpl+"s/"+key+"/"+"casSrvMetaDataOptionsProxiedServices",
- "title" : "casSrvMetaDataOptionsProxiedServices",
- "type" : "keyTextContainer"
- }
-]
-;
- case 'oidcOPMetaDataNode':
- return [
- {
- "get" : tpl+"s/"+key+"/"+"oidcOPMetaDataJSON",
- "id" : tpl+"s/"+key+"/"+"oidcOPMetaDataJSON",
- "title" : "oidcOPMetaDataJSON",
- "type" : "file"
- },
- {
- "get" : tpl+"s/"+key+"/"+"oidcOPMetaDataJWKS",
- "id" : tpl+"s/"+key+"/"+"oidcOPMetaDataJWKS",
- "title" : "oidcOPMetaDataJWKS",
- "type" : "file"
- },
- {
- "cnodes" : tpl+"s/"+key+"/"+"oidcOPMetaDataExportedVars",
- "default" : [
- {
- "data" : "name",
- "id" : tpl+"s/"+key+"/"+"oidcOPMetaDataExportedVars/cn",
- "title" : "cn",
- "type" : "keyText"
- },
- {
- "data" : "email",
- "id" : tpl+"s/"+key+"/"+"oidcOPMetaDataExportedVars/mail",
- "title" : "mail",
- "type" : "keyText"
- },
- {
- "data" : "family_name",
- "id" : tpl+"s/"+key+"/"+"oidcOPMetaDataExportedVars/sn",
- "title" : "sn",
- "type" : "keyText"
- },
- {
- "data" : "sub",
- "id" : tpl+"s/"+key+"/"+"oidcOPMetaDataExportedVars/uid",
- "title" : "uid",
- "type" : "keyText"
- }
- ],
- "id" : tpl+"s/"+key+"/"+"oidcOPMetaDataExportedVars",
- "title" : "oidcOPMetaDataExportedVars",
- "type" : "keyTextContainer"
- },
- {
- "_nodes" : [
- {
- "_nodes" : [
- {
- "get" : tpl+"s/"+key+"/"+"oidcOPMetaDataOptionsConfigurationURI",
- "id" : tpl+"s/"+key+"/"+"oidcOPMetaDataOptionsConfigurationURI",
- "title" : "oidcOPMetaDataOptionsConfigurationURI"
- },
- {
- "default" : 0,
- "get" : tpl+"s/"+key+"/"+"oidcOPMetaDataOptionsJWKSTimeout",
- "id" : tpl+"s/"+key+"/"+"oidcOPMetaDataOptionsJWKSTimeout",
- "title" : "oidcOPMetaDataOptionsJWKSTimeout",
- "type" : "int"
- },
- {
- "get" : tpl+"s/"+key+"/"+"oidcOPMetaDataOptionsClientID",
- "id" : tpl+"s/"+key+"/"+"oidcOPMetaDataOptionsClientID",
- "title" : "oidcOPMetaDataOptionsClientID"
- },
- {
- "get" : tpl+"s/"+key+"/"+"oidcOPMetaDataOptionsClientSecret",
- "id" : tpl+"s/"+key+"/"+"oidcOPMetaDataOptionsClientSecret",
- "title" : "oidcOPMetaDataOptionsClientSecret",
- "type" : "password"
- },
- {
- "default" : 0,
- "get" : tpl+"s/"+key+"/"+"oidcOPMetaDataOptionsStoreIDToken",
- "id" : tpl+"s/"+key+"/"+"oidcOPMetaDataOptionsStoreIDToken",
- "title" : "oidcOPMetaDataOptionsStoreIDToken",
- "type" : "bool"
- }
- ],
- "id" : "oidcOPMetaDataOptionsConfiguration",
- "title" : "oidcOPMetaDataOptionsConfiguration",
- "type" : "simpleInputContainer"
- },
- {
- "_nodes" : [
- {
- "default" : "openid profile",
- "get" : tpl+"s/"+key+"/"+"oidcOPMetaDataOptionsScope",
- "id" : tpl+"s/"+key+"/"+"oidcOPMetaDataOptionsScope",
- "title" : "oidcOPMetaDataOptionsScope"
- },
- {
- "default" : "",
- "get" : tpl+"s/"+key+"/"+"oidcOPMetaDataOptionsDisplay",
- "id" : tpl+"s/"+key+"/"+"oidcOPMetaDataOptionsDisplay",
- "select" : [
- {
- "k" : "",
- "v" : ""
- },
- {
- "k" : "page",
- "v" : "page"
- },
- {
- "k" : "popup",
- "v" : "popup"
- },
- {
- "k" : "touch",
- "v" : "touch"
- },
- {
- "k" : "wap",
- "v" : "wap"
- }
- ],
- "title" : "oidcOPMetaDataOptionsDisplay",
- "type" : "select"
- },
- {
- "get" : tpl+"s/"+key+"/"+"oidcOPMetaDataOptionsPrompt",
- "id" : tpl+"s/"+key+"/"+"oidcOPMetaDataOptionsPrompt",
- "title" : "oidcOPMetaDataOptionsPrompt"
- },
- {
- "default" : 0,
- "get" : tpl+"s/"+key+"/"+"oidcOPMetaDataOptionsMaxAge",
- "id" : tpl+"s/"+key+"/"+"oidcOPMetaDataOptionsMaxAge",
- "title" : "oidcOPMetaDataOptionsMaxAge",
- "type" : "int"
- },
- {
- "get" : tpl+"s/"+key+"/"+"oidcOPMetaDataOptionsUiLocales",
- "id" : tpl+"s/"+key+"/"+"oidcOPMetaDataOptionsUiLocales",
- "title" : "oidcOPMetaDataOptionsUiLocales"
- },
- {
- "get" : tpl+"s/"+key+"/"+"oidcOPMetaDataOptionsAcrValues",
- "id" : tpl+"s/"+key+"/"+"oidcOPMetaDataOptionsAcrValues",
- "title" : "oidcOPMetaDataOptionsAcrValues"
- },
- {
- "default" : "client_secret_post",
- "get" : tpl+"s/"+key+"/"+"oidcOPMetaDataOptionsTokenEndpointAuthMethod",
- "id" : tpl+"s/"+key+"/"+"oidcOPMetaDataOptionsTokenEndpointAuthMethod",
- "select" : [
- {
- "k" : "client_secret_post",
- "v" : "client_secret_post"
- },
- {
- "k" : "client_secret_basic",
- "v" : "client_secret_basic"
- }
- ],
- "title" : "oidcOPMetaDataOptionsTokenEndpointAuthMethod",
- "type" : "select"
- },
- {
- "default" : 1,
- "get" : tpl+"s/"+key+"/"+"oidcOPMetaDataOptionsCheckJWTSignature",
- "id" : tpl+"s/"+key+"/"+"oidcOPMetaDataOptionsCheckJWTSignature",
- "title" : "oidcOPMetaDataOptionsCheckJWTSignature",
- "type" : "bool"
- },
- {
- "default" : 30,
- "get" : tpl+"s/"+key+"/"+"oidcOPMetaDataOptionsIDTokenMaxAge",
- "id" : tpl+"s/"+key+"/"+"oidcOPMetaDataOptionsIDTokenMaxAge",
- "title" : "oidcOPMetaDataOptionsIDTokenMaxAge",
- "type" : "int"
- },
- {
- "default" : 1,
- "get" : tpl+"s/"+key+"/"+"oidcOPMetaDataOptionsUseNonce",
- "id" : tpl+"s/"+key+"/"+"oidcOPMetaDataOptionsUseNonce",
- "title" : "oidcOPMetaDataOptionsUseNonce",
- "type" : "bool"
- }
- ],
- "id" : "oidcOPMetaDataOptionsProtocol",
- "title" : "oidcOPMetaDataOptionsProtocol",
- "type" : "simpleInputContainer"
- },
- {
- "_nodes" : [
- {
- "get" : tpl+"s/"+key+"/"+"oidcOPMetaDataOptionsDisplayName",
- "id" : tpl+"s/"+key+"/"+"oidcOPMetaDataOptionsDisplayName",
- "title" : "oidcOPMetaDataOptionsDisplayName"
- },
- {
- "get" : tpl+"s/"+key+"/"+"oidcOPMetaDataOptionsIcon",
- "id" : tpl+"s/"+key+"/"+"oidcOPMetaDataOptionsIcon",
- "title" : "oidcOPMetaDataOptionsIcon"
- }
- ],
- "id" : "oidcOPMetaDataOptionsDisplayParams",
- "title" : "oidcOPMetaDataOptionsDisplayParams",
- "type" : "simpleInputContainer"
- }
- ],
- "id" : "oidcOPMetaDataOptions",
- "title" : "oidcOPMetaDataOptions"
- }
-]
-;
- case 'oidcRPMetaDataNode':
- return [
- {
- "cnodes" : tpl+"s/"+key+"/"+"oidcRPMetaDataExportedVars",
- "default" : [
- {
- "data" : "mail",
- "id" : tpl+"s/"+key+"/"+"oidcRPMetaDataExportedVars/email",
- "title" : "email",
- "type" : "keyText"
- },
- {
- "data" : "sn",
- "id" : tpl+"s/"+key+"/"+"oidcRPMetaDataExportedVars/family_name",
- "title" : "family_name",
- "type" : "keyText"
- },
- {
- "data" : "cn",
- "id" : tpl+"s/"+key+"/"+"oidcRPMetaDataExportedVars/name",
- "title" : "name",
- "type" : "keyText"
- }
- ],
- "id" : tpl+"s/"+key+"/"+"oidcRPMetaDataExportedVars",
- "title" : "oidcRPMetaDataExportedVars",
- "type" : "keyTextContainer"
- },
- {
- "_nodes" : [
- {
- "_nodes" : [
- {
- "get" : tpl+"s/"+key+"/"+"oidcRPMetaDataOptionsClientID",
- "id" : tpl+"s/"+key+"/"+"oidcRPMetaDataOptionsClientID",
- "title" : "oidcRPMetaDataOptionsClientID"
- },
- {
- "get" : tpl+"s/"+key+"/"+"oidcRPMetaDataOptionsClientSecret",
- "id" : tpl+"s/"+key+"/"+"oidcRPMetaDataOptionsClientSecret",
- "title" : "oidcRPMetaDataOptionsClientSecret",
- "type" : "password"
- }
- ],
- "id" : "oidcRPMetaDataOptionsAuthentication",
- "title" : "oidcRPMetaDataOptionsAuthentication",
- "type" : "simpleInputContainer"
- },
- {
- "_nodes" : [
- {
- "get" : tpl+"s/"+key+"/"+"oidcRPMetaDataOptionsDisplayName",
- "id" : tpl+"s/"+key+"/"+"oidcRPMetaDataOptionsDisplayName",
- "title" : "oidcRPMetaDataOptionsDisplayName"
- },
- {
- "get" : tpl+"s/"+key+"/"+"oidcRPMetaDataOptionsIcon",
- "id" : tpl+"s/"+key+"/"+"oidcRPMetaDataOptionsIcon",
- "title" : "oidcRPMetaDataOptionsIcon"
- }
- ],
- "id" : "oidcRPMetaDataOptionsDisplay",
- "title" : "oidcRPMetaDataOptionsDisplay",
- "type" : "simpleInputContainer"
- },
- {
- "get" : tpl+"s/"+key+"/"+"oidcRPMetaDataOptionsUserIDAttr",
- "id" : tpl+"s/"+key+"/"+"oidcRPMetaDataOptionsUserIDAttr",
- "title" : "oidcRPMetaDataOptionsUserIDAttr"
- },
- {
- "default" : "HS512",
- "get" : tpl+"s/"+key+"/"+"oidcRPMetaDataOptionsIDTokenSignAlg",
- "id" : tpl+"s/"+key+"/"+"oidcRPMetaDataOptionsIDTokenSignAlg",
- "select" : [
- {
- "k" : "none",
- "v" : "None"
- },
- {
- "k" : "HS256",
- "v" : "HS256"
- },
- {
- "k" : "HS384",
- "v" : "HS384"
- },
- {
- "k" : "HS512",
- "v" : "HS512"
- },
- {
- "k" : "RS256",
- "v" : "RS256"
- },
- {
- "k" : "RS384",
- "v" : "RS384"
- },
- {
- "k" : "RS512",
- "v" : "RS512"
- }
- ],
- "title" : "oidcRPMetaDataOptionsIDTokenSignAlg",
- "type" : "select"
- },
- {
- "default" : 3600,
- "get" : tpl+"s/"+key+"/"+"oidcRPMetaDataOptionsIDTokenExpiration",
- "id" : tpl+"s/"+key+"/"+"oidcRPMetaDataOptionsIDTokenExpiration",
- "title" : "oidcRPMetaDataOptionsIDTokenExpiration",
- "type" : "int"
- },
- {
- "default" : 3600,
- "get" : tpl+"s/"+key+"/"+"oidcRPMetaDataOptionsAccessTokenExpiration",
- "id" : tpl+"s/"+key+"/"+"oidcRPMetaDataOptionsAccessTokenExpiration",
- "title" : "oidcRPMetaDataOptionsAccessTokenExpiration",
- "type" : "int"
- },
- {
- "get" : tpl+"s/"+key+"/"+"oidcRPMetaDataOptionsRedirectUris",
- "id" : tpl+"s/"+key+"/"+"oidcRPMetaDataOptionsRedirectUris",
- "title" : "oidcRPMetaDataOptionsRedirectUris"
- },
- {
- "default" : 0,
- "get" : tpl+"s/"+key+"/"+"oidcRPMetaDataOptionsBypassConsent",
- "help" : "openidconnectclaims.html",
- "id" : tpl+"s/"+key+"/"+"oidcRPMetaDataOptionsBypassConsent",
- "title" : "oidcRPMetaDataOptionsBypassConsent",
- "type" : "bool"
- },
- {
- "_nodes" : [
- {
- "get" : tpl+"s/"+key+"/"+"oidcRPMetaDataOptionsPostLogoutRedirectUris",
- "id" : tpl+"s/"+key+"/"+"oidcRPMetaDataOptionsPostLogoutRedirectUris",
- "title" : "oidcRPMetaDataOptionsPostLogoutRedirectUris"
- },
- {
- "get" : tpl+"s/"+key+"/"+"oidcRPMetaDataOptionsLogoutUrl",
- "id" : tpl+"s/"+key+"/"+"oidcRPMetaDataOptionsLogoutUrl",
- "title" : "oidcRPMetaDataOptionsLogoutUrl"
- },
- {
- "default" : "front",
- "get" : tpl+"s/"+key+"/"+"oidcRPMetaDataOptionsLogoutType",
- "id" : tpl+"s/"+key+"/"+"oidcRPMetaDataOptionsLogoutType",
- "select" : [
- {
- "k" : "front",
- "v" : "Front Channel"
- },
- {
- "k" : "back",
- "v" : "Back Channel"
- }
- ],
- "title" : "oidcRPMetaDataOptionsLogoutType",
- "type" : "select"
- },
- {
- "default" : 0,
- "get" : tpl+"s/"+key+"/"+"oidcRPMetaDataOptionsLogoutSessionRequired",
- "id" : tpl+"s/"+key+"/"+"oidcRPMetaDataOptionsLogoutSessionRequired",
- "title" : "oidcRPMetaDataOptionsLogoutSessionRequired",
- "type" : "bool"
- }
- ],
- "id" : "logout",
- "title" : "logout",
- "type" : "simpleInputContainer"
- },
- {
- "get" : tpl+"s/"+key+"/"+"oidcRPMetaDataOptionsRule",
- "id" : tpl+"s/"+key+"/"+"oidcRPMetaDataOptionsRule",
- "title" : "oidcRPMetaDataOptionsRule"
- }
- ],
- "id" : "oidcRPMetaDataOptions",
- "title" : "oidcRPMetaDataOptions"
- },
- {
- "cnodes" : tpl+"s/"+key+"/"+"oidcRPMetaDataOptionsExtraClaims",
- "default" : [],
- "id" : tpl+"s/"+key+"/"+"oidcRPMetaDataOptionsExtraClaims",
- "title" : "oidcRPMetaDataOptionsExtraClaims",
- "type" : "keyTextContainer"
- }
-]
-;
- case 'samlIDPMetaDataNode':
- return [
- {
- "get" : tpl+"s/"+key+"/"+"samlIDPMetaDataXML",
- "id" : tpl+"s/"+key+"/"+"samlIDPMetaDataXML",
- "title" : "samlIDPMetaDataXML",
- "type" : "file"
- },
- {
- "cnodes" : tpl+"s/"+key+"/"+"samlIDPMetaDataExportedAttributes",
- "default" : [],
- "help" : "authsaml.html#exported_attributes",
- "id" : tpl+"s/"+key+"/"+"samlIDPMetaDataExportedAttributes",
- "title" : "samlIDPMetaDataExportedAttributes",
- "type" : "samlAttributeContainer"
- },
- {
- "_nodes" : [
- {
- "default" : "",
- "get" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsResolutionRule",
- "id" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsResolutionRule",
- "title" : "samlIDPMetaDataOptionsResolutionRule",
- "type" : "longtext"
- },
- {
- "default" : "",
- "get" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsNameIDFormat",
- "id" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsNameIDFormat",
- "select" : [
- {
- "k" : "",
- "v" : ""
- },
- {
- "k" : "unspecified",
- "v" : "Unspecified"
- },
- {
- "k" : "email",
- "v" : "Email"
- },
- {
- "k" : "x509",
- "v" : "X509 certificate"
- },
- {
- "k" : "windows",
- "v" : "Windows"
- },
- {
- "k" : "kerberos",
- "v" : "Kerberos"
- },
- {
- "k" : "entity",
- "v" : "Entity"
- },
- {
- "k" : "persistent",
- "v" : "Persistent"
- },
- {
- "k" : "transient",
- "v" : "Transient"
- },
- {
- "k" : "encrypted",
- "v" : "Encrypted"
- }
- ],
- "title" : "samlIDPMetaDataOptionsNameIDFormat",
- "type" : "select"
- },
- {
- "default" : 0,
- "get" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsForceAuthn",
- "id" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsForceAuthn",
- "title" : "samlIDPMetaDataOptionsForceAuthn",
- "type" : "bool"
- },
- {
- "default" : 0,
- "get" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsIsPassive",
- "id" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsIsPassive",
- "title" : "samlIDPMetaDataOptionsIsPassive",
- "type" : "bool"
- },
- {
- "default" : 0,
- "get" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsAllowProxiedAuthn",
- "id" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsAllowProxiedAuthn",
- "title" : "samlIDPMetaDataOptionsAllowProxiedAuthn",
- "type" : "bool"
- },
- {
- "default" : 0,
- "get" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsAllowLoginFromIDP",
- "id" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsAllowLoginFromIDP",
- "title" : "samlIDPMetaDataOptionsAllowLoginFromIDP",
- "type" : "bool"
- },
- {
- "default" : "",
- "get" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsRequestedAuthnContext",
- "id" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsRequestedAuthnContext",
- "select" : [
- {
- "k" : "",
- "v" : ""
- },
- {
- "k" : "kerberos",
- "v" : "Kerberos"
- },
- {
- "k" : "password-protected-transport",
- "v" : "Password protected transport"
- },
- {
- "k" : "password",
- "v" : "Password"
- },
- {
- "k" : "tls-client",
- "v" : "TLS client certificate"
- }
- ],
- "title" : "samlIDPMetaDataOptionsRequestedAuthnContext",
- "type" : "select"
- },
- {
- "default" : 0,
- "get" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsRelayStateURL",
- "id" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsRelayStateURL",
- "title" : "samlIDPMetaDataOptionsRelayStateURL",
- "type" : "bool"
- }
- ],
- "help" : "authsaml.html#options",
- "id" : "samlIDPMetaDataOptions",
- "title" : "samlIDPMetaDataOptions",
- "type" : "simpleInputContainer"
- },
- {
- "_nodes" : [
- {
- "default" : 0,
- "get" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsAdaptSessionUtime",
- "id" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsAdaptSessionUtime",
- "title" : "samlIDPMetaDataOptionsAdaptSessionUtime",
- "type" : "bool"
- },
- {
- "default" : 0,
- "get" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsForceUTF8",
- "id" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsForceUTF8",
- "title" : "samlIDPMetaDataOptionsForceUTF8",
- "type" : "bool"
- },
- {
- "default" : 0,
- "get" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsStoreSAMLToken",
- "id" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsStoreSAMLToken",
- "title" : "samlIDPMetaDataOptionsStoreSAMLToken",
- "type" : "bool"
- }
- ],
- "id" : "samlIDPMetaDataOptionsSession",
- "title" : "samlIDPMetaDataOptionsSession",
- "type" : "simpleInputContainer"
- },
- {
- "_nodes" : [
- {
- "default" : -1,
- "get" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsSignSSOMessage",
- "id" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsSignSSOMessage",
- "title" : "samlIDPMetaDataOptionsSignSSOMessage",
- "type" : "trool"
- },
- {
- "default" : 1,
- "get" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsCheckSSOMessageSignature",
- "id" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsCheckSSOMessageSignature",
- "title" : "samlIDPMetaDataOptionsCheckSSOMessageSignature",
- "type" : "bool"
- },
- {
- "default" : -1,
- "get" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsSignSLOMessage",
- "id" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsSignSLOMessage",
- "title" : "samlIDPMetaDataOptionsSignSLOMessage",
- "type" : "trool"
- },
- {
- "default" : 1,
- "get" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsCheckSLOMessageSignature",
- "id" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsCheckSLOMessageSignature",
- "title" : "samlIDPMetaDataOptionsCheckSLOMessageSignature",
- "type" : "bool"
- }
- ],
- "id" : "samlIDPMetaDataOptionsSignature",
- "title" : "samlIDPMetaDataOptionsSignature",
- "type" : "simpleInputContainer"
- },
- {
- "_nodes" : [
- {
- "default" : "",
- "get" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsSSOBinding",
- "id" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsSSOBinding",
- "select" : [
- {
- "k" : "",
- "v" : ""
- },
- {
- "k" : "http-post",
- "v" : "POST"
- },
- {
- "k" : "http-redirect",
- "v" : "Redirect"
- },
- {
- "k" : "artifact-get",
- "v" : "Artifact GET"
- }
- ],
- "title" : "samlIDPMetaDataOptionsSSOBinding",
- "type" : "select"
- },
- {
- "default" : "",
- "get" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsSLOBinding",
- "id" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsSLOBinding",
- "select" : [
- {
- "k" : "",
- "v" : ""
- },
- {
- "k" : "http-post",
- "v" : "POST"
- },
- {
- "k" : "http-redirect",
- "v" : "Redirect"
- },
- {
- "k" : "http-soap",
- "v" : "SOAP"
- }
- ],
- "title" : "samlIDPMetaDataOptionsSLOBinding",
- "type" : "select"
- }
- ],
- "id" : "samlIDPMetaDataOptionsBinding",
- "title" : "samlIDPMetaDataOptionsBinding",
- "type" : "simpleInputContainer"
- },
- {
- "_nodes" : [
- {
- "default" : "none",
- "get" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsEncryptionMode",
- "id" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsEncryptionMode",
- "select" : [
- {
- "k" : "none",
- "v" : "None"
- },
- {
- "k" : "nameid",
- "v" : "Name ID"
- },
- {
- "k" : "assertion",
- "v" : "Assertion"
- }
- ],
- "title" : "samlIDPMetaDataOptionsEncryptionMode",
- "type" : "select"
- },
- {
- "default" : 1,
- "get" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsCheckTime",
- "id" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsCheckTime",
- "title" : "samlIDPMetaDataOptionsCheckTime",
- "type" : "bool"
- },
- {
- "default" : 1,
- "get" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsCheckAudience",
- "id" : tpl+"s/"+key+"/"+"samlIDPMetaDataOptionsCheckAudience",
- "title" : "samlIDPMetaDataOptionsCheckAudience",
- "type" : "bool"
- }
- ],
- "id" : "samlIDPMetaDataOptionsSecurity",
- "title" : "samlIDPMetaDataOptionsSecurity",
- "type" : "simpleInputContainer"
- }
-]
-;
- case 'samlSPMetaDataNode':
- return [
- {
- "get" : tpl+"s/"+key+"/"+"samlSPMetaDataXML",
- "id" : tpl+"s/"+key+"/"+"samlSPMetaDataXML",
- "title" : "samlSPMetaDataXML",
- "type" : "file"
- },
- {
- "cnodes" : tpl+"s/"+key+"/"+"samlSPMetaDataExportedAttributes",
- "default" : [],
- "help" : "idpsaml.html#exported_attributes",
- "id" : tpl+"s/"+key+"/"+"samlSPMetaDataExportedAttributes",
- "title" : "samlSPMetaDataExportedAttributes",
- "type" : "samlAttributeContainer"
- },
- {
- "_nodes" : [
- {
- "_nodes" : [
- {
- "default" : "",
- "get" : tpl+"s/"+key+"/"+"samlSPMetaDataOptionsNameIDFormat",
- "id" : tpl+"s/"+key+"/"+"samlSPMetaDataOptionsNameIDFormat",
- "select" : [
- {
- "k" : "",
- "v" : ""
- },
- {
- "k" : "unspecified",
- "v" : "Unspecified"
- },
- {
- "k" : "email",
- "v" : "Email"
- },
- {
- "k" : "x509",
- "v" : "X509 certificate"
- },
- {
- "k" : "windows",
- "v" : "Windows"
- },
- {
- "k" : "kerberos",
- "v" : "Kerberos"
- },
- {
- "k" : "entity",
- "v" : "Entity"
- },
- {
- "k" : "persistent",
- "v" : "Persistent"
- },
- {
- "k" : "transient",
- "v" : "Transient"
- },
- {
- "k" : "encrypted",
- "v" : "Encrypted"
- }
- ],
- "title" : "samlSPMetaDataOptionsNameIDFormat",
- "type" : "select"
- },
- {
- "get" : tpl+"s/"+key+"/"+"samlSPMetaDataOptionsNameIDSessionKey",
- "id" : tpl+"s/"+key+"/"+"samlSPMetaDataOptionsNameIDSessionKey",
- "title" : "samlSPMetaDataOptionsNameIDSessionKey"
- },
- {
- "default" : 0,
- "get" : tpl+"s/"+key+"/"+"samlSPMetaDataOptionsOneTimeUse",
- "id" : tpl+"s/"+key+"/"+"samlSPMetaDataOptionsOneTimeUse",
- "title" : "samlSPMetaDataOptionsOneTimeUse",
- "type" : "bool"
- },
- {
- "default" : 72000,
- "get" : tpl+"s/"+key+"/"+"samlSPMetaDataOptionsSessionNotOnOrAfterTimeout",
- "id" : tpl+"s/"+key+"/"+"samlSPMetaDataOptionsSessionNotOnOrAfterTimeout",
- "title" : "samlSPMetaDataOptionsSessionNotOnOrAfterTimeout",
- "type" : "int"
- },
- {
- "default" : 72000,
- "get" : tpl+"s/"+key+"/"+"samlSPMetaDataOptionsNotOnOrAfterTimeout",
- "id" : tpl+"s/"+key+"/"+"samlSPMetaDataOptionsNotOnOrAfterTimeout",
- "title" : "samlSPMetaDataOptionsNotOnOrAfterTimeout",
- "type" : "int"
- },
- {
- "default" : 1,
- "get" : tpl+"s/"+key+"/"+"samlSPMetaDataOptionsForceUTF8",
- "id" : tpl+"s/"+key+"/"+"samlSPMetaDataOptionsForceUTF8",
- "title" : "samlSPMetaDataOptionsForceUTF8",
- "type" : "bool"
- }
- ],
- "id" : "samlSPMetaDataOptionsAuthnResponse",
- "title" : "samlSPMetaDataOptionsAuthnResponse",
- "type" : "simpleInputContainer"
- },
- {
- "_nodes" : [
- {
- "default" : -1,
- "get" : tpl+"s/"+key+"/"+"samlSPMetaDataOptionsSignSSOMessage",
- "id" : tpl+"s/"+key+"/"+"samlSPMetaDataOptionsSignSSOMessage",
- "title" : "samlSPMetaDataOptionsSignSSOMessage",
- "type" : "trool"
- },
- {
- "default" : 1,
- "get" : tpl+"s/"+key+"/"+"samlSPMetaDataOptionsCheckSSOMessageSignature",
- "id" : tpl+"s/"+key+"/"+"samlSPMetaDataOptionsCheckSSOMessageSignature",
- "title" : "samlSPMetaDataOptionsCheckSSOMessageSignature",
- "type" : "bool"
- },
- {
- "default" : -1,
- "get" : tpl+"s/"+key+"/"+"samlSPMetaDataOptionsSignSLOMessage",
- "id" : tpl+"s/"+key+"/"+"samlSPMetaDataOptionsSignSLOMessage",
- "title" : "samlSPMetaDataOptionsSignSLOMessage",
- "type" : "trool"
- },
- {
- "default" : 1,
- "get" : tpl+"s/"+key+"/"+"samlSPMetaDataOptionsCheckSLOMessageSignature",
- "id" : tpl+"s/"+key+"/"+"samlSPMetaDataOptionsCheckSLOMessageSignature",
- "title" : "samlSPMetaDataOptionsCheckSLOMessageSignature",
- "type" : "bool"
- }
- ],
- "id" : "samlSPMetaDataOptionsSignature",
- "title" : "samlSPMetaDataOptionsSignature",
- "type" : "simpleInputContainer"
- },
- {
- "_nodes" : [
- {
- "default" : "none",
- "get" : tpl+"s/"+key+"/"+"samlSPMetaDataOptionsEncryptionMode",
- "id" : tpl+"s/"+key+"/"+"samlSPMetaDataOptionsEncryptionMode",
- "select" : [
- {
- "k" : "none",
- "v" : "None"
- },
- {
- "k" : "nameid",
- "v" : "Name ID"
- },
- {
- "k" : "assertion",
- "v" : "Assertion"
- }
- ],
- "title" : "samlSPMetaDataOptionsEncryptionMode",
- "type" : "select"
- },
- {
- "default" : 0,
- "get" : tpl+"s/"+key+"/"+"samlSPMetaDataOptionsEnableIDPInitiatedURL",
- "id" : tpl+"s/"+key+"/"+"samlSPMetaDataOptionsEnableIDPInitiatedURL",
- "title" : "samlSPMetaDataOptionsEnableIDPInitiatedURL",
- "type" : "bool"
- },
- {
- "get" : tpl+"s/"+key+"/"+"samlSPMetaDataOptionsRule",
- "id" : tpl+"s/"+key+"/"+"samlSPMetaDataOptionsRule",
- "title" : "samlSPMetaDataOptionsRule"
- }
- ],
- "id" : "samlSPMetaDataOptionsSecurity",
- "title" : "samlSPMetaDataOptionsSecurity",
- "type" : "simpleInputContainer"
- }
- ],
- "help" : "idpsaml.html#options",
- "id" : "samlSPMetaDataOptions",
- "title" : "samlSPMetaDataOptions"
- }
-]
-;
- case 'virtualHost':
- return [
- {
- "cnodes" : tpl+"s/"+key+"/"+"locationRules",
- "default" : [
- {
- "data" : "deny",
- "id" : tpl+"s/"+key+"/"+"locationRules/default",
- "re" : "default",
- "title" : "default",
- "type" : "rule"
- }
- ],
- "help" : "writingrulesand_headers.html#rules",
- "id" : tpl+"s/"+key+"/"+"locationRules",
- "title" : "locationRules",
- "type" : "ruleContainer"
- },
- {
- "cnodes" : tpl+"s/"+key+"/"+"exportedHeaders",
- "help" : "writingrulesand_headers.html#headers",
- "id" : tpl+"s/"+key+"/"+"exportedHeaders",
- "title" : "exportedHeaders",
- "type" : "keyTextContainer"
- },
- {
- "cnodes" : tpl+"s/"+key+"/"+"post",
- "help" : "formreplay.html",
- "id" : tpl+"s/"+key+"/"+"post",
- "title" : "post",
- "type" : "postContainer"
- },
- {
- "_nodes" : [
- {
- "default" : -1,
- "get" : tpl+"s/"+key+"/"+"vhostPort",
- "id" : tpl+"s/"+key+"/"+"vhostPort",
- "title" : "vhostPort",
- "type" : "int"
- },
- {
- "default" : -1,
- "get" : tpl+"s/"+key+"/"+"vhostHttps",
- "id" : tpl+"s/"+key+"/"+"vhostHttps",
- "title" : "vhostHttps",
- "type" : "trool"
- },
- {
- "default" : 0,
- "get" : tpl+"s/"+key+"/"+"vhostMaintenance",
- "id" : tpl+"s/"+key+"/"+"vhostMaintenance",
- "title" : "vhostMaintenance",
- "type" : "bool"
- },
- {
- "get" : tpl+"s/"+key+"/"+"vhostAliases",
- "id" : tpl+"s/"+key+"/"+"vhostAliases",
- "title" : "vhostAliases"
- },
- {
- "default" : "Main",
- "get" : tpl+"s/"+key+"/"+"vhostType",
- "id" : tpl+"s/"+key+"/"+"vhostType",
- "select" : [
- {
- "k" : "Main",
- "v" : "Main"
- },
- {
- "k" : "Zimbra",
- "v" : "ZimbraPreAuth"
- },
- {
- "k" : "AuthBasic",
- "v" : "AuthBasic"
- },
- {
- "k" : "SecureToken",
- "v" : "SecureToken"
- },
- {
- "k" : "CDA",
- "v" : "CDA"
- },
- {
- "k" : "DevOps",
- "v" : "DevOps"
- },
- {
- "k" : "DevOpsST",
- "v" : "DevOpsST"
- },
- {
- "k" : "ServiceToken",
- "v" : "ServiceToken"
- }
- ],
- "title" : "vhostType",
- "type" : "select"
- },
- {
- "get" : tpl+"s/"+key+"/"+"vhostAuthnLevel",
- "id" : tpl+"s/"+key+"/"+"vhostAuthnLevel",
- "title" : "vhostAuthnLevel",
- "type" : "int"
- }
- ],
- "help" : "configvhost.html#options",
- "id" : "vhostOptions",
- "title" : "vhostOptions"
- }
-]
-;
- default:
- return [];
- }
-}
-
-function setScopeVars(scope) {
- scope.portal = scope.data[0]._nodes[0]._nodes[0];
- scope.getKey(scope.portal);
- scope.domain = scope.data[0]._nodes[4]._nodes[1];
- scope.getKey(scope.domain);
-}
\ No newline at end of file
diff --git a/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Main/Display.pm b/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Main/Display.pm
index 130b18c5b..83f3eda4e 100644
--- a/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Main/Display.pm
+++ b/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Main/Display.pm
@@ -140,21 +140,21 @@ sub display {
);
}
- # 1.4 Brute-Force attack detected
- elsif ( $req->{error} == PE_WAIT ) {
- $self->logger->debug('Display: waiting before retrying authentication');
- $self->logger->debug('Hidden values -> '. Dumper( $req->{portalHiddenFormValues}));
- $skinfile = 'info';
- %templateParams = (
- AUTH_ERROR => $self->error,
- AUTH_ERROR_TYPE => $req->error_type,
- MSG => '{error}" . '">">' . "PE$req->{error}" . '',
- URL => $req->{urldc},
- HIDDEN_INPUTS => $self->buildHiddenForm($req),
- ACTIVE_TIMER => $req->data->{activeTimer},
- FORM_METHOD => $self->conf->{infoFormMethod},
- );
- }
+ # # 1.4 Brute-Force attack detected
+ # elsif ( $req->{error} == PE_WAIT ) {
+ # $self->logger->debug('Display: waiting before retrying authentication');
+ # $self->logger->debug('Hidden values -> '. Dumper( $req->{portalHiddenFormValues}));
+ # $skinfile = 'info';
+ # %templateParams = (
+ # AUTH_ERROR => $self->error,
+ # AUTH_ERROR_TYPE => $req->error_type,
+ # MSG => '{error}" . '">">' . "PE$req->{error}" . '',
+ # URL => $req->{urldc},
+ # HIDDEN_INPUTS => $self->buildHiddenForm($req),
+ # ACTIVE_TIMER => $req->data->{activeTimer},
+ # FORM_METHOD => $self->conf->{infoFormMethod},
+ # );
+ # }
# 1.4 OpenID menu page
elsif ($req->{error} == PE_OPENID_EMPTY
@@ -330,6 +330,7 @@ sub display {
# * Logout message
# * Bad URL error
elsif ($req->{error} == PE_LOGOUT_OK
+ or $req->{error} == PE_WAIT
or $req->{error} == PE_BADURL )
{
%templateParams = (
diff --git a/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Plugins/BruteForceProtection.pm b/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Plugins/BruteForceProtection.pm
index 8e7f2e1f3..54b6ab88e 100644
--- a/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Plugins/BruteForceProtection.pm
+++ b/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Plugins/BruteForceProtection.pm
@@ -1,6 +1,5 @@
package Lemonldap::NG::Portal::Plugins::BruteForceProtection;
-use Data::Dumper;
use strict;
use Mouse;
use Lemonldap::NG::Portal::Main::Constants qw(PE_OK PE_WAIT);
@@ -20,41 +19,42 @@ sub init {1}
sub run {
my ( $self, $req ) = @_;
- my $countFailed = 0;
- my $lastFailedLoginEpoch = 0;
-
- # Last failed login epoch before this authentication -> Auth_N-1
- if ( defined $req->sessionInfo->{_loginHistory}->{failedLogin} ){
+ my $countFailed = 0;
+ my @lastFailedLoginEpoch = ();
+
+ # Auth_N-2 failed login epoch
+ if ( defined $req->sessionInfo->{_loginHistory}->{failedLogin} ) {
$countFailed = @{ $req->sessionInfo->{_loginHistory}->{failedLogin} };
}
- if ( defined $req->sessionInfo->{_loginHistory}->{failedLogin}->[1] ){
- $lastFailedLoginEpoch = $req->sessionInfo->{_loginHistory}->{failedLogin}->[1]->{_utime}
+
+ $self->logger->debug( " Number of failedLogin = $countFailed" );
+ return PE_OK if ( $countFailed < 3 );
+
+ foreach ( 0 .. 2 ) {
+ if ( defined $req->sessionInfo->{_loginHistory}->{failedLogin}->[$_] )
+ {
+ push @lastFailedLoginEpoch,
+ $req->sessionInfo->{_loginHistory}->{failedLogin}->[$_]
+ ->{_utime};
+ }
}
- # If Auth. N-1 older than 10 minutes -> another try allowed
- if ( ( time - $lastFailedLoginEpoch ) > 600 ) {
- $lastFailedLoginEpoch = 0;
- }
+ # If Auth_N-2 older than 5 minutes -> another try allowed
+ return PE_OK
+ if ( ( $lastFailedLoginEpoch[0] - $lastFailedLoginEpoch[2] ) > 300 );
# Delta between the two last failed logins -> Auth_N - Auth_N-1
- my $delta = time - $lastFailedLoginEpoch;
+ my $delta = time - $lastFailedLoginEpoch[1];
- $self->logger->debug( " successLogin -> " . Dumper( $req->sessionInfo->{_loginHistory}->{successLogin} ) );
- $self->logger->debug( " failedLogin -> " . Dumper( $req->sessionInfo->{_loginHistory}->{failedLogin} ) );
- $self->logger->debug(" Number of failedLogin -> $countFailed");
- $self->logger->debug(" Last failedLogin epoch -> $lastFailedLoginEpoch");
- $self->logger->debug( " Local time = " . localtime );
- $self->logger->debug(" Delta Auth_N - Auth_N-1 = $delta");
+ $self->logger->debug( " Local time = " . time );
+ $self->logger->debug(" Delta time - lastFailedLoginN-1 = $delta");
-# If Delta between the two last failed logins < 10s and more than 2 failedLogins => waiting = failedLogins * 10s
- if ( $countFailed > 2 and ( $delta < 10 ) ) {
-
- #sleep $countFailed * 10;
- return PE_WAIT;
-
- }
-
- return PE_OK;
+ # Delta between the two last failed logins < 30s => wait
+ return PE_OK unless ( $delta < 31 );
+
+ # Account locked
+ shift @{ $req->sessionInfo->{_loginHistory}->{failedLogin} };
+ return PE_WAIT;
}
1;
diff --git a/lemonldap-ng-portal/site/htdocs/static/languages/ar.json b/lemonldap-ng-portal/site/htdocs/static/languages/ar.json
index 249f2d49d..beb3774ec 100644
--- a/lemonldap-ng-portal/site/htdocs/static/languages/ar.json
+++ b/lemonldap-ng-portal/site/htdocs/static/languages/ar.json
@@ -85,7 +85,7 @@
"PE83":"U2F verification failed. Retry or contact your administrator",
"PE84":"You're not authorized to access to this host",
"PE85":" الموقع البعيد يطلب جلسة جديدة (ولم يتم تحميل برنامج ترقية الجلسة).\nسجل الخروج و أعد المحاولة",
-"PE86":"You must wait before trying to authenticate again",
+"PE86":"Your account is locked. You must wait 30s before authenticate again",
"2fRegRequired":"This service requires a double factor authentication. Register a device now, then go back to the portal.",
"accept":"قبول",
"accessDenied":"ليس لديك إذن بالدخول لهذا التطبيق",
diff --git a/lemonldap-ng-portal/site/htdocs/static/languages/de.json b/lemonldap-ng-portal/site/htdocs/static/languages/de.json
index 2a5e02136..27a28bd37 100644
--- a/lemonldap-ng-portal/site/htdocs/static/languages/de.json
+++ b/lemonldap-ng-portal/site/htdocs/static/languages/de.json
@@ -85,7 +85,7 @@
"PE83":"U2F-Überprüfung fehlgeschlagen. Versuchen Sie es erneut oder wenden Sie sich an Ihren Administrator",
"PE84":"Sie sind nicht berechtigt, auf diesen Host zuzugreifen",
"PE85":"Die Gegenseite fragt nach einer neueren Sitzung (und das UpgradeSession-Plugin wurde nicht geladen). Abmelden und erneut versuchen",
-"PE86":"You must wait before trying to authenticate again",
+"PE86":"Your account is locked. You must wait 30s before authenticate again",
"2fRegRequired":"This service requires a double factor authentication. Register a device now, then go back to the portal.",
"accept":"Akzeptieren",
"accessDenied":"Sie haben keine Zugriffsberechtigung für diese Anwendung",
diff --git a/lemonldap-ng-portal/site/htdocs/static/languages/en.json b/lemonldap-ng-portal/site/htdocs/static/languages/en.json
index 6dc84d0ce..f71c8c40c 100644
--- a/lemonldap-ng-portal/site/htdocs/static/languages/en.json
+++ b/lemonldap-ng-portal/site/htdocs/static/languages/en.json
@@ -85,7 +85,7 @@
"PE83":"U2F verification failed. Retry or contact your administrator",
"PE84":"You're not authorized to access to this host",
"PE85":"The remote site ask for a newer session (and UpgradeSession plugin isn't loaded). Logout and retry",
-"PE86":"You must wait before trying to authenticate again",
+"PE86":"Your account is locked. You must wait 30s before authenticate again",
"2fRegRequired":"This service requires a double factor authentication. Register a device now, then go back to the portal.",
"accept":"Accept",
"accessDenied":"You have no access authorization for this application",
diff --git a/lemonldap-ng-portal/site/htdocs/static/languages/es.json b/lemonldap-ng-portal/site/htdocs/static/languages/es.json
index 7a2e93d11..6c21a082b 100644
--- a/lemonldap-ng-portal/site/htdocs/static/languages/es.json
+++ b/lemonldap-ng-portal/site/htdocs/static/languages/es.json
@@ -85,7 +85,7 @@
"PE83":"U2F verification failed. Retry or contact your administrator",
"PE84":"You're not authorized to access to this host",
"PE85":"The remote site ask for a newer session (and UpgradeSession plugin isn't loaded). Logout and retry",
-"PE86":"You must wait before trying to authenticate again",
+"PE86":"Your account is locked. You must wait 30s before authenticate again",
"2fRegRequired":"This service requires a double factor authentication. Register a device now, then go back to the portal.",
"accept":"Accept",
"accessDenied":"You have no access authorization for this application",
diff --git a/lemonldap-ng-portal/site/htdocs/static/languages/fr.json b/lemonldap-ng-portal/site/htdocs/static/languages/fr.json
index eeafd018d..a751d10f0 100644
--- a/lemonldap-ng-portal/site/htdocs/static/languages/fr.json
+++ b/lemonldap-ng-portal/site/htdocs/static/languages/fr.json
@@ -85,7 +85,7 @@
"PE83":"La vérification U2F a échoué. Réessayez ou contactez votre administrateur",
"PE84":"Vous n'êtes pas autorisé à accéder à ce site",
"PE85":"Le site souhaite une authentification plus récente (et le plugin UpgradeSession n'est pas chargé). Déconnectez-vous et réessayez",
-"PE86":"Vous devez attendre avant de pouvoir vous ré-authentifier",
+"PE86":"Votre compte est verrouillé. Vous devez attendre 30s avant de vous ré-authentifier.",
"2fRegRequired":"Ce service requiert une authentification à deux facteurs. Enregistrez un équipement ici et retournez au portail.",
"accept":"Accepter",
"accessDenied":"Vous n'avez pas les droits d'accès à cette application",
diff --git a/lemonldap-ng-portal/site/htdocs/static/languages/it.json b/lemonldap-ng-portal/site/htdocs/static/languages/it.json
index 2fd7c14e7..f097a17fe 100644
--- a/lemonldap-ng-portal/site/htdocs/static/languages/it.json
+++ b/lemonldap-ng-portal/site/htdocs/static/languages/it.json
@@ -85,7 +85,7 @@
"PE83":"U2F verification failed. Retry or contact your administrator",
"PE84":"Non sei autorizzato ad accedere a questo host",
"PE85":"Il sito remoto richiede una sessione più recente (e il plug-in di UpgradeSession non viene caricato). Disconnetti e riprova",
-"PE86":"You must wait before trying to authenticate again",
+"PE86":"Your account is locked. You must wait 30s before authenticate again",
"2fRegRequired":"This service requires a double factor authentication. Register a device now, then go back to the portal.",
"accept":"Accetta",
"accessDenied":"Non hai un'autorizzazione di accesso per questa applicazione",
diff --git a/lemonldap-ng-portal/site/htdocs/static/languages/nl.json b/lemonldap-ng-portal/site/htdocs/static/languages/nl.json
index cd6dae111..a6a989d79 100644
--- a/lemonldap-ng-portal/site/htdocs/static/languages/nl.json
+++ b/lemonldap-ng-portal/site/htdocs/static/languages/nl.json
@@ -85,7 +85,7 @@
"PE83":"U2F verification failed. Retry or contact your administrator",
"PE84":"You're not authorized to access to this host",
"PE85":"The remote site ask for a newer session (and UpgradeSession plugin isn't loaded). Logout and retry",
-"PE86":"You must wait before trying to authenticate again",
+"PE86":"Your account is locked. You must wait 30s before authenticate again",
"2fRegRequired":"This service requires a double factor authentication. Register a device now, then go back to the portal.",
"accept":"Accept",
"accessDenied":"You have no access authorization for this application",
diff --git a/lemonldap-ng-portal/site/htdocs/static/languages/pt.json b/lemonldap-ng-portal/site/htdocs/static/languages/pt.json
index 7e994c94a..36d831997 100644
--- a/lemonldap-ng-portal/site/htdocs/static/languages/pt.json
+++ b/lemonldap-ng-portal/site/htdocs/static/languages/pt.json
@@ -85,7 +85,7 @@
"PE83":"U2F verification failed. Retry or contact your administrator",
"PE84":"You're not authorized to access to this host",
"PE85":"The remote site ask for a newer session (and UpgradeSession plugin isn't loaded). Logout and retry",
-"PE86":"You must wait before trying to authenticate again",
+"PE86":"Your account is locked. You must wait 30s before authenticate again",
"2fRegRequired":"This service requires a double factor authentication. Register a device now, then go back to the portal.",
"accept":"Accept",
"accessDenied":"You have no access authorization for this application",
diff --git a/lemonldap-ng-portal/site/htdocs/static/languages/ro.json b/lemonldap-ng-portal/site/htdocs/static/languages/ro.json
index 90c921896..e907869fd 100644
--- a/lemonldap-ng-portal/site/htdocs/static/languages/ro.json
+++ b/lemonldap-ng-portal/site/htdocs/static/languages/ro.json
@@ -85,7 +85,7 @@
"PE83":"U2F verification failed. Retry or contact your administrator",
"PE84":"You're not authorized to access to this host",
"PE85":"The remote site ask for a newer session (and UpgradeSession plugin isn't loaded). Logout and retry",
-"PE86":"You must wait before trying to authenticate again",
+"PE86":"Your account is locked. You must wait 30s before authenticate again",
"2fRegRequired":"This service requires a double factor authentication. Register a device now, then go back to the portal.",
"accept":"Accept",
"accessDenied":"You have no access authorization for this application",
diff --git a/lemonldap-ng-portal/site/htdocs/static/languages/vi.json b/lemonldap-ng-portal/site/htdocs/static/languages/vi.json
index 0437518d7..6d36241c1 100644
--- a/lemonldap-ng-portal/site/htdocs/static/languages/vi.json
+++ b/lemonldap-ng-portal/site/htdocs/static/languages/vi.json
@@ -85,7 +85,7 @@
"PE83":"Xác minh U2F không thành công",
"PE84":"Bạn không được phép truy cập vào máy chủ lưu trữ này",
"PE85":"Trang web từ xa yêu cầu một phiên mới (và plugin UpgradeSession không được tải). Đăng xuất và thử lại ",
-"PE86":"You must wait before trying to authenticate again",
+"PE86":"Your account is locked. You must wait 30s before authenticate again",
"2fRegRequired":"This service requires a double factor authentication. Register a device now, then go back to the portal.",
"accept":"Chấp nhận",
"accessDenied":"Bạn không có quyền truy cập vào ứng dụng này",