mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-07 15:27:46 +00:00
Fixed breached pwd error messages
This commit is contained in:
@@ -234,8 +234,9 @@
|
|||||||
"validate-base": "Password should contain:",
|
"validate-base": "Password should contain:",
|
||||||
"validate-too-short": "at least 14 characters",
|
"validate-too-short": "at least 14 characters",
|
||||||
"validate-too-long": "at most 100 characters",
|
"validate-too-long": "at most 100 characters",
|
||||||
|
"validate-number": "at least 1 number",
|
||||||
"validate-case": "at least 1 lowercase character",
|
"validate-case": "at least 1 lowercase character",
|
||||||
"validate-number": "at least 1 number"
|
"validate-breached": "The password you provided is in a list of passwords commonly used on other websites. Please try again with a stronger password."
|
||||||
},
|
},
|
||||||
"token": {
|
"token": {
|
||||||
"service-tokens": "Service Tokens",
|
"service-tokens": "Service Tokens",
|
||||||
|
|||||||
@@ -231,8 +231,8 @@
|
|||||||
"validate-base": "La contraseña debe contener:",
|
"validate-base": "La contraseña debe contener:",
|
||||||
"validate-too-short": "como mínimo 14 caracteres",
|
"validate-too-short": "como mínimo 14 caracteres",
|
||||||
"validate-too-long": "como máximo 100 caracteres",
|
"validate-too-long": "como máximo 100 caracteres",
|
||||||
"validate-case": "como mínimo 1 letra en minúsculas",
|
"validate-number": "como mínimo 1 número",
|
||||||
"validate-number": "como mínimo 1 número"
|
"validate-case": "como mínimo 1 letra en minúsculas"
|
||||||
},
|
},
|
||||||
"token": {
|
"token": {
|
||||||
"service-tokens": "Tokens de servicio",
|
"service-tokens": "Tokens de servicio",
|
||||||
|
|||||||
@@ -218,8 +218,8 @@
|
|||||||
"validate-base": "Le mot de passe doit contenir:",
|
"validate-base": "Le mot de passe doit contenir:",
|
||||||
"validate-too-short": "au moins 14 caractères",
|
"validate-too-short": "au moins 14 caractères",
|
||||||
"validate-too-long": "au maximum 100 caractères",
|
"validate-too-long": "au maximum 100 caractères",
|
||||||
"validate-case": "au moins 1 caractère miniscule",
|
"validate-number": "au moins 1 chiffre",
|
||||||
"validate-number": "au moins 1 chiffre"
|
"validate-case": "au moins 1 caractère miniscule"
|
||||||
},
|
},
|
||||||
"token": {
|
"token": {
|
||||||
"service-tokens": "Jetons de service",
|
"service-tokens": "Jetons de service",
|
||||||
|
|||||||
@@ -185,8 +185,8 @@
|
|||||||
"validate-base": "비밀번호는 다음 조건을 만족해야 합니다:",
|
"validate-base": "비밀번호는 다음 조건을 만족해야 합니다:",
|
||||||
"validate-too-short": "14 글자 이상",
|
"validate-too-short": "14 글자 이상",
|
||||||
"validate-too-long": "100 자 이하",
|
"validate-too-long": "100 자 이하",
|
||||||
"validate-case": "1개 이상의 소문자",
|
"validate-number": "1개 이상의 숫자",
|
||||||
"validate-number": "1개 이상의 숫자"
|
"validate-case": "1개 이상의 소문자"
|
||||||
},
|
},
|
||||||
"token": {
|
"token": {
|
||||||
"add-dialog": {
|
"add-dialog": {
|
||||||
|
|||||||
@@ -213,8 +213,8 @@
|
|||||||
"validate-base": "A senha deve conter:",
|
"validate-base": "A senha deve conter:",
|
||||||
"validate-too-short": "pelo menos 14 caracteres",
|
"validate-too-short": "pelo menos 14 caracteres",
|
||||||
"validate-too-long": "no máximo 100 caracteres",
|
"validate-too-long": "no máximo 100 caracteres",
|
||||||
"validate-case": "pelo menos 1 caractere minúsculo",
|
"validate-number": "pelo menos 1 número",
|
||||||
"validate-number": "pelo menos 1 número"
|
"validate-case": "pelo menos 1 caractere minúsculo"
|
||||||
},
|
},
|
||||||
"token": {
|
"token": {
|
||||||
"service-tokens": "Tokens de Serviço",
|
"service-tokens": "Tokens de Serviço",
|
||||||
|
|||||||
@@ -231,8 +231,8 @@
|
|||||||
"validate-base": "Şifre kısıtlamaları:",
|
"validate-base": "Şifre kısıtlamaları:",
|
||||||
"validate-too-short": "en az 14 karakter",
|
"validate-too-short": "en az 14 karakter",
|
||||||
"validate-too-long": "en fazla 100 karakter",
|
"validate-too-long": "en fazla 100 karakter",
|
||||||
"validate-case": "en az 1 küçük harf",
|
"validate-number": "en az 1 rakam",
|
||||||
"validate-number": "en az 1 rakam"
|
"validate-case": "en az 1 küçük harf"
|
||||||
},
|
},
|
||||||
"token": {
|
"token": {
|
||||||
"service-tokens": "Servis Belirteçleri",
|
"service-tokens": "Servis Belirteçleri",
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
import { checkIsPasswordBreached } from "./checkIsPasswordBreached";
|
||||||
|
|
||||||
/* eslint-disable no-param-reassign */
|
/* eslint-disable no-param-reassign */
|
||||||
interface PasswordCheckProps {
|
interface PasswordCheckProps {
|
||||||
password: string;
|
password: string;
|
||||||
@@ -6,17 +8,19 @@ interface PasswordCheckProps {
|
|||||||
setPasswordErrorTooLong: (value: boolean) => void;
|
setPasswordErrorTooLong: (value: boolean) => void;
|
||||||
setPasswordErrorNumber: (value: boolean) => void;
|
setPasswordErrorNumber: (value: boolean) => void;
|
||||||
setPasswordErrorLowerCase: (value: boolean) => void;
|
setPasswordErrorLowerCase: (value: boolean) => void;
|
||||||
|
setPasswordErrorIsBreached: (value: boolean) => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This function checks a user password with respect to some criteria.
|
* This function checks a user password with respect to some criteria.
|
||||||
*/
|
*/
|
||||||
const passwordCheck = ({
|
const passwordCheck = async ({
|
||||||
password,
|
password,
|
||||||
setPasswordErrorTooShort,
|
setPasswordErrorTooShort,
|
||||||
setPasswordErrorTooLong,
|
setPasswordErrorTooLong,
|
||||||
setPasswordErrorNumber,
|
setPasswordErrorNumber,
|
||||||
setPasswordErrorLowerCase,
|
setPasswordErrorLowerCase,
|
||||||
|
setPasswordErrorIsBreached,
|
||||||
errorCheck
|
errorCheck
|
||||||
}: PasswordCheckProps) => {
|
}: PasswordCheckProps) => {
|
||||||
if (!password || password.length < 14) {
|
if (!password || password.length < 14) {
|
||||||
@@ -57,6 +61,13 @@ const passwordCheck = ({
|
|||||||
setPasswordErrorLowerCase(false);
|
setPasswordErrorLowerCase(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (await checkIsPasswordBreached(password)) {
|
||||||
|
setPasswordErrorIsBreached(true);
|
||||||
|
errorCheck = true;
|
||||||
|
} else {
|
||||||
|
setPasswordErrorIsBreached(false);
|
||||||
|
}
|
||||||
|
|
||||||
// if (!/[A-Z]/.test(password)) {
|
// if (!/[A-Z]/.test(password)) {
|
||||||
// setPasswordErrorUpperCase(true);
|
// setPasswordErrorUpperCase(true);
|
||||||
// errorCheck = true;
|
// errorCheck = true;
|
||||||
|
|||||||
@@ -1,21 +1,21 @@
|
|||||||
import { checkIsPasswordBreached } from "./checkIsPasswordBreached";
|
import { checkIsPasswordBreached } from "./checkIsPasswordBreached";
|
||||||
|
|
||||||
type Errors = {
|
type Errors = {
|
||||||
tooShort?: string,
|
tooShort?: string;
|
||||||
tooLong?: string,
|
tooLong?: string;
|
||||||
upperCase?: string,
|
upperCase?: string;
|
||||||
lowerCase?: string,
|
lowerCase?: string;
|
||||||
number?: string,
|
number?: string;
|
||||||
specialChar?: string,
|
specialChar?: string;
|
||||||
repeatedChar?: string,
|
repeatedChar?: string;
|
||||||
commonPassword?: string,
|
commonPassword?: string;
|
||||||
breachedPassword?: string
|
breachedPassword?: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
interface CheckPasswordParams {
|
interface CheckPasswordParams {
|
||||||
password: string;
|
password: string;
|
||||||
commonPasswords: string[];
|
commonPasswords: string[];
|
||||||
setErrors: (value: Errors) => void;
|
setErrors: (value: Errors) => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -36,52 +36,51 @@ interface CheckPasswordParams {
|
|||||||
* @param {Function} obj.setErrors - set state function to set error object
|
* @param {Function} obj.setErrors - set state function to set error object
|
||||||
*/
|
*/
|
||||||
const checkPassword = async ({
|
const checkPassword = async ({
|
||||||
password,
|
password,
|
||||||
commonPasswords,
|
commonPasswords,
|
||||||
setErrors
|
setErrors
|
||||||
}: CheckPasswordParams): Promise<boolean> => {
|
}: CheckPasswordParams): Promise<boolean> => {
|
||||||
const errors: Errors = {};
|
const errors: Errors = {};
|
||||||
|
|
||||||
const isBreachedPassword = await checkIsPasswordBreached(password)
|
if (password.length < 14) {
|
||||||
|
errors.tooShort = "at least 14 characters";
|
||||||
|
}
|
||||||
|
|
||||||
if (password.length < 14) {
|
if (password.length > 100) {
|
||||||
errors.tooShort = "at least 14 characters";
|
errors.tooLong = "at most 100 characters";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (password.length > 100) {
|
if (!/[A-Z]/.test(password)) {
|
||||||
errors.tooLong = "at most 100 characters";
|
errors.upperCase = "at least 1 uppercase character (A-Z)";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!/[A-Z]/.test(password)) {
|
if (!/[a-z]/.test(password)) {
|
||||||
errors.upperCase = "at least 1 uppercase character (A-Z)";
|
errors.lowerCase = "at least 1 lowercase character (a-z)";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!/[a-z]/.test(password)) {
|
if (!/[0-9]/.test(password)) {
|
||||||
errors.lowerCase = "at least 1 lowercase character (a-z)";
|
errors.number = "at least 1 number (0-9)";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!/[0-9]/.test(password)) {
|
if (!/[!@#$%^&*(),.?":{}|<>]/.test(password)) {
|
||||||
errors.number = "at least 1 number (0-9)";
|
errors.specialChar = "at least 1 special character (!@#$%^&*(),.?)";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!/[!@#$%^&*(),.?":{}|<>]/.test(password)) {
|
if (/([A-Za-z0-9])\1\1\1/.test(password)) {
|
||||||
errors.specialChar = "at least 1 special character (!@#$%^&*(),.?)";
|
errors.repeatedChar = "No 3 repeat, consecutive characters";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (/([A-Za-z0-9])\1\1\1/.test(password)) {
|
if (commonPasswords.includes(password)) {
|
||||||
errors.repeatedChar = "No 3 repeat, consecutive characters";
|
errors.commonPassword = "No common passwords";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (commonPasswords.includes(password)) {
|
if (await checkIsPasswordBreached(password)) {
|
||||||
errors.commonPassword = "No common passwords";
|
errors.breachedPassword =
|
||||||
}
|
"The password you provided is in a list of passwords commonly used on other websites. Please try again with a stronger password.";
|
||||||
|
}
|
||||||
|
|
||||||
if (isBreachedPassword) {
|
setErrors(errors);
|
||||||
errors.breachedPassword = "The password you provided is in a list of passwords commonly used on other websites. Please try again with a stronger password.";
|
return Object.keys(errors).length > 0;
|
||||||
}
|
};
|
||||||
|
|
||||||
setErrors(errors);
|
|
||||||
return Object.keys(errors).length > 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
export default checkPassword;
|
export default checkPassword;
|
||||||
Reference in New Issue
Block a user