Merge branch 'v2.0'

This commit is contained in:
Christophe Maudoux 2020-04-03 11:21:56 +02:00
commit 28dc89796c
45 changed files with 631 additions and 261 deletions

View File

@ -207,15 +207,21 @@ MANAGERJSONSRC= scripts/jsongenerator.pl \
$(SRCMANAGERDIR)/lib/Lemonldap/NG/Manager/Build/Attributes.pm \ $(SRCMANAGERDIR)/lib/Lemonldap/NG/Manager/Build/Attributes.pm \
$(SRCMANAGERDIR)/lib/Lemonldap/NG/Manager/Build/Tree.pm \ $(SRCMANAGERDIR)/lib/Lemonldap/NG/Manager/Build/Tree.pm \
$(SRCMANAGERDIR)/lib/Lemonldap/NG/Manager/Build/CTrees.pm \ $(SRCMANAGERDIR)/lib/Lemonldap/NG/Manager/Build/CTrees.pm \
$(SRCMANAGERDIR)/lib/Lemonldap/NG/Manager/Conf/Zero.pm $(SRCMANAGERDIR)/lib/Lemonldap/NG/Manager/Conf/Zero.pm \
$(SRCMANAGERDIR)/lib/Lemonldap/NG/Manager/Build/PortalConstants.pm
MANAGERJSONDST=$(SRCMANAGERDIR)/site/htdocs/static/struct.json \ MANAGERJSONDST=$(SRCMANAGERDIR)/site/htdocs/static/struct.json \
$(SRCMANAGERDIR)/site/htdocs/static/reverseTree.json \
$(SRCMANAGERDIR)/site/htdocs/static/js/conftree.js \ $(SRCMANAGERDIR)/site/htdocs/static/js/conftree.js \
$(SRCMANAGERDIR)/lib/Lemonldap/NG/Manager/Attributes.pm \ $(SRCMANAGERDIR)/lib/Lemonldap/NG/Manager/Attributes.pm \
$(SRCCOMMONDIR)/lib/Lemonldap/NG/Common/Conf/ReConstants.pm \ $(SRCCOMMONDIR)/lib/Lemonldap/NG/Common/Conf/ReConstants.pm \
$(SRCCOMMONDIR)/lib/Lemonldap/NG/Common/Conf/DefaultValues.pm \ $(SRCCOMMONDIR)/lib/Lemonldap/NG/Common/Conf/DefaultValues.pm \
$(SRCCOMMONDIR)/lib/Lemonldap/NG/Common/Conf/Constants.pm \ $(SRCCOMMONDIR)/lib/Lemonldap/NG/Common/Conf/Constants.pm \
$(SRCPORTALDIR)/lib/Lemonldap/NG/Portal/Main/Constants.pm \
$(SRCHANDLERDIR)/lib/Lemonldap/NG/Handler/Lib/StatusConstants.pm \
_example/conf/lmConf-1.json _example/conf/lmConf-1.json
# Javascript and CSS to minify # Javascript and CSS to minify
JSSRCFILES:=$(shell find */site/htdocs/static/js $(SRCPORTALDIR)/site/htdocs/static -type f -name '*.js' ! -name '*.min.js') \ JSSRCFILES:=$(shell find */site/htdocs/static/js $(SRCPORTALDIR)/site/htdocs/static -type f -name '*.js' ! -name '*.min.js') \
$(SRCMANAGERDIR)/site/htdocs/static/bwr/file-saver.js/FileSaver.js $(SRCMANAGERDIR)/site/htdocs/static/bwr/file-saver.js/FileSaver.js

View File

@ -27,6 +27,7 @@ templateDir = __pwd__/lemonldap-ng-portal/site/templates
portalStatus = 1 portalStatus = 1
totp2fActivation = 1 totp2fActivation = 1
totp2fSelfRegistration = 1 totp2fSelfRegistration = 1
totp2fIssuer = LLNG_Demo
captcha_mail_enabled = 0 captcha_mail_enabled = 0
portalDisplayResetPassword = 1 portalDisplayResetPassword = 1
;pdataDomain = example.com ;pdataDomain = example.com

View File

@ -129,7 +129,11 @@
.\" ======================================================================== .\" ========================================================================
.\" .\"
.IX Title "llng-fastcgi-server 8" .IX Title "llng-fastcgi-server 8"
<<<<<<< HEAD
.TH llng-fastcgi-server 8 "2020-04-03" "perl v5.26.1" "User Contributed Perl Documentation" .TH llng-fastcgi-server 8 "2020-04-03" "perl v5.26.1" "User Contributed Perl Documentation"
=======
.TH llng-fastcgi-server 8 "2020-04-01" "perl v5.26.1" "User Contributed Perl Documentation"
>>>>>>> v2.0
.\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents. .\" way too many mistakes in technical documents.
.if n .ad l .if n .ad l

View File

