From 973b987f3a4788f5e28e7313a5581c68ccfe8431 Mon Sep 17 00:00:00 2001 From: Tom Lutzenberger <t.lutzenberger@adito.de> Date: Mon, 10 Aug 2020 13:41:47 +0200 Subject: [PATCH] #1058862: Implementierung der Passwort-Policy Validierung (#1063293) --- entity/Employee_entity/Employee_entity.aod | 1 + .../entityfields/password/onValidation.js | 23 ++++++++++++++++++ .../entityfields/jpassword/onValidation.js | 10 ++++++++ .../_____LANGUAGE_EXTRA.aod | 18 ++++++++++++++ .../_____LANGUAGE_de/_____LANGUAGE_de.aod | 24 +++++++++++++++++++ .../_____LANGUAGE_en/_____LANGUAGE_en.aod | 18 ++++++++++++++ 6 files changed, 94 insertions(+) create mode 100644 entity/Employee_entity/entityfields/password/onValidation.js diff --git a/entity/Employee_entity/Employee_entity.aod b/entity/Employee_entity/Employee_entity.aod index d3ae09d5ec..ed1770b8c1 100644 --- a/entity/Employee_entity/Employee_entity.aod +++ b/entity/Employee_entity/Employee_entity.aod @@ -71,6 +71,7 @@ <contentType>PASSWORD</contentType> <mandatoryProcess>%aditoprj%/entity/Employee_entity/entityfields/password/mandatoryProcess.js</mandatoryProcess> <stateProcess>%aditoprj%/entity/Employee_entity/entityfields/password/stateProcess.js</stateProcess> + <onValidation>%aditoprj%/entity/Employee_entity/entityfields/password/onValidation.js</onValidation> </entityField> <entityField> <name>CONFIRM_PASSWORD</name> diff --git a/entity/Employee_entity/entityfields/password/onValidation.js b/entity/Employee_entity/entityfields/password/onValidation.js new file mode 100644 index 0000000000..594e4ab704 --- /dev/null +++ b/entity/Employee_entity/entityfields/password/onValidation.js @@ -0,0 +1,23 @@ +import("system.neon"); +import("system.result"); +import("system.translate"); +import("system.tools"); +import("system.vars"); + + +// Because employee password can only be set on new records +if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) { + + let newPassword = vars.get("$local.value"); + let policyMessages = tools.validatePasswordPolicies(newPassword); + let messages = []; + + if(newPassword) { + if(Object.keys(policyMessages).length > 0) { + for(let msg in policyMessages) { + messages.push(translate.withArguments(msg, policyMessages[msg])); + } + result.string(messages.join("\n", messages)); + } + } +} diff --git a/entity/Usersettings_entity/entityfields/jpassword/onValidation.js b/entity/Usersettings_entity/entityfields/jpassword/onValidation.js index 26773ba48b..8186278630 100644 --- a/entity/Usersettings_entity/entityfields/jpassword/onValidation.js +++ b/entity/Usersettings_entity/entityfields/jpassword/onValidation.js @@ -1,13 +1,23 @@ import("system.result"); import("system.translate"); +import("system.tools"); import("system.vars"); let newPassword = vars.get("$local.value"); let currentPassword = vars.get("$field.currentPassword"); +let policyMessages = tools.validatePasswordPolicies(newPassword); +let messages = []; if(newPassword) { if(newPassword === currentPassword) { result.string(translate.text("New password must not be the same as the current password")); } + + if(Object.keys(policyMessages).length > 0) { + for(let msg in policyMessages) { + messages.push(translate.withArguments(msg, policyMessages[msg])); + } + result.string(messages.join("\n", messages)); + } } diff --git a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod index 19d06a930f..6c1dddac6a 100644 --- a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod +++ b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod @@ -6893,6 +6893,24 @@ <entry> <key>Workflow Model</key> </entry> + <entry> + <key>Password must contain special characters</key> + </entry> + <entry> + <key>Password must contain numbers</key> + </entry> + <entry> + <key>Password must contain letters</key> + </entry> + <entry> + <key>Password must contain spaces</key> + </entry> + <entry> + <key>Password must be at least %0 characters</key> + </entry> + <entry> + <key>The use of any of your previous %0 passwords is prohibited</key> + </entry> </keyValueMap> <font name="Dialog" style="0" size="11" /> <sqlModels> diff --git a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod index 4e124f18e5..c5cf76e009 100644 --- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod +++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod @@ -8833,6 +8833,30 @@ Bitte Datumseingabe prüfen</value> <entry> <key>Workflow Model</key> </entry> + <entry> + <key>The use of any of your previous %0 passwords is prohibited</key> + <value>Die Verwendung eines Ihrer vorherigen %0 Passwörter ist untersagt</value> + </entry> + <entry> + <key>Password must be at least %0 characters</key> + <value>Passwort muss aus mindestens %0 Zeichen bestehen</value> + </entry> + <entry> + <key>Password must contain letters</key> + <value>Passwort muss Buchstaben enhalten</value> + </entry> + <entry> + <key>Password must contain numbers</key> + <value>Passwort muss Zahlen enhalten</value> + </entry> + <entry> + <key>Password must contain spaces</key> + <value>Passwort muss Leerzeichen enhalten</value> + </entry> + <entry> + <key>Password must contain special characters</key> + <value>Passwort muss Sonderzeichen enhalten</value> + </entry> </keyValueMap> <font name="Dialog" style="0" size="11" /> </language> diff --git a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod index 8beaf1c843..6ba7f62f93 100644 --- a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod +++ b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod @@ -6959,6 +6959,24 @@ <entry> <key>Workflow Model</key> </entry> + <entry> + <key>Password must contain special characters</key> + </entry> + <entry> + <key>Password must contain numbers</key> + </entry> + <entry> + <key>Password must contain letters</key> + </entry> + <entry> + <key>Password must contain spaces</key> + </entry> + <entry> + <key>Password must be at least %0 characters</key> + </entry> + <entry> + <key>The use of any of your previous %0 passwords is prohibited</key> + </entry> </keyValueMap> <font name="Dialog" style="0" size="11" /> </language> -- GitLab