/** Правила пароля — как в админке и 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, }; }