@ -221,8 +221,11 @@ sub defaultValues {
'passwordPolicyMinDigit' => 0, 'passwordPolicyMinDigit' => 0,
'passwordPolicyMinLower' => 0, 'passwordPolicyMinLower' => 0,
'passwordPolicyMinSize' => 0, 'passwordPolicyMinSize' => 0,
'passwordPolicyMinSpeChar' => 0,
'passwordPolicyMinUpper' => 0, 'passwordPolicyMinUpper' => 0,
'passwordResetAllowedRetries' => 3, 'passwordPolicySpecialChar' =>
'! @ # $ % & * ( ) - = + [ ] { } ; : , . / ?',
'passwordResetAllowedRetries' => 3,
'persistentSessionAttributes' => 'persistentSessionAttributes' =>
'_loginHistory _2fDevices notification_', '_loginHistory _2fDevices notification_',
'port' => -1, 'port' => -1,

View File

@ -8,101 +8,103 @@ our $VERSION = '2.1.0';
sub portalConsts { sub portalConsts {
return { return {
'-1' => 'PE_DONE', '-1' => 'PE_DONE',
'-2' => 'PE_REDIRECT', '-2' => 'PE_REDIRECT',
'-3' => 'PE_INFO', '-3' => 'PE_INFO',
'-4' => 'PE_SENDRESPONSE', '-4' => 'PE_SENDRESPONSE',
'-5' => 'PE_IDPCHOICE', '-5' => 'PE_IDPCHOICE',
'-6' => 'PE_PASSWORD_OK', '-6' => 'PE_PASSWORD_OK',
'-7' => 'PE_LOGOUT_OK', '-7' => 'PE_LOGOUT_OK',
'0' => 'PE_OK', '0' => 'PE_OK',
'1' => 'PE_SESSIONEXPIRED', '1' => 'PE_SESSIONEXPIRED',
'10' => 'PE_BADCERTIFICATE', '10' => 'PE_BADCERTIFICATE',
'2' => 'PE_FORMEMPTY', '100' => 'PE_PP_NOT_ALLOWED_CHARACTER',
'21' => 'PE_PP_ACCOUNT_LOCKED', '101' => 'PE_PP_NOT_ALLOWED_CHARACTERS',
'22' => 'PE_PP_PASSWORD_EXPIRED', '2' => 'PE_FORMEMPTY',
'23' => 'PE_CERTIFICATEREQUIRED', '21' => 'PE_PP_ACCOUNT_LOCKED',
'24' => 'PE_ERROR', '22' => 'PE_PP_PASSWORD_EXPIRED',
'25' => 'PE_PP_CHANGE_AFTER_RESET', '23' => 'PE_CERTIFICATEREQUIRED',
'26' => 'PE_PP_PASSWORD_MOD_NOT_ALLOWED', '24' => 'PE_ERROR',
'27' => 'PE_PP_MUST_SUPPLY_OLD_PASSWORD', '25' => 'PE_PP_CHANGE_AFTER_RESET',
'28' => 'PE_PP_INSUFFICIENT_PASSWORD_QUALITY', '26' => 'PE_PP_PASSWORD_MOD_NOT_ALLOWED',
'29' => 'PE_PP_PASSWORD_TOO_SHORT', '27' => 'PE_PP_MUST_SUPPLY_OLD_PASSWORD',
'3' => 'PE_WRONGMANAGERACCOUNT', '28' => 'PE_PP_INSUFFICIENT_PASSWORD_QUALITY',
'30' => 'PE_PP_PASSWORD_TOO_YOUNG', '29' => 'PE_PP_PASSWORD_TOO_SHORT',
'31' => 'PE_PP_PASSWORD_IN_HISTORY', '3' => 'PE_WRONGMANAGERACCOUNT',
'32' => 'PE_PP_GRACE', '30' => 'PE_PP_PASSWORD_TOO_YOUNG',
'33' => 'PE_PP_EXP_WARNING', '31' => 'PE_PP_PASSWORD_IN_HISTORY',
'34' => 'PE_PASSWORD_MISMATCH', '32' => 'PE_PP_GRACE',
'36' => 'PE_NOTIFICATION', '33' => 'PE_PP_EXP_WARNING',
'37' => 'PE_BADURL', '34' => 'PE_PASSWORD_MISMATCH',
'38' => 'PE_NOSCHEME', '36' => 'PE_NOTIFICATION',
'39' => 'PE_BADOLDPASSWORD', '37' => 'PE_BADURL',
'4' => 'PE_USERNOTFOUND', '38' => 'PE_NOSCHEME',
'40' => 'PE_MALFORMEDUSER', '39' => 'PE_BADOLDPASSWORD',
'41' => 'PE_SESSIONNOTGRANTED', '4' => 'PE_USERNOTFOUND',
'42' => 'PE_CONFIRM', '40' => 'PE_MALFORMEDUSER',
'43' => 'PE_MAILFORMEMPTY', '41' => 'PE_SESSIONNOTGRANTED',
'44' => 'PE_BADMAILTOKEN', '42' => 'PE_CONFIRM',
'45' => 'PE_MAILERROR', '43' => 'PE_MAILFORMEMPTY',
'46' => 'PE_MAILOK', '44' => 'PE_BADMAILTOKEN',
'48' => 'PE_SAML_ERROR', '45' => 'PE_MAILERROR',
'49' => 'PE_SAML_LOAD_SERVICE_ERROR', '46' => 'PE_MAILOK',
'5' => 'PE_BADCREDENTIALS', '48' => 'PE_SAML_ERROR',
'50' => 'PE_SAML_LOAD_IDP_ERROR', '49' => 'PE_SAML_LOAD_SERVICE_ERROR',
'51' => 'PE_SAML_SSO_ERROR', '5' => 'PE_BADCREDENTIALS',
'52' => 'PE_SAML_UNKNOWN_ENTITY', '50' => 'PE_SAML_LOAD_IDP_ERROR',
'53' => 'PE_SAML_DESTINATION_ERROR', '51' => 'PE_SAML_SSO_ERROR',
'54' => 'PE_SAML_CONDITIONS_ERROR', '52' => 'PE_SAML_UNKNOWN_ENTITY',
'55' => 'PE_SAML_IDPSSOINITIATED_NOTALLOWED', '53' => 'PE_SAML_DESTINATION_ERROR',
'56' => 'PE_SAML_SLO_ERROR', '54' => 'PE_SAML_CONDITIONS_ERROR',
'57' => 'PE_SAML_SIGNATURE_ERROR', '55' => 'PE_SAML_IDPSSOINITIATED_NOTALLOWED',
'58' => 'PE_SAML_ART_ERROR', '56' => 'PE_SAML_SLO_ERROR',
'59' => 'PE_SAML_SESSION_ERROR', '57' => 'PE_SAML_SIGNATURE_ERROR',
'6' => 'PE_LDAPCONNECTFAILED', '58' => 'PE_SAML_ART_ERROR',
'60' => 'PE_SAML_LOAD_SP_ERROR', '59' => 'PE_SAML_SESSION_ERROR',
'61' => 'PE_SAML_ATTR_ERROR', '6' => 'PE_LDAPCONNECTFAILED',
'62' => 'PE_OPENID_EMPTY', '60' => 'PE_SAML_LOAD_SP_ERROR',
'63' => 'PE_OPENID_BADID', '61' => 'PE_SAML_ATTR_ERROR',
'64' => 'PE_MISSINGREQATTR', '62' => 'PE_OPENID_EMPTY',
'65' => 'PE_BADPARTNER', '63' => 'PE_OPENID_BADID',
'66' => 'PE_MAILCONFIRMATION_ALREADY_SENT', '64' => 'PE_MISSINGREQATTR',
'67' => 'PE_PASSWORDFORMEMPTY', '65' => 'PE_BADPARTNER',
'68' => 'PE_CAS_SERVICE_NOT_ALLOWED', '66' => 'PE_MAILCONFIRMATION_ALREADY_SENT',
'69' => 'PE_MAILFIRSTACCESS', '67' => 'PE_PASSWORDFORMEMPTY',
'7' => 'PE_LDAPERROR', '68' => 'PE_CAS_SERVICE_NOT_ALLOWED',
'70' => 'PE_MAILNOTFOUND', '69' => 'PE_MAILFIRSTACCESS',
'71' => 'PE_PASSWORDFIRSTACCESS', '7' => 'PE_LDAPERROR',
'72' => 'PE_MAILCONFIRMOK', '70' => 'PE_MAILNOTFOUND',
'73' => 'PE_RADIUSCONNECTFAILED', '71' => 'PE_PASSWORDFIRSTACCESS',
'74' => 'PE_MUST_SUPPLY_OLD_PASSWORD', '72' => 'PE_MAILCONFIRMOK',
'75' => 'PE_FORBIDDENIP', '73' => 'PE_RADIUSCONNECTFAILED',
'76' => 'PE_CAPTCHAERROR', '74' => 'PE_MUST_SUPPLY_OLD_PASSWORD',
'77' => 'PE_CAPTCHAEMPTY', '75' => 'PE_FORBIDDENIP',
'78' => 'PE_REGISTERFIRSTACCESS', '76' => 'PE_CAPTCHAERROR',
'79' => 'PE_REGISTERFORMEMPTY', '77' => 'PE_CAPTCHAEMPTY',
'8' => 'PE_APACHESESSIONERROR', '78' => 'PE_REGISTERFIRSTACCESS',
'80' => 'PE_REGISTERALREADYEXISTS', '79' => 'PE_REGISTERFORMEMPTY',
'81' => 'PE_NOTOKEN', '8' => 'PE_APACHESESSIONERROR',
'82' => 'PE_TOKENEXPIRED', '80' => 'PE_REGISTERALREADYEXISTS',
'83' => 'PE_U2FFAILED', '81' => 'PE_NOTOKEN',
'84' => 'PE_UNAUTHORIZEDPARTNER', '82' => 'PE_TOKENEXPIRED',
'85' => 'PE_RENEWSESSION', '83' => 'PE_U2FFAILED',
'86' => 'PE_WAIT', '84' => 'PE_UNAUTHORIZEDPARTNER',
'87' => 'PE_MUSTAUTHN', '85' => 'PE_RENEWSESSION',
'88' => 'PE_MUSTHAVEMAIL', '86' => 'PE_WAIT',
'89' => 'PE_SAML_SERVICE_NOT_ALLOWED', '87' => 'PE_MUSTAUTHN',
'9' => 'PE_FIRSTACCESS', '88' => 'PE_MUSTHAVEMAIL',
'90' => 'PE_OIDC_SERVICE_NOT_ALLOWED', '89' => 'PE_SAML_SERVICE_NOT_ALLOWED',
'91' => 'PE_OID_SERVICE_NOT_ALLOWED', '9' => 'PE_FIRSTACCESS',
'92' => 'PE_GET_SERVICE_NOT_ALLOWED', '90' => 'PE_OIDC_SERVICE_NOT_ALLOWED',
'93' => 'PE_IMPERSONATION_SERVICE_NOT_ALLOWED', '91' => 'PE_OID_SERVICE_NOT_ALLOWED',
'94' => 'PE_ISSUERMISSINGREQATTR', '92' => 'PE_GET_SERVICE_NOT_ALLOWED',
'95' => 'PE_DECRYPTVALUE_SERVICE_NOT_ALLOWED', '93' => 'PE_IMPERSONATION_SERVICE_NOT_ALLOWED',
'96' => 'PE_BADOTP', '94' => 'PE_ISSUERMISSINGREQATTR',
'97' => 'PE_RESETCERTIFICATE_INVALID', '95' => 'PE_DECRYPTVALUE_SERVICE_NOT_ALLOWED',
'98' => 'PE_RESETCERTIFICATE_FORMEMPTY', '96' => 'PE_BADOTP',
'99' => 'PE_RESETCERTIFICATE_FIRSTACCESS' '97' => 'PE_RESETCERTIFICATE_INVALID',
'98' => 'PE_RESETCERTIFICATE_FORMEMPTY',
'99' => 'PE_RESETCERTIFICATE_FIRSTACCESS'
}; };
} }

View File

@ -2436,10 +2436,19 @@ qr/^(?:\*\.)?(?:(?:(?:(?:[a-zA-Z0-9][-a-zA-Z0-9]*)?[a-zA-Z0-9])[.])*(?:[a-zA-Z][
'default' => 0, 'default' => 0,
'type' => 'int' 'type' => 'int'
}, },
'passwordPolicyMinSpeChar' => {
'default' => 0,
'type' => 'int'
},
'passwordPolicyMinUpper' => { 'passwordPolicyMinUpper' => {
'default' => 0, 'default' => 0,
'type' => 'int' 'type' => 'int'
}, },
'passwordPolicySpecialChar' => {
'default' => '! @ # $ % & * ( ) - = + [ ] { } ; : , . / ?',
'test' => qr/^[\s\W_]*$/,
'type' => 'text'
},
'passwordResetAllowedRetries' => { 'passwordResetAllowedRetries' => {
'default' => 3, 'default' => 3,
'type' => 'int' 'type' => 'int'

View File

@ -1446,6 +1446,17 @@ sub attributes {
type => 'int', type => 'int',
documentation => 'Password policy: minimal digit characters', documentation => 'Password policy: minimal digit characters',
}, },
passwordPolicyMinSpeChar => {
default => 0,
type => 'int',
documentation => 'Password policy: minimal special characters',
},
passwordPolicySpecialChar => {
default => '! @ # $ % & * ( ) - = + [ ] { } ; : , . / ?',
type => 'text',
test => qr/^[\s\W_]*$/,
documentation => 'Password policy: allowed special characters',
},
portalDisplayPasswordPolicy => { portalDisplayPasswordPolicy => {
default => 0, default => 0,
type => 'bool', type => 'bool',

View File

@ -107,6 +107,8 @@ sub portalConstants {
PE_RESETCERTIFICATE_INVALID => 97, PE_RESETCERTIFICATE_INVALID => 97,
PE_RESETCERTIFICATE_FORMEMPTY => 98, PE_RESETCERTIFICATE_FORMEMPTY => 98,
PE_RESETCERTIFICATE_FIRSTACCESS => 99, PE_RESETCERTIFICATE_FIRSTACCESS => 99,
PE_PP_NOT_ALLOWED_CHARACTER => 100,
PE_PP_NOT_ALLOWED_CHARACTERS => 101
}; };
} }

View File

@ -92,6 +92,8 @@ sub tree {
'passwordPolicyMinLower', 'passwordPolicyMinLower',
'passwordPolicyMinUpper', 'passwordPolicyMinUpper',
'passwordPolicyMinDigit', 'passwordPolicyMinDigit',
'passwordPolicyMinSpeChar',
'passwordPolicySpecialChar',
'portalDisplayPasswordPolicy', 'portalDisplayPasswordPolicy',
] ]
}, },

View File

@ -681,6 +681,8 @@
"passwordPolicyMinLower":"Minimal lower characters", "passwordPolicyMinLower":"Minimal lower characters",
"passwordPolicyMinUpper":"Minimal upper characters", "passwordPolicyMinUpper":"Minimal upper characters",
"passwordPolicyMinDigit":"Minimal digit characters", "passwordPolicyMinDigit":"Minimal digit characters",
"passwordPolicyMinSpeChar":"Minimal special characters",
"passwordPolicySpecialChar":"Allowed special characters",
"passwordResetAllowedRetries":"Max reset password retries", "passwordResetAllowedRetries":"Max reset password retries",
"persistent":"الثابتة", "persistent":"الثابتة",
"persistentSessions":"الجلسات الثابتة", "persistentSessions":"الجلسات الثابتة",

View File

@ -681,6 +681,8 @@
"passwordPolicyMinLower":"Minimal lower characters", "passwordPolicyMinLower":"Minimal lower characters",
"passwordPolicyMinUpper":"Minimal upper characters", "passwordPolicyMinUpper":"Minimal upper characters",
"passwordPolicyMinDigit":"Minimal digit characters", "passwordPolicyMinDigit":"Minimal digit characters",
"passwordPolicyMinSpeChar":"Minimal special characters",
"passwordPolicySpecialChar":"Allowed special characters",
"passwordResetAllowedRetries":"Max reset password retries", "passwordResetAllowedRetries":"Max reset password retries",
"persistent":"Persistent", "persistent":"Persistent",
"persistentSessions":"Persistent sessions", "persistentSessions":"Persistent sessions",

View File

@ -681,6 +681,8 @@
"passwordPolicyMinLower": "Minimal lower characters", "passwordPolicyMinLower": "Minimal lower characters",
"passwordPolicyMinUpper": "Minimal upper characters", "passwordPolicyMinUpper": "Minimal upper characters",
"passwordPolicyMinDigit": "Minimal digit characters", "passwordPolicyMinDigit": "Minimal digit characters",
"passwordPolicyMinSpeChar":"Minimal special characters",
"passwordPolicySpecialChar":"Allowed special characters",
"passwordResetAllowedRetries":"Max reset password retries", "passwordResetAllowedRetries":"Max reset password retries",
"persistent":"Persistent", "persistent":"Persistent",
"persistentSessions":"Persistent sessions", "persistentSessions":"Persistent sessions",

View File

@ -681,6 +681,8 @@
"passwordPolicyMinLower": "Minimum de minuscules", "passwordPolicyMinLower": "Minimum de minuscules",
"passwordPolicyMinUpper": "Minimum de majuscules", "passwordPolicyMinUpper": "Minimum de majuscules",
"passwordPolicyMinDigit": "Minimum de chiffres", "passwordPolicyMinDigit": "Minimum de chiffres",
"passwordPolicyMinSpeChar":"Minimum de caractètes spéciaux",
"passwordPolicySpecialChar":"Caractètes spéciaux autorisés",
"passwordResetAllowedRetries":"Nombre d'essais pour réinitialiser le mot de passe", "passwordResetAllowedRetries":"Nombre d'essais pour réinitialiser le mot de passe",
"persistent":"Persistantes", "persistent":"Persistantes",
"persistentSessions":"Sessions persistantes", "persistentSessions":"Sessions persistantes",

View File

