From 35ecb627309b71b60a295fa93b1c821a2a8f30aa Mon Sep 17 00:00:00 2001 From: Oliver Cooper Date: Sun, 13 Feb 2022 17:21:20 +0000 Subject: [PATCH] Add password special character support --- config.inc.php | 1 + languages/bg.lang | 1 + languages/ca.lang | 1 + languages/cn.lang | 1 + languages/cs.lang | 1 + languages/da.lang | 1 + languages/de.lang | 1 + languages/en.lang | 1 + languages/es.lang | 1 + languages/et.lang | 1 + languages/eu.lang | 1 + languages/fi.lang | 1 + languages/fo.lang | 1 + languages/fr.lang | 1 + languages/gl.lang | 1 + languages/hr.lang | 1 + languages/hu.lang | 1 + languages/is.lang | 1 + languages/it.lang | 1 + languages/ja.lang | 1 + languages/lt.lang | 1 + languages/mk.lang | 1 + languages/nb.lang | 1 + languages/nl.lang | 1 + languages/nn.lang | 1 + languages/pl.lang | 1 + languages/pt-br.lang | 1 + languages/pt-pt.lang | 1 + languages/ro.lang | 1 + languages/ru.lang | 1 + languages/sk.lang | 1 + languages/sl.lang | 1 + languages/sv.lang | 1 + languages/tr.lang | 1 + languages/tw.lang | 1 + languages/ua.lang | 1 + tests/ValidatePasswordTest.php | 18 +++++++++++++++++- 37 files changed, 53 insertions(+), 1 deletion(-) diff --git a/config.inc.php b/config.inc.php index e4c63286..12784c10 100644 --- a/config.inc.php +++ b/config.inc.php @@ -240,6 +240,7 @@ $CONF['password_validation'] = array( '/.{5}/' => 'password_too_short 5', # minimum length 5 characters '/([a-zA-Z].*){3}/' => 'password_no_characters 3', # must contain at least 3 characters '/([0-9].*){2}/' => 'password_no_digits 2', # must contain at least 2 digits +# '/([!\".,*&^%$£)(_+=\-`\'#@~\[\]\\<>\/].*){1}/' => 'password_no_special 1', # must contain at least 1 special character /* support a 'callable' value which if it returns a non-empty string will be assumed to have failed, non-empty string should be a PALANG key */ // 'length_check' => function($password) { if (strlen(trim($password)) < 3) { return 'password_too_short'; } }, diff --git a/languages/bg.lang b/languages/bg.lang index c73cc51a..f688ff78 100644 --- a/languages/bg.lang +++ b/languages/bg.lang @@ -351,6 +351,7 @@ $PALANG['pStatus_popimap'] = 'POP/IMAP '; # XXX $PALANG['password_too_short'] = "Password is too short - requires %s characters"; # XXX $PALANG['password_no_characters'] = "Your password must contain at least %s letters (A-Z, a-z)."; # XXX $PALANG['password_no_digits'] = "Your password must contain at least %s digit(s)."; # XXX +$PALANG['password_no_special'] = "Your password must contain at least %s special character(s)."; # XXX $PALANG['pInvalidDomainRegex'] = "Invalid domain name %s, fails regexp check"; # XXX $PALANG['pInvalidDomainDNS'] = "Invalid domain %s, and/or not discoverable in DNS"; # XXX $PALANG['pInvalidMailRegex'] = "Invalid email address %s, fails regexp check"; # XXX diff --git a/languages/ca.lang b/languages/ca.lang index 363729f7..3db6cb0a 100644 --- a/languages/ca.lang +++ b/languages/ca.lang @@ -350,6 +350,7 @@ $PALANG['pStatus_popimap'] = 'POP/IMAP '; # XXX $PALANG['password_too_short'] = "Password is too short - requires %s characters"; # XXX $PALANG['password_no_characters'] = "Your password must contain at least %s letters (A-Z, a-z)."; # XXX $PALANG['password_no_digits'] = "Your password must contain at least %s digit(s)."; # XXX +$PALANG['password_no_special'] = "Your password must contain at least %s special character(s)."; # XXX $PALANG['pInvalidDomainRegex'] = "Invalid domain name %s, fails regexp check"; # XXX $PALANG['pInvalidDomainDNS'] = "Invalid domain %s, and/or not discoverable in DNS"; # XXX $PALANG['pInvalidMailRegex'] = "Invalid email address %s, fails regexp check"; # XXX diff --git a/languages/cn.lang b/languages/cn.lang index d2caa790..a5ca6f54 100644 --- a/languages/cn.lang +++ b/languages/cn.lang @@ -350,6 +350,7 @@ $PALANG['pStatus_popimap'] = 'POP/IMAP '; # XXX $PALANG['password_too_short'] = "Password is too short - requires %s characters"; # XXX $PALANG['password_no_characters'] = "Your password must contain at least %s letters (A-Z, a-z)."; # XXX $PALANG['password_no_digits'] = "Your password must contain at least %s digit(s)."; # XXX +$PALANG['password_no_special'] = "Your password must contain at least %s special character(s)."; # XXX $PALANG['pInvalidDomainRegex'] = "Invalid domain name %s, fails regexp check"; # XXX $PALANG['pInvalidDomainDNS'] = "Invalid domain %s, and/or not discoverable in DNS"; # XXX $PALANG['pInvalidMailRegex'] = "Invalid email address %s, fails regexp check"; # XXX diff --git a/languages/cs.lang b/languages/cs.lang index 4f929df6..45168f97 100644 --- a/languages/cs.lang +++ b/languages/cs.lang @@ -364,6 +364,7 @@ $PALANG['pStatus_popimap'] = 'POP/IMAP '; $PALANG['password_too_short'] = "Heslo je příliš krátké - je vyžadováno minimálně %s znaků"; $PALANG['password_no_characters'] = "Heslo musí obsahovat alespoň %s písmen/a (A-Z, a-z)."; $PALANG['password_no_digits'] = "Heslo musí obsahovat alespoň %s číslici(-ce)."; +$PALANG['password_no_special'] = "Your password must contain at least %s special character(s)."; # XXX $PALANG['pInvalidDomainRegex'] = "Neplatné doménové jméno %s, nevyhovělo regulárnímu výrazu"; $PALANG['pInvalidDomainDNS'] = "Neplatná doména %s, a/nebo nezjištěn DNS záznam."; $PALANG['pInvalidMailRegex'] = "Neplatná emailová adresa %s, nevyhověla regulárnímu výrazu."; diff --git a/languages/da.lang b/languages/da.lang index ef498b6e..b9bd6be4 100644 --- a/languages/da.lang +++ b/languages/da.lang @@ -363,6 +363,7 @@ $PALANG['pStatus_popimap'] = 'POP/IMAP '; $PALANG['password_too_short'] = "Adgangskoden er for kort. Der kræves mindst %s tegn"; $PALANG['password_no_characters'] = "Your password must contain at least %s letters (A-Z, a-z)."; # XXX $PALANG['password_no_digits'] = "Your password must contain at least %s digit(s)."; # XXX +$PALANG['password_no_special'] = "Your password must contain at least %s special character(s)."; # XXX $PALANG['pInvalidDomainRegex'] = "Ugyldigt domæne-navn %s. Fejlede regulært udtryks-tjek"; $PALANG['pInvalidDomainDNS'] = "Ugyldigt domæne %s, og/eller ikke fundet i DNS"; $PALANG['pInvalidMailRegex'] = "Ugyldig emailadresse %s. Fejlede regulært udtryks-tjek"; # XXX %s added, check if text is ok diff --git a/languages/de.lang b/languages/de.lang index 7fcf52de..14dd2046 100644 --- a/languages/de.lang +++ b/languages/de.lang @@ -361,6 +361,7 @@ $PALANG['pStatus_popimap'] = 'POP/IMAP '; $PALANG['password_too_short'] = "Das Passwort ist zu kurz - mindestens %s Zeichen benötigt"; $PALANG['password_no_characters'] = "Ihr Passwort muss mindestens %s Buchstaben (A-Z, a-z) enthalten."; $PALANG['password_no_digits'] = "Ihr Passwort muss mindestens %s Ziffer(n) enthalten."; +$PALANG['password_no_special'] = "Your password must contain at least %s special character(s)."; # XXX $PALANG['pInvalidDomainRegex'] = "Ungültiger Domainname %s - Überprüfung per RegEx fehlgeschlagen"; $PALANG['pInvalidDomainDNS'] = "Ungültige Domain %s - nicht per DNS auflösbar"; $PALANG['pInvalidMailRegex'] = "Ungültige Mailadresse %s - Überprüfung per RegEx fehlgeschlagen"; diff --git a/languages/en.lang b/languages/en.lang index 55a70201..f2a32d1b 100644 --- a/languages/en.lang +++ b/languages/en.lang @@ -363,6 +363,7 @@ $PALANG['pStatus_popimap'] = 'POP/IMAP '; $PALANG['password_too_short'] = "Password is too short - requires %s characters"; $PALANG['password_no_characters'] = "Your password must contain at least %s letters (A-Z, a-z)."; $PALANG['password_no_digits'] = "Your password must contain at least %s digit(s)."; +$PALANG['password_no_special'] = "Your password must contain at least %s special character(s)."; $PALANG['pInvalidDomainRegex'] = "Invalid domain name %s, fails regexp check"; $PALANG['pInvalidDomainDNS'] = "Invalid domain %s, and/or not discoverable in DNS"; $PALANG['pInvalidMailRegex'] = "Invalid email address %s, fails regexp check"; diff --git a/languages/es.lang b/languages/es.lang index 211009b2..b4657910 100644 --- a/languages/es.lang +++ b/languages/es.lang @@ -352,6 +352,7 @@ $PALANG['pStatus_popimap'] = 'POP/IMAP '; # XXX $PALANG['password_too_short'] = "La contraseña es demasiado corta - se necesitan %s caracteres"; $PALANG['password_no_characters'] = "Your password must contain at least %s letters (A-Z, a-z)."; # XXX $PALANG['password_no_digits'] = "Your password must contain at least %s digit(s)."; # XXX +$PALANG['password_no_special'] = "Your password must contain at least %s special character(s)."; # XXX $PALANG['pInvalidDomainRegex'] = "El nombre de dominio %s es inválido, no se ajusta a la expresión regular"; $PALANG['pInvalidDomainDNS'] = "El dominio %s no es válido, y/o no tiene resolución DNS"; $PALANG['pInvalidMailRegex'] = "La dirección de email no es válidas, no se ajusta a la expresión regular (%s)"; # XXX %s added - but it should be in the text, not at the end diff --git a/languages/et.lang b/languages/et.lang index 5cbd4829..accfe852 100644 --- a/languages/et.lang +++ b/languages/et.lang @@ -354,6 +354,7 @@ $PALANG['pStatus_popimap'] = 'POP/IMAP '; # XXX $PALANG['password_too_short'] = "Password is too short - requires %s characters"; # XXX $PALANG['password_no_characters'] = "Your password must contain at least %s letters (A-Z, a-z)."; # XXX $PALANG['password_no_digits'] = "Your password must contain at least %s digit(s)."; # XXX +$PALANG['password_no_special'] = "Your password must contain at least %s special character(s)."; # XXX $PALANG['pInvalidDomainRegex'] = "Invalid domain name %s, fails regexp check"; # XXX $PALANG['pInvalidDomainDNS'] = "Invalid domain %s, and/or not discoverable in DNS"; # XXX $PALANG['pInvalidMailRegex'] = "Invalid email address %s, fails regexp check"; # XXX diff --git a/languages/eu.lang b/languages/eu.lang index dd40eff7..888ff056 100644 --- a/languages/eu.lang +++ b/languages/eu.lang @@ -349,6 +349,7 @@ $PALANG['pStatus_popimap'] = 'POP/IMAP '; # XXX $PALANG['password_too_short'] = "Password is too short - requires %s characters"; # XXX $PALANG['password_no_characters'] = "Your password must contain at least %s letters (A-Z, a-z)."; # XXX $PALANG['password_no_digits'] = "Your password must contain at least %s digit(s)."; # XXX +$PALANG['password_no_special'] = "Your password must contain at least %s special character(s)."; # XXX $PALANG['pInvalidDomainRegex'] = "Invalid domain name %s, fails regexp check"; # XXX $PALANG['pInvalidDomainDNS'] = "Invalid domain %s, and/or not discoverable in DNS"; # XXX $PALANG['pInvalidMailRegex'] = "Invalid email address %s, fails regexp check"; # XXX diff --git a/languages/fi.lang b/languages/fi.lang index 7714686f..283daa2b 100644 --- a/languages/fi.lang +++ b/languages/fi.lang @@ -350,6 +350,7 @@ $PALANG['pStatus_popimap'] = 'POP/IMAP '; $PALANG['password_too_short'] = "Salasana on liian lyhyt, vaaditaan %s merkkiä"; $PALANG['password_no_characters'] = "Your password must contain at least %s letters (A-Z, a-z)."; # XXX $PALANG['password_no_digits'] = "Your password must contain at least %s digit(s)."; # XXX +$PALANG['password_no_special'] = "Your password must contain at least %s special character(s)."; # XXX $PALANG['pInvalidDomainRegex'] = "Virheellinen domain nimi %s, ei läpäise regexp testiä"; $PALANG['pInvalidDomainDNS'] = "Virheellinen domain %s ja/tai ei löydy nimipalvelimista"; $PALANG['pInvalidMailRegex'] = "Virheellinen sähköpostiosoite, ei läpäise regexp testiä (%s)"; # XXX %s added - but it should be in the text, not at the end diff --git a/languages/fo.lang b/languages/fo.lang index b0c8a95f..1cdb6b31 100644 --- a/languages/fo.lang +++ b/languages/fo.lang @@ -355,6 +355,7 @@ $PALANG['pStatus_popimap'] = 'POP/IMAP '; # XXX $PALANG['password_too_short'] = "Password is too short - requires %s characters"; # XXX $PALANG['password_no_characters'] = "Your password must contain at least %s letters (A-Z, a-z)."; # XXX $PALANG['password_no_digits'] = "Your password must contain at least %s digit(s)."; # XXX +$PALANG['password_no_special'] = "Your password must contain at least %s special character(s)."; # XXX $PALANG['pInvalidDomainRegex'] = "Invalid domain name %s, fails regexp check"; # XXX $PALANG['pInvalidDomainDNS'] = "Invalid domain %s, and/or not discoverable in DNS"; # XXX $PALANG['pInvalidMailRegex'] = "Invalid email address %s, fails regexp check"; # XXX diff --git a/languages/fr.lang b/languages/fr.lang index 89d7cf71..ccda090d 100644 --- a/languages/fr.lang +++ b/languages/fr.lang @@ -355,6 +355,7 @@ $PALANG['pStatus_popimap'] = 'POP/IMAP '; $PALANG['password_too_short'] = 'Mot de passe trop court. - %s caractères minimum'; $PALANG['password_no_characters'] = 'Votre mot de passe doit contenir au moins %s lettres (A-Z, a-z).'; $PALANG['password_no_digits'] = 'Votre mot de passe doit contenir au moins %s chiffres.'; +$PALANG['password_no_special'] = "Your password must contain at least %s special character(s)."; # XXX $PALANG['pInvalidDomainRegex'] = 'Nom de domaine invalide %s, vérification "regexp" impossible'; $PALANG['pInvalidDomainDNS'] = 'Le domaine %s est invalide et/ou non résolvable via les DNS'; $PALANG['pInvalidMailRegex'] = 'L\'adresse email %s est invalide, vérification "regexp" impossible'; diff --git a/languages/gl.lang b/languages/gl.lang index 789322a7..5e261012 100644 --- a/languages/gl.lang +++ b/languages/gl.lang @@ -350,6 +350,7 @@ $PALANG['pStatus_popimap'] = 'POP/IMAP '; # XXX $PALANG['password_too_short'] = "O contrasinal é demasiado corto - necesitanse %s caracteres"; $PALANG['password_no_characters'] = "O contrasinal debe conter ao menos %s letras (A-Z, a-z)."; # XXX $PALANG['password_no_digits'] = "O contrasinal debe conter ao menos %s díxito(s)."; # XXX +$PALANG['password_no_special'] = "Your password must contain at least %s special character(s)."; # XXX $PALANG['pInvalidDomainRegex'] = "O nome de dominio %s é inválido, non se axusta á expresión regular"; $PALANG['pInvalidDomainDNS'] = "O dominio %s non é válido, e/ou non ten resolución DNS"; $PALANG['pInvalidMailRegex'] = "A dirección de email non é válida, non se axusta á expresión regular (%s)"; # XXX %s added - but it should be in the text, not at the end diff --git a/languages/hr.lang b/languages/hr.lang index 5d34921c..f1231980 100644 --- a/languages/hr.lang +++ b/languages/hr.lang @@ -348,6 +348,7 @@ $PALANG['pStatus_popimap'] = 'POP/IMAP '; # XXX $PALANG['password_too_short'] = "Password is too short - requires %s characters"; # XXX $PALANG['password_no_characters'] = "Your password must contain at least %s letters (A-Z, a-z)."; # XXX $PALANG['password_no_digits'] = "Your password must contain at least %s digit(s)."; # XXX +$PALANG['password_no_special'] = "Your password must contain at least %s special character(s)."; # XXX $PALANG['pInvalidDomainRegex'] = "Invalid domain name %s, fails regexp check"; # XXX $PALANG['pInvalidDomainDNS'] = "Invalid domain %s, and/or not discoverable in DNS"; # XXX $PALANG['pInvalidMailRegex'] = "Invalid email address %s, fails regexp check"; # XXX diff --git a/languages/hu.lang b/languages/hu.lang index ae6e9600..bbe771ba 100644 --- a/languages/hu.lang +++ b/languages/hu.lang @@ -362,6 +362,7 @@ $PALANG['pStatus_popimap'] = 'POP/IMAP '; $PALANG['password_too_short'] = "A Jelszó túl rövid - legalább %s karakter szükséges"; $PALANG['password_no_characters'] = "Your password must contain at least %s letters (A-Z, a-z)."; # XXX $PALANG['password_no_digits'] = "Your password must contain at least %s digit(s)."; # XXX +$PALANG['password_no_special'] = "Your password must contain at least %s special character(s)."; # XXX $PALANG['pInvalidDomainRegex'] = "Invalid domain name %s, fails regexp check"; # XXX $PALANG['pInvalidDomainDNS'] = "Invalid domain %s, and/or not discoverable in DNS"; # XXX $PALANG['pInvalidMailRegex'] = "Invalid email address %s, fails regexp check"; # XXX diff --git a/languages/is.lang b/languages/is.lang index a941031c..e3c208df 100644 --- a/languages/is.lang +++ b/languages/is.lang @@ -350,6 +350,7 @@ $PALANG['pStatus_popimap'] = 'POP/IMAP '; # XXX $PALANG['password_too_short'] = "Password is too short - requires %s characters"; # XXX $PALANG['password_no_characters'] = "Your password must contain at least %s letters (A-Z, a-z)."; # XXX $PALANG['password_no_digits'] = "Your password must contain at least %s digit(s)."; # XXX +$PALANG['password_no_special'] = "Your password must contain at least %s special character(s)."; # XXX $PALANG['pInvalidDomainRegex'] = "Invalid domain name %s, fails regexp check"; # XXX $PALANG['pInvalidDomainDNS'] = "Invalid domain %s, and/or not discoverable in DNS"; # XXX $PALANG['pInvalidMailRegex'] = "Invalid email address %s, fails regexp check"; # XXX diff --git a/languages/it.lang b/languages/it.lang index 26b73da9..51001383 100644 --- a/languages/it.lang +++ b/languages/it.lang @@ -351,6 +351,7 @@ $PALANG['pStatus_popimap'] = 'POP/IMAP '; $PALANG['password_too_short'] = "Password troppo breve - minimo %s caratteri"; $PALANG['password_no_characters'] = "Your password must contain at least %s letters (A-Z, a-z)."; # XXX $PALANG['password_no_digits'] = "Your password must contain at least %s digit(s)."; # XXX +$PALANG['password_no_special'] = "Your password must contain at least %s special character(s)."; # XXX $PALANG['pInvalidDomainRegex'] = "Invalid domain name %s, fails regexp check"; # XXX $PALANG['pInvalidDomainDNS'] = "Invalid domain %s, and/or not discoverable in DNS"; # XXX $PALANG['pInvalidMailRegex'] = "Invalid email address %s, fails regexp check"; # XXX diff --git a/languages/ja.lang b/languages/ja.lang index 43408247..d09e8b03 100644 --- a/languages/ja.lang +++ b/languages/ja.lang @@ -360,6 +360,7 @@ $PALANG['pStatus_popimap'] = 'POP/IMAP '; $PALANG['password_too_short'] = "パスワードが短すぎます。最低 %s 文字必要です。"; $PALANG['password_no_characters'] = "パスワードには、少なくとも %s 個の英字がなくてはなりません。"; # XXX text changed to "Your password must contain at least %s letters (A-Z, a-z)." $PALANG['password_no_digits'] = "パスワードには、少なくとも %s 個の数字がなくてはなりません。"; +$PALANG['password_no_special'] = "Your password must contain at least %s special character(s)."; # XXX $PALANG['pInvalidDomainRegex'] = "不正なドメイン名です[%s]。正規表現チェックで失敗"; $PALANG['pInvalidDomainDNS'] = "不正なドメイン[%s]であるか、もしくは DNS に見当たりません"; $PALANG['pInvalidMailRegex'] = "不正なメールアドレスです[%s]。正規表現チェックで失敗"; diff --git a/languages/lt.lang b/languages/lt.lang index a14983e3..fb18e8c2 100644 --- a/languages/lt.lang +++ b/languages/lt.lang @@ -356,6 +356,7 @@ $PALANG['pStatus_popimap'] = 'POP/IMAP '; # XXX $PALANG['password_too_short'] = "Password is too short - requires %s characters"; # XXX $PALANG['password_no_characters'] = "Your password must contain at least %s letters (A-Z, a-z)."; # XXX $PALANG['password_no_digits'] = "Your password must contain at least %s digit(s)."; # XXX +$PALANG['password_no_special'] = "Your password must contain at least %s special character(s)."; # XXX $PALANG['pInvalidDomainRegex'] = "Invalid domain name %s, fails regexp check"; # XXX $PALANG['pInvalidDomainDNS'] = "Invalid domain %s, and/or not discoverable in DNS"; # XXX $PALANG['pInvalidMailRegex'] = "Invalid email address %s, fails regexp check"; # XXX diff --git a/languages/mk.lang b/languages/mk.lang index e5680a0b..c028fb8c 100644 --- a/languages/mk.lang +++ b/languages/mk.lang @@ -351,6 +351,7 @@ $PALANG['pStatus_popimap'] = 'POP/IMAP '; # XXX $PALANG['password_too_short'] = "Password is too short - requires %s characters"; # XXX $PALANG['password_no_characters'] = "Your password must contain at least %s letters (A-Z, a-z)."; # XXX $PALANG['password_no_digits'] = "Your password must contain at least %s digit(s)."; # XXX +$PALANG['password_no_special'] = "Your password must contain at least %s special character(s)."; # XXX $PALANG['pInvalidDomainRegex'] = "Invalid domain name %s, fails regexp check"; # XXX $PALANG['pInvalidDomainDNS'] = "Invalid domain %s, and/or not discoverable in DNS"; # XXX $PALANG['pInvalidMailRegex'] = "Invalid email address %s, fails regexp check"; # XXX diff --git a/languages/nb.lang b/languages/nb.lang index 63d96705..c65af2a3 100644 --- a/languages/nb.lang +++ b/languages/nb.lang @@ -350,6 +350,7 @@ $PALANG['pStatus_popimap'] = 'POP/IMAP '; $PALANG['password_too_short'] = "Passordet er for kort - det må inneholde minst %s tegn"; $PALANG['password_no_characters'] = "Your password must contain at least %s letters (A-Z, a-z)."; # XXX $PALANG['password_no_digits'] = "Your password must contain at least %s digit(s)."; # XXX +$PALANG['password_no_special'] = "Your password must contain at least %s special character(s)."; # XXX $PALANG['pInvalidDomainRegex'] = "Ugyldig domenenavn %s, regexp-validering feilet"; $PALANG['pInvalidDomainDNS'] = "Ugyldig domene %s, og/eller finnes ikke i DNS"; $PALANG['pInvalidMailRegex'] = "Ugyldig e-postadresse, regexp-validering feilet (%s)"; # XXX %s added - but it should be in the text, not at the end diff --git a/languages/nl.lang b/languages/nl.lang index bf69d943..e88d8f38 100644 --- a/languages/nl.lang +++ b/languages/nl.lang @@ -352,6 +352,7 @@ $PALANG['pStatus_popimap'] = 'POP/IMAP '; $PALANG['password_too_short'] = "Wachtwoord is te kort - moet minimaal %s karakters bevatten"; $PALANG['password_no_characters'] = "Je wachtwoord moet minimaal %s karakter(s) bevatten."; # XXX text changed to "Your password must contain at least %s letters (A-Z, a-z)." $PALANG['password_no_digits'] = "Je wachtwoord moet minimaal %s getal(len) bevatten."; +$PALANG['password_no_special'] = "Your password must contain at least %s special character(s)."; # XXX $PALANG['pInvalidDomainRegex'] = "Ongeldig domein naam %s"; $PALANG['pInvalidDomainDNS'] = "Ongeldig domein %s"; $PALANG['pInvalidMailRegex'] = "Ongeldig email adres %s komt niet door de limietcheck"; # XXX text change to: "Invalid email address %s, fails regexp check" diff --git a/languages/nn.lang b/languages/nn.lang index a59649ab..c5501b7d 100644 --- a/languages/nn.lang +++ b/languages/nn.lang @@ -349,6 +349,7 @@ $PALANG['pStatus_popimap'] = 'POP/IMAP '; # XXX $PALANG['password_too_short'] = "Password is too short - requires %s characters"; # XXX $PALANG['password_no_characters'] = "Your password must contain at least %s letters (A-Z, a-z)."; # XXX $PALANG['password_no_digits'] = "Your password must contain at least %s digit(s)."; # XXX +$PALANG['password_no_special'] = "Your password must contain at least %s special character(s)."; # XXX $PALANG['pInvalidDomainRegex'] = "Invalid domain name %s, fails regexp check"; # XXX $PALANG['pInvalidDomainDNS'] = "Invalid domain %s, and/or not discoverable in DNS"; # XXX $PALANG['pInvalidMailRegex'] = "Invalid email address %s, fails regexp check"; # XXX diff --git a/languages/pl.lang b/languages/pl.lang index fdda9220..a710d751 100644 --- a/languages/pl.lang +++ b/languages/pl.lang @@ -356,6 +356,7 @@ $PALANG['pStatus_popimap'] = 'POP/IMAP '; $PALANG['password_too_short'] = 'Hasło jest za krótkie - musi mieć minimum %s znaków'; $PALANG['password_no_characters'] = "Your password must contain at least %s letters (A-Z, a-z)."; # XXX $PALANG['password_no_digits'] = "Your password must contain at least %s digit(s)."; # XXX +$PALANG['password_no_special'] = "Your password must contain at least %s special character(s)."; # XXX $PALANG['pInvalidDomainRegex'] = 'Nieprawidłowa nazwa domeny %s'; $PALANG['pInvalidDomainDNS'] = 'Nieprawidłowa domena %s, nie wykrywana w DNS'; $PALANG['pInvalidMailRegex'] = 'Nieprawidłowy adres email %s'; # XXX text changed to "Invalid email address %s, fails regexp check" diff --git a/languages/pt-br.lang b/languages/pt-br.lang index 0386f4fd..3c84f7a3 100644 --- a/languages/pt-br.lang +++ b/languages/pt-br.lang @@ -362,6 +362,7 @@ $PALANG['pStatus_popimap'] = 'POP/IMAP '; $PALANG['password_too_short'] = "Senha muito curta - requer %s caracteres"; $PALANG['password_no_characters'] = "Your password must contain at least %s letters (A-Z, a-z)."; # XXX $PALANG['password_no_digits'] = "Your password must contain at least %s digit(s)."; # XXX +$PALANG['password_no_special'] = "Your password must contain at least %s special character(s)."; # XXX $PALANG['pInvalidDomainRegex'] = "Nome de domínio inválido %s, falhou checagem por expressão regular"; $PALANG['pInvalidDomainDNS'] = "Domínio inválido %s, e/ou não pôde ser resolvido por DNS"; $PALANG['pInvalidMailRegex'] = "Endereço de email inválido, falhou checagem por expressão regular (%s)"; # XXX %s added - but it should be in the text, not at the end diff --git a/languages/pt-pt.lang b/languages/pt-pt.lang index a87e3897..2fe9a3bf 100644 --- a/languages/pt-pt.lang +++ b/languages/pt-pt.lang @@ -362,6 +362,7 @@ $PALANG['pStatus_popimap'] = 'POP/IMAP '; $PALANG['password_too_short'] = "Password muito curta - requer %s caracteres"; $PALANG['password_no_characters'] = "A password tem de conter pelo menos %s letras (A-Z, a-z)."; # XXX $PALANG['password_no_digits'] = "A password tem de conter pelo menos %s digito(s)."; # XXX +$PALANG['password_no_special'] = "Your password must contain at least %s special character(s)."; # XXX $PALANG['pInvalidDomainRegex'] = "Nome de domínio inválido %s, falhou a verificação por expressão regular"; $PALANG['pInvalidDomainDNS'] = "Domínio inválido %s, e/ou não pode ser resolvido por DNS"; $PALANG['pInvalidMailRegex'] = "Endereço de email inválido, falhou a verificação por expressão regular (%s)"; # XXX %s added - but it should be in the text, not at the end diff --git a/languages/ro.lang b/languages/ro.lang index f720fc63..218bab94 100644 --- a/languages/ro.lang +++ b/languages/ro.lang @@ -360,6 +360,7 @@ $PALANG['pStatus_popimap'] = 'POP/IMAP '; $PALANG['password_too_short'] = "Parola prea scurta - minim %s caractere"; $PALANG['password_no_characters'] = "Parola trebuie sa contina cel putin %s litere."; # XXX text changed to "Your password must contain at least %s letters (A-Z, a-z)." $PALANG['password_no_digits'] = "Parola trebuie sa contina cel putin %s cifre."; +$PALANG['password_no_special'] = "Your password must contain at least %s special character(s)."; # XXX $PALANG['pInvalidDomainRegex'] = "Nume domeniu incorect %s, verificare regexp esuata"; $PALANG['pInvalidDomainDNS'] = "Nume domeniu incorect %s, si/sau nu se poate rezolva in DNS"; $PALANG['pInvalidMailRegex'] = "Adresa de mail incorecta %s, verificare regexp esuata"; diff --git a/languages/ru.lang b/languages/ru.lang index fccc21ad..0c874d9b 100644 --- a/languages/ru.lang +++ b/languages/ru.lang @@ -363,6 +363,7 @@ $PALANG['pStatus_popimap'] = 'POP/IMAP '; $PALANG['password_too_short'] = "Пароль слишком короткий: требуется %s символов"; $PALANG['password_no_characters'] = "Ваш пароль должен содержать не менее %s символов."; $PALANG['password_no_digits'] = "Ваш пароль должен содержать не менее %s цифр(ы)."; +$PALANG['password_no_special'] = "Your password must contain at least %s special character(s)."; # XXX $PALANG['pInvalidDomainRegex'] = "Некорректное имя домена %s, не соответствует регулярному выражению"; $PALANG['pInvalidDomainDNS'] = "Некорректный домен %s, и/или не обнаруживается в DNS"; $PALANG['pInvalidMailRegex'] = "Некорректный email %s, не соответствует регулярному выражению"; diff --git a/languages/sk.lang b/languages/sk.lang index c30d2792..df1d5c90 100644 --- a/languages/sk.lang +++ b/languages/sk.lang @@ -351,6 +351,7 @@ $PALANG['pStatus_popimap'] = 'POP/IMAP '; $PALANG['password_too_short'] = "Heslo je príliš krátke - musí mať aspoň %s znakov"; $PALANG['password_no_characters'] = "Heslo musí obsahovať aspoň %s písmen."; # XXX text changed to "Your password must contain at least %s letters (A-Z, a-z)." $PALANG['password_no_digits'] = "Heslo musí obsahovať aspoň %s číslic."; +$PALANG['password_no_special'] = "Your password must contain at least %s special character(s)."; # XXX $PALANG['pInvalidDomainRegex'] = "Neplatný názov domény %s"; $PALANG['pInvalidDomainDNS'] = "Neplatná doména %s alebo neexistuje jej DNS záznam"; $PALANG['pInvalidMailRegex'] = "Neplatná emailová adresa %s"; # text change to "Invalid email address %s, fails regexp check" diff --git a/languages/sl.lang b/languages/sl.lang index fd5b7a7a..6378eb59 100644 --- a/languages/sl.lang +++ b/languages/sl.lang @@ -350,6 +350,7 @@ $PALANG['pStatus_popimap'] = 'POP/IMAP '; # XXX $PALANG['password_too_short'] = "Password is too short - requires %s characters"; # XXX $PALANG['password_no_characters'] = "Your password must contain at least %s letters (A-Z, a-z)."; # XXX $PALANG['password_no_digits'] = "Your password must contain at least %s digit(s)."; # XXX +$PALANG['password_no_special'] = "Your password must contain at least %s special character(s)."; # XXX $PALANG['pInvalidDomainRegex'] = "Invalid domain name %s, fails regexp check"; # XXX $PALANG['pInvalidDomainDNS'] = "Invalid domain %s, and/or not discoverable in DNS"; # XXX $PALANG['pInvalidMailRegex'] = "Invalid email address %s, fails regexp check"; # XXX diff --git a/languages/sv.lang b/languages/sv.lang index eaa67072..f0db8990 100644 --- a/languages/sv.lang +++ b/languages/sv.lang @@ -361,6 +361,7 @@ $PALANG['pStatus_popimap'] = 'POP/IMAP '; $PALANG['password_too_short'] = "För kort lösenord - ett lösenord på %s tecken krävs"; $PALANG['password_no_characters'] = "Lösenordet måste innehålla minst %s tecken."; # XXX text changed to "Your password must contain at least %s letters (A-Z, a-z)." $PALANG['password_no_digits'] = "Lösenordet måste innehålla minst %s siffra/siffror."; +$PALANG['password_no_special'] = "Your password must contain at least %s special character(s)."; # XXX $PALANG['pInvalidDomainRegex'] = "Regexp-kollen misslyckas på domänen %s"; $PALANG['pInvalidDomainDNS'] = "Domänen %s finns inte i DNS"; $PALANG['pInvalidMailRegex'] = "Regexp-kollen misslyckas på e-postadressen %s"; diff --git a/languages/tr.lang b/languages/tr.lang index d32b3820..23e2a471 100644 --- a/languages/tr.lang +++ b/languages/tr.lang @@ -350,6 +350,7 @@ $PALANG['pStatus_popimap'] = 'POP/IMAP '; # XXX $PALANG['password_too_short'] = "Şifre çok kısa - en az %s karakter gerekli"; $PALANG['password_no_characters'] = "Şifreniz en az %s karakter içermeli (A-Z, a-z)."; $PALANG['password_no_digits'] = "Şifreniz en az %s rakam içermeli."; +$PALANG['password_no_special'] = "Your password must contain at least %s special character(s)."; # XXX $PALANG['pInvalidDomainRegex'] = "Geçersiz domain ismi: %s, kontrol edilemedi"; $PALANG['pInvalidDomainDNS'] = "Geçersiz domain: %s, ve/veya DNS tarafından çözümlenemedi"; $PALANG['pInvalidMailRegex'] = "Geçersiz e-posta adresi: %s, kontrol edilemedi"; diff --git a/languages/tw.lang b/languages/tw.lang index 49eaf46d..a81f4075 100644 --- a/languages/tw.lang +++ b/languages/tw.lang @@ -352,6 +352,7 @@ $PALANG['pStatus_popimap'] = 'POP/IMAP '; # XXX $PALANG['password_too_short'] = "密碼太短 - 需要 %s 個字附"; $PALANG['password_no_characters'] = "你的密碼最少要有 %s 字母。"; # XXX text changed to "Your password must contain at least %s letters (A-Z, a-z)." $PALANG['password_no_digits'] = "你的密碼最少要有 %s 數字。"; +$PALANG['password_no_special'] = "Your password must contain at least %s special character(s)."; # XXX $PALANG['pInvalidDomainRegex'] = "網域名 %s 不正確,未能通過 regexp 檢查"; $PALANG['pInvalidDomainDNS'] = "網域名 %s 不正確,或在DNS找不到"; $PALANG['pInvalidMailRegex'] = '電郵地址 %s 不正確,未能通過 regexp 檢查'; diff --git a/languages/ua.lang b/languages/ua.lang index 2a8438f9..2bae195f 100644 --- a/languages/ua.lang +++ b/languages/ua.lang @@ -363,6 +363,7 @@ $PALANG['pStatus_popimap'] = 'POP/IMAP '; $PALANG['password_too_short'] = 'Пароль занадто короткий - потрібно %s символів'; $PALANG['password_no_characters'] = 'Ваш пароль повинен містити не менше ніж %s символів (A-Z, a-z).'; $PALANG['password_no_digits'] = 'Ваш пароль повинен містити не менше ніж %s цифр(и).'; +$PALANG['password_no_special'] = "Your password must contain at least %s special character(s)."; # XXX $PALANG['pInvalidDomainRegex'] = 'Некоректне ім'я домену %s, не відповідає регулярному виразу'; $PALANG['pInvalidDomainDNS'] = 'Некоректний домен %s, та/або не виявляється в DNS'; $PALANG['pInvalidMailRegex'] = 'Некоректний Email %s, не відповідає регулярному виразу'; diff --git a/tests/ValidatePasswordTest.php b/tests/ValidatePasswordTest.php index f3d69847..de9f2a44 100644 --- a/tests/ValidatePasswordTest.php +++ b/tests/ValidatePasswordTest.php @@ -8,10 +8,11 @@ class ValidatePasswordTest extends \PHPUnit\Framework\TestCase // Set to the defaults, just to make sure. Config::write('password_validation', array( -# '/regular expression/' => '$PALANG key (optional: + parameter)', + # '/regular expression/' => '$PALANG key (optional: + parameter)', '/.{5}/' => 'password_too_short 5', # minimum length 5 characters '/([a-zA-Z].*){3}/' => 'password_no_characters 3', # must contain at least 3 characters '/([0-9].*){2}/' => 'password_no_digits 2', # must contain at least 2 digits + # '/([!\".,*&^%$£)(_+=\-`\'#@~\[\]\\<>\/].*){1}/' => 'password_no_special 1', # must contain at least 1 special character )); $this->assertEmpty(validate_password('fishSheep01')); @@ -19,4 +20,19 @@ class ValidatePasswordTest extends \PHPUnit\Framework\TestCase $this->assertNotEmpty(validate_password('pas')); // notEmpty == fail $this->assertNotEmpty(validate_password('pa1')); } + + public function testSpecial() + { + $config = Config::getInstance(); + + // Set to the defaults, just to make sure. + Config::write('password_validation', array( + '/([!\".,*&^%$£)(_+=\-`\'#@~\[\]\\<>\/].*){2}/' => 'password_no_special 1', # must contain at least 1 special character + )); + + $this->assertEmpty(validate_password('fish^Sh$$p01')); + $this->assertEmpty(validate_password(']/>')); + $this->assertEmpty(validate_password("P'55w\ord")); + $this->assertNotEmpty(validate_password("fish'Sheep01")); + } }