mirror of https://github.com/portainer/portainer
fix(pwd) EE-3161 ease the minimum password restrictions to 12 characters (#6921)
* fix(pwd): EE-3161 ease the minimum password restrictions to 12 characterspull/6922/head
parent
d9d1d6bfaa
commit
16f8b737f1
|
@ -1,33 +1,11 @@
|
||||||
package passwordutils
|
package passwordutils
|
||||||
|
|
||||||
import (
|
|
||||||
"regexp"
|
|
||||||
)
|
|
||||||
|
|
||||||
const MinPasswordLen = 12
|
const MinPasswordLen = 12
|
||||||
|
|
||||||
func lengthCheck(password string) bool {
|
func lengthCheck(password string) bool {
|
||||||
return len(password) >= MinPasswordLen
|
return len(password) >= MinPasswordLen
|
||||||
}
|
}
|
||||||
|
|
||||||
func comboCheck(password string) bool {
|
|
||||||
count := 0
|
|
||||||
regexps := [4]*regexp.Regexp{
|
|
||||||
regexp.MustCompile(`[a-z]`),
|
|
||||||
regexp.MustCompile(`[A-Z]`),
|
|
||||||
regexp.MustCompile(`[0-9]`),
|
|
||||||
regexp.MustCompile(`[\W_]`),
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, re := range regexps {
|
|
||||||
if re.FindString(password) != "" {
|
|
||||||
count += 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return count >= 3
|
|
||||||
}
|
|
||||||
|
|
||||||
func StrengthCheck(password string) bool {
|
func StrengthCheck(password string) bool {
|
||||||
return lengthCheck(password) && comboCheck(password)
|
return lengthCheck(password)
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,9 +13,9 @@ func TestStrengthCheck(t *testing.T) {
|
||||||
}{
|
}{
|
||||||
{"Empty password", args{""}, false},
|
{"Empty password", args{""}, false},
|
||||||
{"Short password", args{"portainer"}, false},
|
{"Short password", args{"portainer"}, false},
|
||||||
{"Short password", args{"portaienr!@#"}, false},
|
{"Short password", args{"portaienr!@#"}, true},
|
||||||
{"Week password", args{"12345678!@#"}, false},
|
{"Week password", args{"12345678!@#"}, false},
|
||||||
{"Week password", args{"portaienr123"}, false},
|
{"Week password", args{"portaienr123"}, true},
|
||||||
{"Good password", args{"Portainer123"}, true},
|
{"Good password", args{"Portainer123"}, true},
|
||||||
{"Good password", args{"Portainer___"}, true},
|
{"Good password", args{"Portainer___"}, true},
|
||||||
{"Good password", args{"^portainer12"}, true},
|
{"Good password", args{"^portainer12"}, true},
|
||||||
|
|
|
@ -2,17 +2,6 @@ import { react2angular } from '@/react-tools/react2angular';
|
||||||
|
|
||||||
import { MinPasswordLen } from '../helpers/password';
|
import { MinPasswordLen } from '../helpers/password';
|
||||||
|
|
||||||
function PasswordCombination() {
|
|
||||||
return (
|
|
||||||
<ul className="text-muted">
|
|
||||||
<li className="ml-8"> Special characters </li>
|
|
||||||
<li className="ml-8"> Lower case characters </li>
|
|
||||||
<li className="ml-8"> Upper case characters </li>
|
|
||||||
<li className="ml-8"> Numeric characters </li>
|
|
||||||
</ul>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
export function ForcePasswordUpdateHint() {
|
export function ForcePasswordUpdateHint() {
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
|
@ -25,11 +14,8 @@ export function ForcePasswordUpdateHint() {
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p className="text-muted">
|
<p className="text-muted">
|
||||||
The password must be at least {MinPasswordLen} characters long,
|
The password must be at least {MinPasswordLen} characters long.
|
||||||
including a combination of one character of three of the below:
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<PasswordCombination />
|
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -42,12 +28,9 @@ export function PasswordCheckHint() {
|
||||||
{' '}
|
{' '}
|
||||||
</i>
|
</i>
|
||||||
<span>
|
<span>
|
||||||
The password must be at least {MinPasswordLen} characters long,
|
The password must be at least {MinPasswordLen} characters long.
|
||||||
including a combination of one character of three of the below:
|
|
||||||
</span>
|
</span>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<PasswordCombination />
|
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,19 +4,6 @@ function lengthCheck(password: string) {
|
||||||
return password.length >= MinPasswordLen;
|
return password.length >= MinPasswordLen;
|
||||||
}
|
}
|
||||||
|
|
||||||
function comboCheck(password: string) {
|
|
||||||
let count = 0;
|
|
||||||
const regexps = [/[a-z]/, /[A-Z]/, /[0-9]/, /[\W_]/];
|
|
||||||
|
|
||||||
regexps.forEach((re) => {
|
|
||||||
if (password.match(re) != null) {
|
|
||||||
count += 1;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
return count >= 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
export function StrengthCheck(password: string) {
|
export function StrengthCheck(password: string) {
|
||||||
return lengthCheck(password) && comboCheck(password);
|
return lengthCheck(password);
|
||||||
}
|
}
|
||||||
|
|
|
@ -68,14 +68,8 @@
|
||||||
<!-- it is a workaround for firefox that does not render component <force-password-update-hint> -->
|
<!-- it is a workaround for firefox that does not render component <force-password-update-hint> -->
|
||||||
<p>
|
<p>
|
||||||
<i class="fa fa-times red-icon space-right" aria-hidden="true"></i>
|
<i class="fa fa-times red-icon space-right" aria-hidden="true"></i>
|
||||||
<span>The password must be at least {{ MinPasswordLen }} characters long, including a combination of one character of three of the below:</span>
|
<span>The password must be at least {{ MinPasswordLen }} characters long.</span>
|
||||||
</p>
|
</p>
|
||||||
<ul>
|
|
||||||
<li class="ml-8"> Special characters </li>
|
|
||||||
<li class="ml-8"> Lower case characters </li>
|
|
||||||
<li class="ml-8"> Upper case characters </li>
|
|
||||||
<li class="ml-8"> Numeric characters </li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- !note -->
|
<!-- !note -->
|
||||||
|
|
Loading…
Reference in New Issue