@ -681,6 +681,8 @@
"passwordPolicyMinLower":"Minimal lower characters", "passwordPolicyMinLower":"Minimal lower characters",
"passwordPolicyMinUpper":"Minimal upper characters", "passwordPolicyMinUpper":"Minimal upper characters",
"passwordPolicyMinDigit":"Minimal digit characters", "passwordPolicyMinDigit":"Minimal digit characters",
"passwordPolicyMinSpeChar":"Minimal special characters",
"passwordPolicySpecialChar":"Allowed special characters",
"passwordResetAllowedRetries":"Max tentativi di reimpostazione della password", "passwordResetAllowedRetries":"Max tentativi di reimpostazione della password",
"persistent":"Persistente", "persistent":"Persistente",
"persistentSessions":"Sessioni persistenti", "persistentSessions":"Sessioni persistenti",

View File

@ -681,6 +681,8 @@
"passwordPolicyMinLower":"Minimum küçük harf karakter sayısı", "passwordPolicyMinLower":"Minimum küçük harf karakter sayısı",
"passwordPolicyMinUpper":"Minimum büyük harf karakter sayısı", "passwordPolicyMinUpper":"Minimum büyük harf karakter sayısı",
"passwordPolicyMinDigit":"Minimum rakam karakter sayısı", "passwordPolicyMinDigit":"Minimum rakam karakter sayısı",
"passwordPolicyMinSpeChar":"Minimal special characters",
"passwordPolicySpecialChar":"Allowed special characters",
"passwordResetAllowedRetries":"Maksimum parola sıfırlama denemesi", "passwordResetAllowedRetries":"Maksimum parola sıfırlama denemesi",
"persistent":"Kalıcı", "persistent":"Kalıcı",
"persistentSessions":"Kalıcı oturumlar", "persistentSessions":"Kalıcı oturumlar",

View File

@ -681,6 +681,8 @@
"passwordPolicyMinLower":"Minimal lower characters", "passwordPolicyMinLower":"Minimal lower characters",
"passwordPolicyMinUpper":"Minimal upper characters", "passwordPolicyMinUpper":"Minimal upper characters",
"passwordPolicyMinDigit":"Minimal digit characters", "passwordPolicyMinDigit":"Minimal digit characters",
"passwordPolicyMinSpeChar":"Minimal special characters",
"passwordPolicySpecialChar":"Allowed special characters",
"passwordResetAllowedRetries":"Max reset password retries", "passwordResetAllowedRetries":"Max reset password retries",
"persistent":"Duy trì", "persistent":"Duy trì",
"persistentSessions":"Duy trì phiên", "persistentSessions":"Duy trì phiên",

View File

@ -681,6 +681,8 @@
"passwordPolicyMinLower":"Minimal lower characters", "passwordPolicyMinLower":"Minimal lower characters",
"passwordPolicyMinUpper":"Minimal upper characters", "passwordPolicyMinUpper":"Minimal upper characters",
"passwordPolicyMinDigit":"Minimal digit characters", "passwordPolicyMinDigit":"Minimal digit characters",
"passwordPolicyMinSpeChar":"Minimal special characters",
"passwordPolicySpecialChar":"Allowed special characters",
"passwordResetAllowedRetries":"Max reset password retries", "passwordResetAllowedRetries":"Max reset password retries",
"persistent":"Persistent", "persistent":"Persistent",
"persistentSessions":"Persistent sessions", "persistentSessions":"Persistent sessions",

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -103,105 +103,109 @@ use constant {
PE_RESETCERTIFICATE_INVALID => 97, PE_RESETCERTIFICATE_INVALID => 97,
PE_RESETCERTIFICATE_FORMEMPTY => 98, PE_RESETCERTIFICATE_FORMEMPTY => 98,
PE_RESETCERTIFICATE_FIRSTACCESS => 99, PE_RESETCERTIFICATE_FIRSTACCESS => 99,
PE_PP_NOT_ALLOWED_CHARACTER => 100,
PE_PP_NOT_ALLOWED_CHARACTERS => 101,
}; };
sub portalConsts { sub portalConsts {
return { return {
'-1' => 'PE_DONE', '-1' => 'PE_DONE',
'-2' => 'PE_REDIRECT', '-2' => 'PE_REDIRECT',
'-3' => 'PE_INFO', '-3' => 'PE_INFO',
'-4' => 'PE_SENDRESPONSE', '-4' => 'PE_SENDRESPONSE',
'-5' => 'PE_IDPCHOICE', '-5' => 'PE_IDPCHOICE',
'-6' => 'PE_PASSWORD_OK', '-6' => 'PE_PASSWORD_OK',
'-7' => 'PE_LOGOUT_OK', '-7' => 'PE_LOGOUT_OK',
'0' => 'PE_OK', '0' => 'PE_OK',
'1' => 'PE_SESSIONEXPIRED', '1' => 'PE_SESSIONEXPIRED',
'10' => 'PE_BADCERTIFICATE', '10' => 'PE_BADCERTIFICATE',
'2' => 'PE_FORMEMPTY', '100' => 'PE_PP_NOT_ALLOWED_CHARACTER',
'21' => 'PE_PP_ACCOUNT_LOCKED', '101' => 'PE_PP_NOT_ALLOWED_CHARACTERS',
'22' => 'PE_PP_PASSWORD_EXPIRED', '2' => 'PE_FORMEMPTY',
'23' => 'PE_CERTIFICATEREQUIRED', '21' => 'PE_PP_ACCOUNT_LOCKED',
'24' => 'PE_ERROR', '22' => 'PE_PP_PASSWORD_EXPIRED',
'25' => 'PE_PP_CHANGE_AFTER_RESET', '23' => 'PE_CERTIFICATEREQUIRED',
'26' => 'PE_PP_PASSWORD_MOD_NOT_ALLOWED', '24' => 'PE_ERROR',
'27' => 'PE_PP_MUST_SUPPLY_OLD_PASSWORD', '25' => 'PE_PP_CHANGE_AFTER_RESET',
'28' => 'PE_PP_INSUFFICIENT_PASSWORD_QUALITY', '26' => 'PE_PP_PASSWORD_MOD_NOT_ALLOWED',
'29' => 'PE_PP_PASSWORD_TOO_SHORT', '27' => 'PE_PP_MUST_SUPPLY_OLD_PASSWORD',
'3' => 'PE_WRONGMANAGERACCOUNT', '28' => 'PE_PP_INSUFFICIENT_PASSWORD_QUALITY',
'30' => 'PE_PP_PASSWORD_TOO_YOUNG', '29' => 'PE_PP_PASSWORD_TOO_SHORT',
'31' => 'PE_PP_PASSWORD_IN_HISTORY', '3' => 'PE_WRONGMANAGERACCOUNT',
'32' => 'PE_PP_GRACE', '30' => 'PE_PP_PASSWORD_TOO_YOUNG',
'33' => 'PE_PP_EXP_WARNING', '31' => 'PE_PP_PASSWORD_IN_HISTORY',
'34' => 'PE_PASSWORD_MISMATCH', '32' => 'PE_PP_GRACE',
'36' => 'PE_NOTIFICATION', '33' => 'PE_PP_EXP_WARNING',
'37' => 'PE_BADURL', '34' => 'PE_PASSWORD_MISMATCH',
'38' => 'PE_NOSCHEME', '36' => 'PE_NOTIFICATION',
'39' => 'PE_BADOLDPASSWORD', '37' => 'PE_BADURL',
'4' => 'PE_USERNOTFOUND', '38' => 'PE_NOSCHEME',
'40' => 'PE_MALFORMEDUSER', '39' => 'PE_BADOLDPASSWORD',
'41' => 'PE_SESSIONNOTGRANTED', '4' => 'PE_USERNOTFOUND',
'42' => 'PE_CONFIRM', '40' => 'PE_MALFORMEDUSER',
'43' => 'PE_MAILFORMEMPTY', '41' => 'PE_SESSIONNOTGRANTED',
'44' => 'PE_BADMAILTOKEN', '42' => 'PE_CONFIRM',
'45' => 'PE_MAILERROR', '43' => 'PE_MAILFORMEMPTY',
'46' => 'PE_MAILOK', '44' => 'PE_BADMAILTOKEN',
'48' => 'PE_SAML_ERROR', '45' => 'PE_MAILERROR',
'49' => 'PE_SAML_LOAD_SERVICE_ERROR', '46' => 'PE_MAILOK',
'5' => 'PE_BADCREDENTIALS', '48' => 'PE_SAML_ERROR',
'50' => 'PE_SAML_LOAD_IDP_ERROR', '49' => 'PE_SAML_LOAD_SERVICE_ERROR',
'51' => 'PE_SAML_SSO_ERROR', '5' => 'PE_BADCREDENTIALS',
'52' => 'PE_SAML_UNKNOWN_ENTITY', '50' => 'PE_SAML_LOAD_IDP_ERROR',
'53' => 'PE_SAML_DESTINATION_ERROR', '51' => 'PE_SAML_SSO_ERROR',
'54' => 'PE_SAML_CONDITIONS_ERROR', '52' => 'PE_SAML_UNKNOWN_ENTITY',
'55' => 'PE_SAML_IDPSSOINITIATED_NOTALLOWED', '53' => 'PE_SAML_DESTINATION_ERROR',
'56' => 'PE_SAML_SLO_ERROR', '54' => 'PE_SAML_CONDITIONS_ERROR',
'57' => 'PE_SAML_SIGNATURE_ERROR', '55' => 'PE_SAML_IDPSSOINITIATED_NOTALLOWED',
'58' => 'PE_SAML_ART_ERROR', '56' => 'PE_SAML_SLO_ERROR',
'59' => 'PE_SAML_SESSION_ERROR', '57' => 'PE_SAML_SIGNATURE_ERROR',
'6' => 'PE_LDAPCONNECTFAILED', '58' => 'PE_SAML_ART_ERROR',
'60' => 'PE_SAML_LOAD_SP_ERROR', '59' => 'PE_SAML_SESSION_ERROR',
'61' => 'PE_SAML_ATTR_ERROR', '6' => 'PE_LDAPCONNECTFAILED',
'62' => 'PE_OPENID_EMPTY', '60' => 'PE_SAML_LOAD_SP_ERROR',
'63' => 'PE_OPENID_BADID', '61' => 'PE_SAML_ATTR_ERROR',
'64' => 'PE_MISSINGREQATTR', '62' => 'PE_OPENID_EMPTY',
'65' => 'PE_BADPARTNER', '63' => 'PE_OPENID_BADID',
'66' => 'PE_MAILCONFIRMATION_ALREADY_SENT', '64' => 'PE_MISSINGREQATTR',
'67' => 'PE_PASSWORDFORMEMPTY', '65' => 'PE_BADPARTNER',
'68' => 'PE_CAS_SERVICE_NOT_ALLOWED', '66' => 'PE_MAILCONFIRMATION_ALREADY_SENT',
'69' => 'PE_MAILFIRSTACCESS', '67' => 'PE_PASSWORDFORMEMPTY',
'7' => 'PE_LDAPERROR', '68' => 'PE_CAS_SERVICE_NOT_ALLOWED',
'70' => 'PE_MAILNOTFOUND', '69' => 'PE_MAILFIRSTACCESS',
'71' => 'PE_PASSWORDFIRSTACCESS', '7' => 'PE_LDAPERROR',
'72' => 'PE_MAILCONFIRMOK', '70' => 'PE_MAILNOTFOUND',
'73' => 'PE_RADIUSCONNECTFAILED', '71' => 'PE_PASSWORDFIRSTACCESS',
'74' => 'PE_MUST_SUPPLY_OLD_PASSWORD', '72' => 'PE_MAILCONFIRMOK',
'75' => 'PE_FORBIDDENIP', '73' => 'PE_RADIUSCONNECTFAILED',
'76' => 'PE_CAPTCHAERROR', '74' => 'PE_MUST_SUPPLY_OLD_PASSWORD',
'77' => 'PE_CAPTCHAEMPTY', '75' => 'PE_FORBIDDENIP',
'78' => 'PE_REGISTERFIRSTACCESS', '76' => 'PE_CAPTCHAERROR',
'79' => 'PE_REGISTERFORMEMPTY', '77' => 'PE_CAPTCHAEMPTY',
'8' => 'PE_APACHESESSIONERROR', '78' => 'PE_REGISTERFIRSTACCESS',
'80' => 'PE_REGISTERALREADYEXISTS', '79' => 'PE_REGISTERFORMEMPTY',
'81' => 'PE_NOTOKEN', '8' => 'PE_APACHESESSIONERROR',
'82' => 'PE_TOKENEXPIRED', '80' => 'PE_REGISTERALREADYEXISTS',
'83' => 'PE_U2FFAILED', '81' => 'PE_NOTOKEN',
'84' => 'PE_UNAUTHORIZEDPARTNER', '82' => 'PE_TOKENEXPIRED',
'85' => 'PE_RENEWSESSION', '83' => 'PE_U2FFAILED',
'86' => 'PE_WAIT', '84' => 'PE_UNAUTHORIZEDPARTNER',
'87' => 'PE_MUSTAUTHN', '85' => 'PE_RENEWSESSION',
'88' => 'PE_MUSTHAVEMAIL', '86' => 'PE_WAIT',
'89' => 'PE_SAML_SERVICE_NOT_ALLOWED', '87' => 'PE_MUSTAUTHN',
'9' => 'PE_FIRSTACCESS', '88' => 'PE_MUSTHAVEMAIL',
'90' => 'PE_OIDC_SERVICE_NOT_ALLOWED', '89' => 'PE_SAML_SERVICE_NOT_ALLOWED',
'91' => 'PE_OID_SERVICE_NOT_ALLOWED', '9' => 'PE_FIRSTACCESS',
'92' => 'PE_GET_SERVICE_NOT_ALLOWED', '90' => 'PE_OIDC_SERVICE_NOT_ALLOWED',
'93' => 'PE_IMPERSONATION_SERVICE_NOT_ALLOWED', '91' => 'PE_OID_SERVICE_NOT_ALLOWED',
'94' => 'PE_ISSUERMISSINGREQATTR', '92' => 'PE_GET_SERVICE_NOT_ALLOWED',
'95' => 'PE_DECRYPTVALUE_SERVICE_NOT_ALLOWED', '93' => 'PE_IMPERSONATION_SERVICE_NOT_ALLOWED',
'96' => 'PE_BADOTP', '94' => 'PE_ISSUERMISSINGREQATTR',
'97' => 'PE_RESETCERTIFICATE_INVALID', '95' => 'PE_DECRYPTVALUE_SERVICE_NOT_ALLOWED',
'98' => 'PE_RESETCERTIFICATE_FORMEMPTY', '96' => 'PE_BADOTP',
'99' => 'PE_RESETCERTIFICATE_FIRSTACCESS' '97' => 'PE_RESETCERTIFICATE_INVALID',
'98' => 'PE_RESETCERTIFICATE_FORMEMPTY',
'99' => 'PE_RESETCERTIFICATE_FIRSTACCESS'
}; };
} }
@ -304,7 +308,9 @@ our @EXPORT_OK = (
'PE_BADOTP', 'PE_BADOTP',
'PE_RESETCERTIFICATE_INVALID', 'PE_RESETCERTIFICATE_INVALID',
'PE_RESETCERTIFICATE_FORMEMPTY', 'PE_RESETCERTIFICATE_FORMEMPTY',
'PE_RESETCERTIFICATE_FIRSTACCESS' 'PE_RESETCERTIFICATE_FIRSTACCESS',
'PE_PP_NOT_ALLOWED_CHARACTER',
'PE_PP_NOT_ALLOWED_CHARACTERS'
); );
our %EXPORT_TAGS = ( 'all' => [ @EXPORT_OK, 'import' ], ); our %EXPORT_TAGS = ( 'all' => [ @EXPORT_OK, 'import' ], );

