From 863475055e0d7d35679e5b52a6d5e27f4e754e2d Mon Sep 17 00:00:00 2001 From: Alina Lobova Date: Tue, 18 Feb 2025 19:04:00 +0300 Subject: [PATCH 1/2] added validation of the name field in the settings --- .../assets/js/widgets/formik/index.js | 95 +++++++++---------- 1 file changed, 46 insertions(+), 49 deletions(-) diff --git a/services/app/apps/codebattle/assets/js/widgets/formik/index.js b/services/app/apps/codebattle/assets/js/widgets/formik/index.js index b1ddf43a9..5199fb6d4 100644 --- a/services/app/apps/codebattle/assets/js/widgets/formik/index.js +++ b/services/app/apps/codebattle/assets/js/widgets/formik/index.js @@ -19,23 +19,41 @@ const emailSchema = Yup.string() .matches(/^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,})$/i, 'Can\'t contain special symbols') .required('Email required'); +const nameSchema = settings => Yup.string() + .strict() + .min(3, 'Should be at least 3 characters') + .max(16, 'Should be 16 characters or less') + .test( + 'start-or-end-with-empty-symbols', + 'Can\'t start or end with empty symbols', + value => { + if (!value) { + return true; + } + const invalidSymbolIndex = invalidSymbols.findIndex(invalidSymbol => ( + value.startsWith(invalidSymbol) || value.endsWith(invalidSymbol) + )); + return invalidSymbolIndex === -1; + }, + ) + .test( + 'max', + 'Should be 16 characters or less', + (name = '') => ( + settings.name === name || name.length <= 16 + ), + ) + .matches( + /^[a-zA-Z][a-zA-Z0-9_-]*[a-zA-Z0-9_]$/, + 'Should contain Latin letters, numbers and underscores. Only begin with latin letter', + ) + .trim(); + const schemas = { userSettings: settings => ({ - name: Yup.string() - .strict() - .required("Field can't be empty") - .min(3, 'Should be at least 3 characters') - // .max(5, 'Should be 16 character(s) or less') - .test( - 'max', - 'Should be 16 character(s) or less', - (name = '') => ( - settings.name === name || name.length <= 16 - ), - ) - .trim(), - clan: Yup.string() - .strict(), + name: nameSchema(settings) + .required("Field can't be empty"), + clan: Yup.string().strict(), }), resetPassword: { email: emailSchema, @@ -45,40 +63,19 @@ const schemas = { password: Yup.string().required('Password required'), }, signUp: { - name: Yup - .string() - .test( - 'start-or-end-with-empty-symbols', - 'Can\'t start or end with empty symbols', - value => { - if (!value) { - return true; - } - const invalidSymbolIndex = invalidSymbols.findIndex(invalidSymbol => ( - value.startsWith(invalidSymbol) || value.endsWith(invalidSymbol) - )); - - return invalidSymbolIndex === -1; - }, - ) - .min(3, 'Should be from 3 to 16 characters') - .max(16, 'Should be from 3 to 16 characters') - .matches( - /^[a-zA-Z]+[a-zA-Z0-9_-\s{1}][a-zA-Z0-9_]+$/i, - 'Should contain Latin letters, numbers and underscores. Only begin with latin letter', - ) - .required('Nickname required'), - email: emailSchema, - password: Yup - .string() - .matches(/^\S*$/, 'Can\'t contain empty symbols') - .min(6, 'Should be from 6 to 16 characters') - .max(16, 'Should be from 6 to 16 characters') - .required('Password required'), - passwordConfirmation: Yup - .string() - .required('Confirmation required') - .oneOf([Yup.ref('password')], 'Passwords must match'), + name: nameSchema() + .required('Nickname required'), + email: emailSchema, + password: Yup + .string() + .matches(/^\S*$/, 'Can\'t contain empty symbols') + .min(6, 'Password should be from 6 to 16 characters') + .max(16, 'Password should be from 6 to 16 characters') + .required('Password required'), + passwordConfirmation: Yup + .string() + .required('Confirmation required') + .oneOf([Yup.ref('password')], 'Passwords must match'), }, }; From 07d35bc88c389b0251bde62daf80f44f793022f8 Mon Sep 17 00:00:00 2001 From: Alina Lobova Date: Tue, 18 Feb 2025 19:28:59 +0300 Subject: [PATCH 2/2] added validation of the name field in the settings --- services/app/apps/codebattle/assets/js/widgets/formik/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/app/apps/codebattle/assets/js/widgets/formik/index.js b/services/app/apps/codebattle/assets/js/widgets/formik/index.js index 5199fb6d4..5fa0e42bd 100644 --- a/services/app/apps/codebattle/assets/js/widgets/formik/index.js +++ b/services/app/apps/codebattle/assets/js/widgets/formik/index.js @@ -44,7 +44,7 @@ const nameSchema = settings => Yup.string() ), ) .matches( - /^[a-zA-Z][a-zA-Z0-9_-]*[a-zA-Z0-9_]$/, + /^[a-zA-Z]+[a-zA-Z0-9_-\s{1}][a-zA-Z0-9_]+$/i, 'Should contain Latin letters, numbers and underscores. Only begin with latin letter', ) .trim();