62 lines
2.0 KiB
JavaScript
62 lines
2.0 KiB
JavaScript
/** Правила пароля — как в админке и setup wizard. Логин без ограничений по символам. */
|
|
export const DEFAULT_PASSWORD_MIN_LEN = 8;
|
|
export const LOGIN_MAX_LEN = 64;
|
|
export const PASSWORD_COMPLEXITY_MSG =
|
|
"Пароль не должен состоять только из цифр или только из букв. Смешайте буквы и цифры.";
|
|
|
|
export function validateNewUserCredentials({
|
|
login,
|
|
password,
|
|
confirmPassword,
|
|
passwordMinLen = DEFAULT_PASSWORD_MIN_LEN,
|
|
label = "",
|
|
}) {
|
|
const prefix = label ? `${label}: ` : "";
|
|
const trimmedLogin = String(login || "").trim();
|
|
if (!trimmedLogin) return `${prefix}укажите логин.`;
|
|
if (trimmedLogin.length > LOGIN_MAX_LEN) {
|
|
return `${prefix}логин не длиннее ${LOGIN_MAX_LEN} символов.`;
|
|
}
|
|
if (!password) return `${prefix}укажите пароль.`;
|
|
if (password !== confirmPassword) return `${prefix}пароли не совпадают.`;
|
|
if (password.length < passwordMinLen) {
|
|
return `${prefix}пароль не короче ${passwordMinLen} символов.`;
|
|
}
|
|
if (/^\d+$/.test(password) || /^[a-zA-Z]+$/.test(password)) {
|
|
return `${prefix}${PASSWORD_COMPLEXITY_MSG}`;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
export function validateCredentialChange({
|
|
oldLogin,
|
|
oldPassword,
|
|
newLogin,
|
|
newPassword,
|
|
confirmPassword,
|
|
passwordMinLen = DEFAULT_PASSWORD_MIN_LEN,
|
|
}) {
|
|
if (!oldLogin || !oldPassword) {
|
|
return "Укажите текущий логин и пароль";
|
|
}
|
|
return validateNewUserCredentials({
|
|
login: newLogin,
|
|
password: newPassword,
|
|
confirmPassword,
|
|
passwordMinLen,
|
|
});
|
|
}
|
|
|
|
export function ensureCredentialsFormHints() {}
|
|
|
|
if (typeof globalThis !== "undefined") {
|
|
globalThis.WespUserCredentials = {
|
|
DEFAULT_PASSWORD_MIN_LEN,
|
|
LOGIN_MAX_LEN,
|
|
PASSWORD_COMPLEXITY_MSG,
|
|
validateCredentialChange,
|
|
validateNewUserCredentials,
|
|
ensureCredentialsFormHints,
|
|
};
|
|
}
|