View File

@ -208,6 +208,9 @@ sub display {
# 2.2 Case : display menu (with error or not) # 2.2 Case : display menu (with error or not)
elsif ( $req->error == PE_OK ) { elsif ( $req->error == PE_OK ) {
my $speChars = $self->conf->{passwordPolicySpecialChar};
$speChars =~ s/\s+/ /g;
$speChars =~ s/(?:^\s|\s$)//g;
$skinfile = 'menu'; $skinfile = 'menu';
#utf8::decode($auth_user); #utf8::decode($auth_user);
@ -225,6 +228,13 @@ sub display {
PPOLICY_MINLOWER => $self->conf->{passwordPolicyMinLower}, PPOLICY_MINLOWER => $self->conf->{passwordPolicyMinLower},
PPOLICY_MINUPPER => $self->conf->{passwordPolicyMinUpper}, PPOLICY_MINUPPER => $self->conf->{passwordPolicyMinUpper},
PPOLICY_MINDIGIT => $self->conf->{passwordPolicyMinDigit}, PPOLICY_MINDIGIT => $self->conf->{passwordPolicyMinDigit},
PPOLICY_ALLOWEDSPECHAR => $speChars,
(
$speChars
? ( PPOLICY_MINSPECHAR =>
$self->conf->{passwordPolicyMinSpeChar} )
: ()
),
$self->menu->params($req), $self->menu->params($req),
( (
$req->data->{customScript} $req->data->{customScript}

View File

@ -8,8 +8,10 @@ use Lemonldap::NG::Portal::Main::Constants qw(
PE_BADOLDPASSWORD PE_BADOLDPASSWORD
PE_PASSWORD_OK PE_PASSWORD_OK
PE_PASSWORD_MISMATCH PE_PASSWORD_MISMATCH
PE_PP_MUST_SUPPLY_OLD_PASSWORD
PE_PP_PASSWORD_TOO_SHORT PE_PP_PASSWORD_TOO_SHORT
PE_PP_NOT_ALLOWED_CHARACTER
PE_PP_NOT_ALLOWED_CHARACTERS
PE_PP_MUST_SUPPLY_OLD_PASSWORD
PE_PP_INSUFFICIENT_PASSWORD_QUALITY PE_PP_INSUFFICIENT_PASSWORD_QUALITY
); );
@ -25,7 +27,7 @@ sub init {
# INTERFACE # INTERFACE
sub forAuthUser { '_modifyPassword' } use constant forAuthUser => '_modifyPassword';
# RUNNING METHODS # RUNNING METHODS
@ -131,6 +133,29 @@ sub checkPasswordQuality {
} }
} }
## Special characters policy
my $speChars = $self->conf->{passwordPolicySpecialChar};
$speChars =~ s/\s+//g;
# Min special characters
if ( $self->conf->{passwordPolicyMinSpeChar} && $speChars ) {
my $spe = 0;
my $test = $password;
$spe = $test =~ s/[\Q$speChars\E]//g;
if ( $spe < $self->conf->{passwordPolicyMinSpeChar} ) {
$self->logger->error("Password has not enough special characters");
return PE_PP_INSUFFICIENT_PASSWORD_QUALITY;
}
}
# Fobidden special characters
$password =~ s/[\Q$speChars\E\w]//g;
if ($password) {
$self->logger->error(
'Password contains ' . length($password) . " forbidden character(s): $password");
return length($password) > 1 ? PE_PP_NOT_ALLOWED_CHARACTERS : PE_PP_NOT_ALLOWED_CHARACTER;
}
return PE_OK; return PE_OK;
} }

View File

@ -262,6 +262,7 @@ sub check {
"Compute groups and macros with real and spoofed attributes" "Compute groups and macros with real and spoofed attributes"
); );
$req->sessionInfo($attrs); $req->sessionInfo($attrs);
delete $req->sessionInfo->{groups};
$req->steps( [ $self->p->groupsAndMacros, 'setLocalGroups' ] ); $req->steps( [ $self->p->groupsAndMacros, 'setLocalGroups' ] );
if ( my $error = $self->p->process($req) ) { if ( my $error = $self->p->process($req) ) {
$self->logger->debug("Process returned error: $error"); $self->logger->debug("Process returned error: $error");
@ -409,10 +410,10 @@ sub _userData {
# Compute groups & macros again with real authenticationLevel # Compute groups & macros again with real authenticationLevel
$req->sessionInfo->{authenticationLevel} = $realAuthLevel; $req->sessionInfo->{authenticationLevel} = $realAuthLevel;
delete $req->sessionInfo->{groups}; delete $req->sessionInfo->{groups};
$req->steps( [ $self->p->groupsAndMacros, 'setLocalGroups' ] ); $req->steps( [ $self->p->groupsAndMacros, 'setLocalGroups' ] );
if ( my $error = $self->p->process($req) ) { if ( my $error = $self->p->process($req) ) {
$self->logger->debug( $self->logger->debug("CheckUser: Process returned error: $error");
"ContextSwitching: Process returned error: $error");
return $req->error($error); return $req->error($error);
} }

View File

@ -230,6 +230,18 @@ sub _userData {
$req->error($error); $req->error($error);
} }
} }
# Compute groups & macros again with real authenticationLevel
$req->sessionInfo->{authenticationLevel} =
$realSession->{real_authenticationLevel};
delete $req->sessionInfo->{groups};
$req->steps( [ $self->p->groupsAndMacros, 'setLocalGroups' ] );
if ( my $error = $self->p->process($req) ) {
$self->logger->debug("Impersonation: Process returned error: $error");
$req->error($error);
}
$self->logger->debug("Return \"$req->{user}\" sessionInfo");
return $req->{sessionInfo}; return $req->{sessionInfo};
} }

View File

@ -525,7 +525,11 @@ sub setSecurity {
sub display { sub display {
my ( $self, $req ) = @_; my ( $self, $req ) = @_;
my $speChars = $self->conf->{passwordPolicySpecialChar};
$speChars =~ s/\s+/ /g;
$speChars =~ s/(?:^\s|\s$)//g;
$self->logger->debug( 'Display called with code: ' . $req->error ); $self->logger->debug( 'Display called with code: ' . $req->error );
my %tplPrm = ( my %tplPrm = (
SKIN_PATH => $self->conf->{staticPrefix}, SKIN_PATH => $self->conf->{staticPrefix},
SKIN => $self->p->getSkin($req), SKIN => $self->p->getSkin($req),
@ -541,8 +545,7 @@ sub display {
STARTMAILTIME => $req->data->{startMailTime}, STARTMAILTIME => $req->data->{startMailTime},
MAILALREADYSENT => $req->data->{mailAlreadySent}, MAILALREADYSENT => $req->data->{mailAlreadySent},
MAIL => ( MAIL => (
$self->p->checkXSSAttack( 'mail', $req->{user} ) $self->p->checkXSSAttack( 'mail', $req->{user} ) ? ''
? ''
: $req->{user} : $req->{user}
), ),
DISPLAY_FORM => 0, DISPLAY_FORM => 0,
@ -555,6 +558,12 @@ sub display {
PPOLICY_MINLOWER => $self->conf->{passwordPolicyMinLower}, PPOLICY_MINLOWER => $self->conf->{passwordPolicyMinLower},
PPOLICY_MINUPPER => $self->conf->{passwordPolicyMinUpper}, PPOLICY_MINUPPER => $self->conf->{passwordPolicyMinUpper},
PPOLICY_MINDIGIT => $self->conf->{passwordPolicyMinDigit}, PPOLICY_MINDIGIT => $self->conf->{passwordPolicyMinDigit},
PPOLICY_ALLOWEDSPECHAR => $speChars,
(
$speChars
? ( PPOLICY_MINSPECHAR => $self->conf->{passwordPolicyMinSpeChar} )
: ()
),
DISPLAY_GENERATE_PASSWORD => DISPLAY_GENERATE_PASSWORD =>
$self->conf->{portalDisplayGeneratePassword}, $self->conf->{portalDisplayGeneratePassword},
); );

View File

@ -87,9 +87,11 @@
"PE94":"السمة المطلوبة غير متوفرة", "PE94":"السمة المطلوبة غير متوفرة",
"PE95":"Access not granted on DECRYPT service", "PE95":"Access not granted on DECRYPT service",
"PE96":"Invalid verification code", "PE96":"Invalid verification code",
"PE97":"Please select your new certificate", "PE97":"Your certificate is invalid or expires soon",
"PE98":"Please select your new certificate", "PE98":"Please select your new certificate",
"PE99":"Your certificate is invalid or expires soon", "PE99":"Please select your new certificate",
"PE100":"Password contains not allowed character",
"PE101":"Password contains not allowed characters",
"2fRegRequired":"This service requires a double factor authentication. Register a device now, then go back to the portal.", "2fRegRequired":"This service requires a double factor authentication. Register a device now, then go back to the portal.",
"accept":"قبول", "accept":"قبول",
"accessDenied":"ليس لديك إذن بالدخول لهذا التطبيق", "accessDenied":"ليس لديك إذن بالدخول لهذا التطبيق",
@ -226,6 +228,8 @@
"passwordPolicyMinLower":"Minimal lower characters:", "passwordPolicyMinLower":"Minimal lower characters:",
"passwordPolicyMinUpper":"Minimal upper characters:", "passwordPolicyMinUpper":"Minimal upper characters:",
"passwordPolicyMinDigit":"Minimal digit characters:", "passwordPolicyMinDigit":"Minimal digit characters:",
"passwordPolicyMinSpeChar":"Minimal special characters:",
"passwordPolicySpecialChar":"Allowed special characters:",
"ppGrace":"المصادقات المتبقية، غير كلمة المرور الخاصة بك!", "ppGrace":"المصادقات المتبقية، غير كلمة المرور الخاصة بك!",
"proxyError":"بوابة سيئة: غير قادر على الانضمام لالخادم البعيد", "proxyError":"بوابة سيئة: غير قادر على الانضمام لالخادم البعيد",
"pwd":"كلمة المرور", "pwd":"كلمة المرور",
@ -312,4 +316,4 @@
"yourProfile":"Know your profile", "yourProfile":"Know your profile",
"yourTotpKey":"Your TOTP key", "yourTotpKey":"Your TOTP key",
"yubikey2f":"Yubikey" "yubikey2f":"Yubikey"
} }

View File

@ -86,9 +86,11 @@
"PE94":"Ein gefordertes Attribut ist nicht verfügbar", "PE94":"Ein gefordertes Attribut ist nicht verfügbar",
"PE95":"Access not granted on DECRYPT service", "PE95":"Access not granted on DECRYPT service",
"PE96":"Invalid verification code", "PE96":"Invalid verification code",
"PE97":"Please select your new certificate", "PE97":"Your certificate is invalid or expires soon",
"PE98":"Please select your new certificate", "PE98":"Please select your new certificate",
"PE99":"Your certificate is invalid or expires soon", "PE99":"Please select your new certificate",
"PE100":"Password contains not allowed character",
"PE101":"Password contains not allowed characters",
"2fRegRequired":"Dieser Dienst benötigt Zwei-Faktor-Authentifizierung. Bitte legen Sie ein Gerät an und gehen dann zum Portal zurück.", "2fRegRequired":"Dieser Dienst benötigt Zwei-Faktor-Authentifizierung. Bitte legen Sie ein Gerät an und gehen dann zum Portal zurück.",
"accept":"Akzeptieren", "accept":"Akzeptieren",
"accessDenied":"Sie haben keine Zugriffsberechtigung für diese Anwendung", "accessDenied":"Sie haben keine Zugriffsberechtigung für diese Anwendung",
@ -225,6 +227,8 @@
"passwordPolicyMinLower":"Minimal lower characters:", "passwordPolicyMinLower":"Minimal lower characters:",
"passwordPolicyMinUpper":"Minimal upper characters:", "passwordPolicyMinUpper":"Minimal upper characters:",
"passwordPolicyMinDigit":"Minimal digit characters:", "passwordPolicyMinDigit":"Minimal digit characters:",
"passwordPolicyMinSpeChar":"Minimal special characters:",
"passwordPolicySpecialChar":"Allowed special characters:",
"ppGrace":"verbleibende Authentifizierungen, bitte Passwort ändern !", "ppGrace":"verbleibende Authentifizierungen, bitte Passwort ändern !",
"proxyError":"Bad gateway: Der Remote-Server kann nicht verbunden werden", "proxyError":"Bad gateway: Der Remote-Server kann nicht verbunden werden",
"pwd":"Passwort", "pwd":"Passwort",
@ -311,4 +315,4 @@
"yourProfile":"Know your profile", "yourProfile":"Know your profile",
"yourTotpKey":"Your TOTP key", "yourTotpKey":"Your TOTP key",
"yubikey2f":"Yubikey" "yubikey2f":"Yubikey"
} }

View File

@ -86,9 +86,11 @@
"PE94":"A required attribute is not available", "PE94":"A required attribute is not available",
"PE95":"Access not granted on DECRYPT service", "PE95":"Access not granted on DECRYPT service",
"PE96":"Invalid verification code", "PE96":"Invalid verification code",
"PE97":"Please select your new certificate", "PE97":"Your certificate is invalid or expires soon",
"PE98":"Please select your new certificate", "PE98":"Please select your new certificate",
"PE99":"Your certificate is invalid or expires soon", "PE99":"Please select your new certificate",
"PE100":"Password contains not allowed character",
"PE101":"Password contains not allowed characters",
"2fRegRequired":"This service requires a double factor authentication. Register a device now, then go back to the portal.", "2fRegRequired":"This service requires a double factor authentication. Register a device now, then go back to the portal.",
"accept":"Accept", "accept":"Accept",
"accessDenied":"You have no access authorization for this application", "accessDenied":"You have no access authorization for this application",
@ -226,6 +228,8 @@
"passwordPolicyMinLower":"Minimal lower characters:", "passwordPolicyMinLower":"Minimal lower characters:",
"passwordPolicyMinUpper":"Minimal upper characters:", "passwordPolicyMinUpper":"Minimal upper characters:",
"passwordPolicyMinDigit":"Minimal digit characters:", "passwordPolicyMinDigit":"Minimal digit characters:",
"passwordPolicyMinSpeChar":"Minimal special characters:",
"passwordPolicySpecialChar":"Allowed special characters:",
"ppGrace":"authentications remaining, change your password!", "ppGrace":"authentications remaining, change your password!",
"proxyError":"Bad gateway: unable to join remote server", "proxyError":"Bad gateway: unable to join remote server",
"pwd":"Password", "pwd":"Password",

View File

@ -89,6 +89,8 @@
"PE97":"Su certificado no es válido o expira próximamente", "PE97":"Su certificado no es válido o expira próximamente",
"PE98":"Por favor, seleccione su nuevo certificado", "PE98":"Por favor, seleccione su nuevo certificado",
"PE99":"Por favor, seleccione su nuevo certificado", "PE99":"Por favor, seleccione su nuevo certificado",
"PE100":"Password contains not allowed character",
"PE101":"Password contains not allowed characters",
"2fRegRequired":"Este servicio necesita la autenticación de dos factores. Registre un dispositivo ahora, luego reingrese al portal.", "2fRegRequired":"Este servicio necesita la autenticación de dos factores. Registre un dispositivo ahora, luego reingrese al portal.",
"accept":"Aceptar", "accept":"Aceptar",
"accessDenied":"No está autorizado a acceder a esta aplicación", "accessDenied":"No está autorizado a acceder a esta aplicación",
@ -225,6 +227,8 @@
"passwordPolicyMinLower":"Minúsculas, como mínimo:", "passwordPolicyMinLower":"Minúsculas, como mínimo:",
"passwordPolicyMinUpper":"Mayúsculas, como mínimo:", "passwordPolicyMinUpper":"Mayúsculas, como mínimo:",
"passwordPolicyMinDigit":"Dígitos, como mínimo:", "passwordPolicyMinDigit":"Dígitos, como mínimo:",
"passwordPolicyMinSpeChar":"Minimal special characters:",
"passwordPolicySpecialChar":"Allowed special characters:",
"ppGrace":"autenticaciones restantes, ¡cambie su contraseña!.", "ppGrace":"autenticaciones restantes, ¡cambie su contraseña!.",
"proxyError":"Puerta de enlace no válida: servidor remoto inalcanzable", "proxyError":"Puerta de enlace no válida: servidor remoto inalcanzable",
"pwd":"Contraseña", "pwd":"Contraseña",

View File

@ -86,9 +86,11 @@
"PE94":"A required attribute is not available", "PE94":"A required attribute is not available",
"PE95":"Access not granted on DECRYPT service", "PE95":"Access not granted on DECRYPT service",
"PE96":"Invalid verification code", "PE96":"Invalid verification code",
"PE97":"Please select your new certificate", "PE97":"Your certificate is invalid or expires soon",
"PE98":"Please select your new certificate", "PE98":"Please select your new certificate",
"PE99":"Your certificate is invalid or expires soon", "PE99":"Please select your new certificate",
"PE100":"Password contains not allowed character",
"PE101":"Password contains not allowed characters",
"2fRegRequired":"This service requires a double factor authentication. Register a device now, then go back to the portal.", "2fRegRequired":"This service requires a double factor authentication. Register a device now, then go back to the portal.",
"accept":"Hyväksy", "accept":"Hyväksy",
"accessDenied":"Sinulla ei ole käyttöoikeutta tähän sovellukseen", "accessDenied":"Sinulla ei ole käyttöoikeutta tähän sovellukseen",
@ -225,6 +227,8 @@
"passwordPolicyMinLower":"Minimal lower characters:", "passwordPolicyMinLower":"Minimal lower characters:",
"passwordPolicyMinUpper":"Minimal upper characters:", "passwordPolicyMinUpper":"Minimal upper characters:",
"passwordPolicyMinDigit":"Minimal digit characters:", "passwordPolicyMinDigit":"Minimal digit characters:",
"passwordPolicyMinSpeChar":"Minimal special characters:",
"passwordPolicySpecialChar":"Allowed special characters:",
"ppGrace":"authentications remaining, change your password!", "ppGrace":"authentications remaining, change your password!",
"proxyError":"Bad gateway: unable to join remote server", "proxyError":"Bad gateway: unable to join remote server",
"pwd":"Salasana", "pwd":"Salasana",
@ -311,4 +315,4 @@
"yourProfile":"Know your profile", "yourProfile":"Know your profile",
"yourTotpKey":"Your TOTP key", "yourTotpKey":"Your TOTP key",
"yubikey2f":"Yubikey" "yubikey2f":"Yubikey"
} }

View File

@ -19,7 +19,7 @@
"PE25":"Le mot de passe a été réinitialisé et doit être changé", "PE25":"Le mot de passe a été réinitialisé et doit être changé",
"PE26":"Modification du mot de passe non autorisée", "PE26":"Modification du mot de passe non autorisée",
"PE27":"Ancien mot de passe à fournir pour le changer", "PE27":"Ancien mot de passe à fournir pour le changer",
"PE28":"Qualité de mot de passe insuffisante", "PE28":"Qualité du mot de passe insuffisante",
"PE29":"Mot de passe trop court", "PE29":"Mot de passe trop court",
"PE30":"Mot de passe trop récent", "PE30":"Mot de passe trop récent",
"PE31":"Mot de passe utilisé trop récemment", "PE31":"Mot de passe utilisé trop récemment",
@ -86,9 +86,11 @@
"PE94":"Un attribut exigé n'est pas disponible", "PE94":"Un attribut exigé n'est pas disponible",
"PE95":"Accès non autorisé au service de déchiffrement", "PE95":"Accès non autorisé au service de déchiffrement",
"PE96":"Code de sécurité invalide", "PE96":"Code de sécurité invalide",
"PE97":"Veuillez selectionner votre nouveau certificat", "PE97":"Votre certificat est invalide ou expire prochainement",
"PE98":"Veuillez selectionner votre nouveau certificat", "PE98":"Veuillez sélectionner votre nouveau certificat",
"PE99":"votre certificat est invalid ou expire bientot.Veuillez contacter votre administrateur", "PE99":"Veuillez sélectionner votre nouveau certificat",
"PE100":"Le mot de passe contient un caractère interdit",
"PE101":"Le mot de passe contient des caractères interdits",
"2fRegRequired":"Ce service requiert une authentification à deux facteurs. Enregistrez un équipement ici et retournez au portail.", "2fRegRequired":"Ce service requiert une authentification à deux facteurs. Enregistrez un équipement ici et retournez au portail.",
"accept":"Accepter", "accept":"Accepter",
"accessDenied":"Vous n'avez pas les droits d'accès à cette application", "accessDenied":"Vous n'avez pas les droits d'accès à cette application",
@ -225,6 +227,8 @@
"passwordPolicyMinLower": "Minimum de minuscules :", "passwordPolicyMinLower": "Minimum de minuscules :",
"passwordPolicyMinUpper": "Minimum de majuscules :", "passwordPolicyMinUpper": "Minimum de majuscules :",
"passwordPolicyMinDigit": "Minimum de chiffres :", "passwordPolicyMinDigit": "Minimum de chiffres :",
"passwordPolicyMinSpeChar":"Minimum de caractères spéciaux :",
"passwordPolicySpecialChar":"Caractères spéciaux autorisés :",
"ppGrace": "authentifications restantes, changez votre mot de passe !", "ppGrace": "authentifications restantes, changez votre mot de passe !",
"proxyError": "Mauvaise passerelle : impossible de joindre le serveur amont", "proxyError": "Mauvaise passerelle : impossible de joindre le serveur amont",
"pwd":"Mot de passe", "pwd":"Mot de passe",

View File

@ -86,9 +86,11 @@
"PE94":"Attributo richiesto non disponibile", "PE94":"Attributo richiesto non disponibile",
"PE95":"Accesso non concesso sul servizio DECRYPT", "PE95":"Accesso non concesso sul servizio DECRYPT",
"PE96":"Invalid verification code", "PE96":"Invalid verification code",
"PE97":"Please select your new certificate", "PE97":"Your certificate is invalid or expires soon",
"PE98":"Please select your new certificate", "PE98":"Please select your new certificate",
"PE99":"Your certificate is invalid or expires soon", "PE99":"Please select your new certificate",
"PE100":"Password contains not allowed character",
"PE101":"Password contains not allowed characters",
"2fRegRequired":"Questo servizio richiede un'autenticazione a doppio fattore. Registrare un dispositivo ora, quindi tornare al portale.", "2fRegRequired":"Questo servizio richiede un'autenticazione a doppio fattore. Registrare un dispositivo ora, quindi tornare al portale.",
"accept":"Accetta", "accept":"Accetta",
"accessDenied":"Non hai un'autorizzazione di accesso per questa applicazione", "accessDenied":"Non hai un'autorizzazione di accesso per questa applicazione",
@ -225,6 +227,8 @@
"passwordPolicyMinLower":"Minimal lower characters:", "passwordPolicyMinLower":"Minimal lower characters:",
"passwordPolicyMinUpper":"Minimal upper characters:", "passwordPolicyMinUpper":"Minimal upper characters:",
"passwordPolicyMinDigit":"Minimal digit characters:", "passwordPolicyMinDigit":"Minimal digit characters:",
"passwordPolicyMinSpeChar":"Minimal special characters:",
"passwordPolicySpecialChar":"Allowed special characters:",
"ppGrace":"autenticazioni restanti, modifica la tua password!", "ppGrace":"autenticazioni restanti, modifica la tua password!",
"proxyError":"Gateway errata: impossibile associarsi a un server remoto", "proxyError":"Gateway errata: impossibile associarsi a un server remoto",
"pwd":"Password", "pwd":"Password",
@ -311,4 +315,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

@ -86,9 +86,11 @@
"PE94":"Een vereist attribuut is niet beschikbaar", "PE94":"Een vereist attribuut is niet beschikbaar",
"PE95":"Access not granted on DECRYPT service", "PE95":"Access not granted on DECRYPT service",
"PE96":"Invalid verification code", "PE96":"Invalid verification code",
"PE97":"Please select your new certificate", "PE97":"Your certificate is invalid or expires soon",
"PE98":"Please select your new certificate", "PE98":"Please select your new certificate",
"PE99":"Your certificate is invalid or expires soon", "PE99":"Please select your new certificate",
"PE100":"Password contains not allowed character",
"PE101":"Password contains not allowed characters",
"2fRegRequired":"This service requires a double factor authentication. Register a device now, then go back to the portal.", "2fRegRequired":"This service requires a double factor authentication. Register a device now, then go back to the portal.",
"accept":"Accept", "accept":"Accept",
"accessDenied":"You have no access authorization for this application", "accessDenied":"You have no access authorization for this application",
@ -225,6 +227,8 @@
"passwordPolicyMinLower":"Minimal lower characters:", "passwordPolicyMinLower":"Minimal lower characters:",
"passwordPolicyMinUpper":"Minimal upper characters:", "passwordPolicyMinUpper":"Minimal upper characters:",
"passwordPolicyMinDigit":"Minimal digit characters:", "passwordPolicyMinDigit":"Minimal digit characters:",
"passwordPolicyMinSpeChar":"Minimal special characters:",
"passwordPolicySpecialChar":"Allowed special characters:",
"ppGrace":"authentications remaining, change your password!", "ppGrace":"authentications remaining, change your password!",
"proxyError":"Bad gateway: unable to join remote server", "proxyError":"Bad gateway: unable to join remote server",
"pwd":"Password", "pwd":"Password",
@ -311,4 +315,4 @@
"yourProfile":"Know your profile", "yourProfile":"Know your profile",
"yourTotpKey":"Your TOTP key", "yourTotpKey":"Your TOTP key",
"yubikey2f":"Yubikey" "yubikey2f":"Yubikey"
} }

View File

@ -86,9 +86,11 @@
"PE94":"Um atributo exigido não está disponível", "PE94":"Um atributo exigido não está disponível",
"PE95":"Access not granted on DECRYPT service", "PE95":"Access not granted on DECRYPT service",
"PE96":"Invalid verification code", "PE96":"Invalid verification code",
"PE97":"Please select your new certificate", "PE97":"Your certificate is invalid or expires soon",
"PE98":"Please select your new certificate", "PE98":"Please select your new certificate",
"PE99":"Your certificate is invalid or expires soon", "PE99":"Please select your new certificate",
"PE100":"Password contains not allowed character",
"PE101":"Password contains not allowed characters",
"2fRegRequired":"This service requires a double factor authentication. Register a device now, then go back to the portal.", "2fRegRequired":"This service requires a double factor authentication. Register a device now, then go back to the portal.",
"accept":"Accept", "accept":"Accept",
"accessDenied":"You have no access authorization for this application", "accessDenied":"You have no access authorization for this application",
@ -225,6 +227,8 @@
"passwordPolicyMinLower":"Minimal lower characters:", "passwordPolicyMinLower":"Minimal lower characters:",
"passwordPolicyMinUpper":"Minimal upper characters:", "passwordPolicyMinUpper":"Minimal upper characters:",
"passwordPolicyMinDigit":"Minimal digit characters:", "passwordPolicyMinDigit":"Minimal digit characters:",
"passwordPolicyMinSpeChar":"Minimal special characters:",
"passwordPolicySpecialChar":"Allowed special characters:",
"ppGrace":"authentications remaining, change your password!", "ppGrace":"authentications remaining, change your password!",
"proxyError":"Bad gateway: unable to join remote server", "proxyError":"Bad gateway: unable to join remote server",
"pwd":"Password", "pwd":"Password",
@ -311,4 +315,4 @@
"yourProfile":"Know your profile", "yourProfile":"Know your profile",
"yourTotpKey":"Your TOTP key", "yourTotpKey":"Your TOTP key",
"yubikey2f":"Yubikey" "yubikey2f":"Yubikey"
} }

View File

@ -86,9 +86,11 @@
"PE94":"Un atribut solicitate nu sunt disponibile", "PE94":"Un atribut solicitate nu sunt disponibile",
"PE95":"Access not granted on DECRYPT service", "PE95":"Access not granted on DECRYPT service",
"PE96":"Invalid verification code", "PE96":"Invalid verification code",
"PE97":"Please select your new certificate", "PE97":"Your certificate is invalid or expires soon",
"PE98":"Please select your new certificate", "PE98":"Please select your new certificate",
"PE99":"Your certificate is invalid or expires soon", "PE99":"Please select your new certificate",
"PE100":"Password contains not allowed character",
"PE101":"Password contains not allowed characters",
"2fRegRequired":"This service requires a double factor authentication. Register a device now, then go back to the portal.", "2fRegRequired":"This service requires a double factor authentication. Register a device now, then go back to the portal.",
"accept":"Accept", "accept":"Accept",
"accessDenied":"You have no access authorization for this application", "accessDenied":"You have no access authorization for this application",
@ -225,6 +227,8 @@
"passwordPolicyMinLower":"Minimal lower characters:", "passwordPolicyMinLower":"Minimal lower characters:",
"passwordPolicyMinUpper":"Minimal upper characters:", "passwordPolicyMinUpper":"Minimal upper characters:",
"passwordPolicyMinDigit":"Minimal digit characters:", "passwordPolicyMinDigit":"Minimal digit characters:",
"passwordPolicyMinSpeChar":"Minimal special characters:",
"passwordPolicySpecialChar":"Allowed special characters:",
"ppGrace":"authentications remaining, change your password!", "ppGrace":"authentications remaining, change your password!",
"proxyError":"Bad gateway: unable to join remote server", "proxyError":"Bad gateway: unable to join remote server",
"pwd":"Password", "pwd":"Password",
@ -311,4 +315,4 @@
"yourProfile":"Know your profile", "yourProfile":"Know your profile",
"yourTotpKey":"Your TOTP key", "yourTotpKey":"Your TOTP key",
"yubikey2f":"Yubikey" "yubikey2f":"Yubikey"
} }

View File

@ -89,6 +89,8 @@
"PE97":"Your certificate is invalid or expires soon", "PE97":"Your certificate is invalid or expires soon",
"PE98":"Please select your new certificate", "PE98":"Please select your new certificate",
"PE99":"Please select your new certificate", "PE99":"Please select your new certificate",
"PE100":"Password contains not allowed character",
"PE101":"Password contains not allowed characters",
"2fRegRequired":"Bu servis iki adımlı kimlik doğrulama gerektiriyor. Şimdi bir cihaz ekleyin ve ardından portala geri dönün", "2fRegRequired":"Bu servis iki adımlı kimlik doğrulama gerektiriyor. Şimdi bir cihaz ekleyin ve ardından portala geri dönün",
"accept":"Kabul Et", "accept":"Kabul Et",
"accessDenied":"Bu uygulamaya erişim yetkiniz yok", "accessDenied":"Bu uygulamaya erişim yetkiniz yok",
@ -226,6 +228,8 @@
"passwordPolicyMinLower":"Minimum küçük harf karakter sayısı :", "passwordPolicyMinLower":"Minimum küçük harf karakter sayısı :",
"passwordPolicyMinUpper":"Minimum büyük harf karakter sayısı :", "passwordPolicyMinUpper":"Minimum büyük harf karakter sayısı :",
"passwordPolicyMinDigit":"Minimum rakam karakter sayısı :", "passwordPolicyMinDigit":"Minimum rakam karakter sayısı :",
"passwordPolicyMinSpeChar":"Minimal special characters:",
"passwordPolicySpecialChar":"Allowed special characters:",
"ppGrace":"kimlik doğrulaması kaldı, parolanızı değiştirin!", "ppGrace":"kimlik doğrulaması kaldı, parolanızı değiştirin!",
"proxyError":"Kötü ağ geçidi: uzak sunucuya katılamıyor", "proxyError":"Kötü ağ geçidi: uzak sunucuya katılamıyor",
"pwd":"Parola", "pwd":"Parola",

View File

@ -86,9 +86,11 @@
"PE94":"Một thuộc tính bắt buộc không có sẵn", "PE94":"Một thuộc tính bắt buộc không có sẵn",
"PE95":"Access not granted on DECRYPT service", "PE95":"Access not granted on DECRYPT service",
"PE96":"Invalid verification code", "PE96":"Invalid verification code",
"PE97":"Please select your new certificate", "PE97":"Your certificate is invalid or expires soon",
"PE98":"Please select your new certificate", "PE98":"Please select your new certificate",
"PE99":"Your certificate is invalid or expires soon", "PE99":"Please select your new certificate",
"PE100":"Password contains not allowed character",
"PE101":"Password contains not allowed characters",
"2fRegRequired":"This service requires a double factor authentication. Register a device now, then go back to the portal.", "2fRegRequired":"This service requires a double factor authentication. Register a device now, then go back to the portal.",
"accept":"Chấp nhận", "accept":"Chấp nhận",
"accessDenied":"Bạn không có quyền truy cập vào ứng dụng này", "accessDenied":"Bạn không có quyền truy cập vào ứng dụng này",
@ -225,6 +227,8 @@
"passwordPolicyMinLower":"Minimal lower characters:", "passwordPolicyMinLower":"Minimal lower characters:",
"passwordPolicyMinUpper":"Minimal upper characters:", "passwordPolicyMinUpper":"Minimal upper characters:",
"passwordPolicyMinDigit":"Minimal digit characters:", "passwordPolicyMinDigit":"Minimal digit characters:",
"passwordPolicyMinSpeChar":"Minimal special characters:",
"passwordPolicySpecialChar":"Allowed special characters:",
"ppGrace":"chứng thực vẫn còn, thay đổi mật khẩu của bạn!", "ppGrace":"chứng thực vẫn còn, thay đổi mật khẩu của bạn!",
"proxyError":"Gateway không chính xác: không thể kết nối máy chủ từ xa", "proxyError":"Gateway không chính xác: không thể kết nối máy chủ từ xa",
"pwd":"Mật khẩu", "pwd":"Mật khẩu",
@ -311,4 +315,4 @@
"yourProfile":"Know your profile", "yourProfile":"Know your profile",
"yourTotpKey":"Your TOTP key", "yourTotpKey":"Your TOTP key",
"yubikey2f":"Yubikey" "yubikey2f":"Yubikey"
} }

View File

@ -86,9 +86,11 @@
"PE94":"A required attribute is not available", "PE94":"A required attribute is not available",
"PE95":"Access not granted on DECRYPT service", "PE95":"Access not granted on DECRYPT service",
"PE96":"Invalid verification code", "PE96":"Invalid verification code",
"PE97":"Please select your new certificate", "PE97":"Your certificate is invalid or expires soon",
"PE98":"Please select your new certificate", "PE98":"Please select your new certificate",
"PE99":"Your certificate is invalid or expires soon", "PE99":"Please select your new certificate",
"PE100":"Password contains not allowed character",
"PE101":"Password contains not allowed characters",
"2fRegRequired":"This service requires a double factor authentication. Register a device now, then go back to the portal.", "2fRegRequired":"This service requires a double factor authentication. Register a device now, then go back to the portal.",
"accept":"Accept 方法", "accept":"Accept 方法",
"accessDenied":"您无权访问此应用", "accessDenied":"您无权访问此应用",
@ -225,6 +227,8 @@
"passwordPolicyMinLower":"Minimal lower characters:", "passwordPolicyMinLower":"Minimal lower characters:",
"passwordPolicyMinUpper":"Minimal upper characters:", "passwordPolicyMinUpper":"Minimal upper characters:",
"passwordPolicyMinDigit":"Minimal digit characters:", "passwordPolicyMinDigit":"Minimal digit characters:",
"passwordPolicyMinSpeChar":"Minimal special characters:",
"passwordPolicySpecialChar":"Allowed special characters:",
"ppGrace":"authentications remaining, change your password!", "ppGrace":"authentications remaining, change your password!",
"proxyError":"错误的网关:无法连接远程服务器", "proxyError":"错误的网关:无法连接远程服务器",
"pwd":"密码", "pwd":"密码",
@ -311,4 +315,4 @@
"yourProfile":"Know your profile", "yourProfile":"Know your profile",
"yourTotpKey":"Your TOTP key", "yourTotpKey":"Your TOTP key",
"yubikey2f":"Yubikey" "yubikey2f":"Yubikey"
} }

View File

@ -13,5 +13,11 @@
<TMPL_IF NAME="PPOLICY_MINDIGIT"> <TMPL_IF NAME="PPOLICY_MINDIGIT">
<li><span trspan="passwordPolicyMinDigit">Minimal digit characters:</span> <TMPL_VAR NAME="PPOLICY_MINDIGIT"></li> <li><span trspan="passwordPolicyMinDigit">Minimal digit characters:</span> <TMPL_VAR NAME="PPOLICY_MINDIGIT"></li>
</TMPL_IF> </TMPL_IF>
<TMPL_IF NAME="PPOLICY_MINSPECHAR">
<li><span trspan="passwordPolicyMinSpeChar">Minimal special characters:</span> <TMPL_VAR NAME="PPOLICY_MINSPECHAR"></li>
</TMPL_IF>
<TMPL_IF NAME="PPOLICY_ALLOWEDSPECHAR">
<li><span trspan="passwordPolicySpecialChar">Allowed special characters:</span> <TMPL_VAR NAME="PPOLICY_ALLOWEDSPECHAR"></li>
</TMPL_IF>
</ul> </ul>
</div> </div>

View File

@ -2,8 +2,10 @@ use Test::More;
use strict; use strict;
use IO::String; use IO::String;
use JSON; use JSON;
use Lemonldap::NG::Portal::Main::Constants use Lemonldap::NG::Portal::Main::Constants qw(
qw(PE_PP_PASSWORD_TOO_SHORT PE_PP_INSUFFICIENT_PASSWORD_QUALITY); PE_PP_PASSWORD_TOO_SHORT PE_PP_INSUFFICIENT_PASSWORD_QUALITY
PE_PP_NOT_ALLOWED_CHARACTER PE_PP_NOT_ALLOWED_CHARACTERS
);
require 't/test-lib.pm'; require 't/test-lib.pm';
@ -11,13 +13,16 @@ my $res;
my $client = LLNG::Manager::Test->new( { my $client = LLNG::Manager::Test->new( {
ini => { ini => {
logLevel => 'error', logLevel => 'error',
passwordDB => 'Demo', passwordDB => 'Demo',
portalRequireOldPassword => 1, portalRequireOldPassword => 1,
passwordPolicyMinSize => 6, passwordPolicyMinSize => 6,
passwordPolicyMinLower => 3, passwordPolicyMinLower => 3,
passwordPolicyMinUpper => 3, passwordPolicyMinUpper => 3,
passwordPolicyMinDigit => 1, passwordPolicyMinDigit => 1,
passwordPolicyMinSpeChar => 2,
passwordPolicySpecialChar => ' [ } \ ',
portalDisplayPasswordPolicy => 1
} }
} }
); );
@ -63,10 +68,11 @@ ok(
$res = $client->_post( $res = $client->_post(
'/', '/',
IO::String->new( IO::String->new(
'oldpassword=dwho&newpassword=TESTis0k&confirmpassword=TESTis0k'), 'oldpassword=dwho&newpassword=TESTis0k\}&confirmpassword=TESTis0k\}'
),
cookie => "lemonldap=$id", cookie => "lemonldap=$id",
accept => 'application/json', accept => 'application/json',
length => 62 length => 66
), ),
'Password min size respected' 'Password min size respected'
); );
@ -99,10 +105,11 @@ ok(
$res = $client->_post( $res = $client->_post(
'/', '/',
IO::String->new( IO::String->new(
'oldpassword=dwho&newpassword=TESTl0wer&confirmpassword=TESTl0wer'), 'oldpassword=dwho&newpassword=TESTl0wer\}&confirmpassword=TESTl0wer\}'
),
cookie => "lemonldap=$id", cookie => "lemonldap=$id",
accept => 'application/json', accept => 'application/json',
length => 64 length => 68
), ),
'Password min lower respected' 'Password min lower respected'
); );
@ -135,10 +142,11 @@ ok(
$res = $client->_post( $res = $client->_post(
'/', '/',
IO::String->new( IO::String->new(
'oldpassword=dwho&newpassword=t3stUPPER&confirmpassword=t3stUPPER'), 'oldpassword=dwho&newpassword=t3stUPPER\}&confirmpassword=t3stUPPER\}'
),
cookie => "lemonldap=$id", cookie => "lemonldap=$id",
accept => 'application/json', accept => 'application/json',
length => 64 length => 68
), ),
'Password min upper respected' 'Password min upper respected'
); );
@ -171,16 +179,155 @@ ok(
$res = $client->_post( $res = $client->_post(
'/', '/',
IO::String->new( IO::String->new(
'oldpassword=dwho&newpassword=t3stDIGIT&confirmpassword=t3stDIGIT'), 'oldpassword=dwho&newpassword=t3stDIGIT\}&confirmpassword=t3stDIGIT\}'
),
cookie => "lemonldap=$id", cookie => "lemonldap=$id",
accept => 'application/json', accept => 'application/json',
length => 64 length => 68
), ),
'Password min digit respected' 'Password min digit respected'
); );
expectOK($res); expectOK($res);
count(1); count(1);
# Test min special char
# ---------------------
ok(
$res = $client->_post(
'/',
IO::String->new(
'oldpassword=dwho&newpassword=t3stDIGIT}&confirmpassword=t3stDIGIT}'
),
cookie => "lemonldap=$id",
accept => 'application/json',
length => 66
),
'Password min special char not respected'
);
expectBadRequest($res);
ok( $json = eval { from_json( $res->[2]->[0] ) }, 'Response is JSON' )
or print STDERR "$@\n" . Dumper($res);
ok(
$json->{error} == PE_PP_INSUFFICIENT_PASSWORD_QUALITY,
'Response is PE_PP_INSUFFICIENT_PASSWORD_QUALITY'
) or explain( $json, "error => 28" );
count(3);
ok(
$res = $client->_post(
'/',
IO::String->new(
'oldpassword=dwho&newpassword=t3stDIGIT}@&confirmpassword=t3stDIGIT}@'
),
cookie => "lemonldap=$id",
accept => 'application/json',
length => 68
),
'Password min special char not respected'
);
expectBadRequest($res);
ok( $json = eval { from_json( $res->[2]->[0] ) }, 'Response is JSON' )
or print STDERR "$@\n" . Dumper($res);
ok(
$json->{error} == PE_PP_INSUFFICIENT_PASSWORD_QUALITY,
'Response is PE_PP_INSUFFICIENT_PASSWORD_QUALITY'
) or explain( $json, "error => 28" );
count(3);
ok(
$res = $client->_post(
'/',
IO::String->new(
'oldpassword=dwho&newpassword=t3stDIGIT}@}&confirmpassword=t3stDIGIT}@}'
),
cookie => "lemonldap=$id",
accept => 'application/json',
length => 70
),
'Password special char not allowed'
);
expectBadRequest($res);
ok( $json = eval { from_json( $res->[2]->[0] ) }, 'Response is JSON' )
or print STDERR "$@\n" . Dumper($res);
ok(
$json->{error} == PE_PP_NOT_ALLOWED_CHARACTER,
'Response is PE_PP_NOT_ALLOWED_CHARACTER'
) or explain( $json, "error => 100" );
count(3);
ok(
$res = $client->_post(
'/',
IO::String->new(
'oldpassword=dwho&newpassword=t3stDIGIT}@#}&confirmpassword=t3stDIGIT}@#}'
),
cookie => "lemonldap=$id",
accept => 'application/json',
length => 72
),
'Password special chars not allowed'
);
expectBadRequest($res);
ok( $json = eval { from_json( $res->[2]->[0] ) }, 'Response is JSON' )
or print STDERR "$@\n" . Dumper($res);
ok(
$json->{error} == PE_PP_NOT_ALLOWED_CHARACTERS,
'Response is PE_PP_NOT_ALLOWED_CHARACTERS'
) or explain( $json, "error => 100" );
count(3);
ok(
$res = $client->_post(
'/',
IO::String->new(
'oldpassword=dwho&newpassword=t3stDIGIT\}&confirmpassword=t3stDIGIT\}'
),
cookie => "lemonldap=$id",
accept => 'application/json',
length => 68
),
'Password min special char respected'
);
expectOK($res);
count(1);
ok(
$res =
$client->_get( '/', cookie => "lemonldap=$id", accept => 'text/html' ),
'Get Menu'
);
ok(
$res->[2]->[0] =~
m%<li><span trspan="passwordPolicyMinSize">Minimal size:</span> 6</li>%,
' passwordPolicyMinSize'
) or print STDERR Dumper( $res->[2]->[0] );
ok(
$res->[2]->[0] =~
m%<li><span trspan="passwordPolicyMinLower">Minimal lower characters:</span> 3</li>%,
' passwordPolicyMinLower'
) or print STDERR Dumper( $res->[2]->[0] );
ok(
$res->[2]->[0] =~
m%<li><span trspan="passwordPolicyMinUpper">Minimal upper characters:</span> 3</li>%,
' passwordPolicyMinUpper'
) or print STDERR Dumper( $res->[2]->[0] );
ok(
$res->[2]->[0] =~
m%<li><span trspan="passwordPolicyMinDigit">Minimal digit characters:</span> 1</li>%,
' passwordPolicyMinDigit'
) or print STDERR Dumper( $res->[2]->[0] );
ok(
$res->[2]->[0] =~
m%<li><span trspan="passwordPolicyMinSpeChar">Minimal special characters:</span> 2</li>%,
' passwordPolicyMinSpeChar'
) or print STDERR Dumper( $res->[2]->[0] );
ok(
$res->[2]->[0] =~
m%\Q<li><span trspan="passwordPolicySpecialChar">Allowed special characters:</span> [ } \</li>\E%,
' passwordPolicySpecialChar'
) or print STDERR Dumper( $res->[2]->[0] );
count(7);
# Test $client->logout # Test $client->logout
$client->logout($id); $client->logout($id);

View File

@ -212,14 +212,12 @@ ok( $res->[2]->[0] !~ m%_2fDevices</td>%, '_2fDevices NOT Found!' )
ok( $res->[2]->[0] =~ m%<td scope="row">authMode</td>%, 'Found macro authMode' ) ok( $res->[2]->[0] =~ m%<td scope="row">authMode</td>%, 'Found macro authMode' )
or explain( $res->[2]->[0], 'Macro Key authMode' ); or explain( $res->[2]->[0], 'Macro Key authMode' );
ok( $res->[2]->[0] =~ m%<td scope="row">DEMO</td>%, 'Found DEMO' )
or explain( $res->[2]->[0], 'Macro Value DEMO' );
ok( $res->[2]->[0] =~ m%<td scope="row">real_authMode</td>%, ok( $res->[2]->[0] =~ m%<td scope="row">real_authMode</td>%,
'Found macro real_authMode' ) 'Found macro real_authMode' )
or explain( $res->[2]->[0], 'Macro Key real_authMode' ); or explain( $res->[2]->[0], 'Macro Key real_authMode' );
ok( $res->[2]->[0] =~ m%<td scope="row">TOTP</td>%, 'Found TOTP' ) ok( $res->[2]->[0] =~ m%<td scope="row">TOTP</td>%, 'Found TOTP' )
or explain( $res->[2]->[0], 'Macro Value TOTP' ); or explain( $res->[2]->[0], 'Macro Value TOTP' );
count(8); count(7);
$query =~ s/url=/url=http%3A%2F%2Ftest1.example.com/; $query =~ s/url=/url=http%3A%2F%2Ftest1.example.com/;
ok( ok(

View File

@ -28,6 +28,7 @@ SKIP: {
impersonationMergeSSOgroups => 1, impersonationMergeSSOgroups => 1,
totp2fSelfRegistration => 1, totp2fSelfRegistration => 1,
totp2fActivation => 1, totp2fActivation => 1,
totp2fAuthnLevel => 8
} }
} }
); );
@ -233,6 +234,46 @@ m%<div class="alert alert-success"><div class="text-center"><b><span trspan="all
or explain( $res->[2]->[0], 'Macro Key _whatToTrace' ); or explain( $res->[2]->[0], 'Macro Key _whatToTrace' );
count(12); count(12);
ok(
$res = $client->_get(
'/checkuser',
cookie => "lemonldap=$id",
accept => 'text/html'
),
'CheckUser form',
);
( $host, $url, $query ) =
expectForm( $res, undef, '/checkuser', 'user', 'url' );
ok( $res->[2]->[0] =~ m%<span trspan="checkUserMerged">%,
'Found trspan="checkUserMerged"' )
or explain( $res->[2]->[0], 'trspan="checkUserMerged"' );
count(2);
$query =~ s/user=dwho/user=rtyler/;
ok(
$res = $client->_post(
'/checkuser',
IO::String->new($query),
cookie => "lemonldap=$id",
length => length($query),
accept => 'text/html',
),
'POST checkuser'
);
( $host, $url, $query ) =
expectForm( $res, undef, '/checkuser', 'user', 'url' );
ok( $res->[2]->[0] =~ m%<span trspan="checkUserComputeSession">%,
'Found trspan="checkUserComputeSession"' )
or explain( $res->[2]->[0], 'trspan="checkUserComputeSession"' );
ok( $res->[2]->[0] =~ m%<td scope="row">authMode</td>%,
'Found macro authMode' )
or explain( $res->[2]->[0], 'Macro Key authMode' );
ok( $res->[2]->[0] =~ m%<td scope="row">TOTP</td>%, 'Found TOTP' )
or explain( $res->[2]->[0], 'Macro Value TOTP' );
count(4);
$client->logout($id); $client->logout($id);
} }
clean_sessions(); clean_sessions();

View File

@ -321,8 +321,8 @@ ok( $res->[2]->[0] =~ m%<td scope="row">rtyler/dwho</td>%, 'Found rtyler/dwo' )
count(15); count(15);
my %attributes = map /<td scope="row">(.+)?<\/td>/g, $res->[2]->[0]; my %attributes = map /<td scope="row">(.+)?<\/td>/g, $res->[2]->[0];
ok( scalar keys %attributes == 35, 'Found 35 attributes' ) ok( scalar keys %attributes == 34, 'Found 34 attributes' )
or print STDERR ( keys %attributes < 35 ) or print STDERR ( keys %attributes < 34 )
? "Missing attributes -> " . scalar keys %attributes ? "Missing attributes -> " . scalar keys %attributes
: "Too much attributes -> " . scalar keys %attributes; : "Too much attributes -> " . scalar keys %attributes;
ok( $attributes{'_auth'} eq 'Demo', '_auth' ) ok( $attributes{'_auth'} eq 'Demo', '_auth' )

View File

@ -323,8 +323,10 @@ ok( $res->[2]->[0] =~ m%<td scope="row">_session_kind</td>%,
count(17); count(17);
my %attributes = map /<td scope="row">(.+)?<\/td>/g, $res->[2]->[0]; my %attributes = map /<td scope="row">(.+)?<\/td>/g, $res->[2]->[0];
ok( keys %attributes == 35, 'Found 35 attributes' ) ok( keys %attributes == 34, 'Found 34 attributes' )
or print STDERR "Missing attributes -> " . scalar %attributes; or print STDERR ( keys %attributes < 34 )
? "Missing attributes -> " . scalar keys %attributes
: "Too much attributes -> " . scalar keys %attributes;
ok( $attributes{'_auth'} eq 'Demo', '_auth' ) ok( $attributes{'_auth'} eq 'Demo', '_auth' )
or print STDERR Dumper( \%attributes ); or print STDERR Dumper( \%attributes );
ok( $attributes{'uid'}, 'uid' ) or print STDERR Dumper( \%attributes ); ok( $attributes{'uid'}, 'uid' ) or print STDERR Dumper( \%attributes );

View File

@ -3,7 +3,7 @@ use strict;
use IO::String; use IO::String;
require 't/test-lib.pm'; require 't/test-lib.pm';
my $maintests = 18; my $maintests = 20;
SKIP: { SKIP: {
eval { require Convert::Base32 }; eval { require Convert::Base32 };
@ -18,6 +18,7 @@ SKIP: {
totp2fSelfRegistration => 1, totp2fSelfRegistration => 1,
totp2fActivation => 1, totp2fActivation => 1,
totp2fTTL => 120, totp2fTTL => 120,
totp2fIssuer => 'LLNG_Demo',
portalMainLogo => 'common/logos/logo_llng_old.png', portalMainLogo => 'common/logos/logo_llng_old.png',
} }
} }
@ -73,8 +74,12 @@ SKIP: {
ok( not($@), 'Content is JSON' ) ok( not($@), 'Content is JSON' )
or explain( $res->[2]->[0], 'JSON content' ); or explain( $res->[2]->[0], 'JSON content' );
my ( $key, $token ); my ( $key, $token );
ok( $key = $res->{secret}, 'Found secret' ); ok( $key = $res->{secret}, 'Found secret' ) or print STDERR Dumper($res);
ok( $token = $res->{token}, 'Found token' ); ok( $token = $res->{token}, 'Found token' ) or print STDERR Dumper($res);
ok( $res->{portal} eq 'LLNG_Demo', 'Found issuer' )
or print STDERR Dumper($res);
ok( $res->{user} eq 'dwho', 'Found user' )
or print STDERR Dumper($res);
$key = Convert::Base32::decode_base32($key); $key = Convert::Base32::decode_base32($key);
# Post code # Post code