diff --git a/frontend/src/app/modules/login/log-in-page/log-in-page.component.ts b/frontend/src/app/modules/login/log-in-page/log-in-page.component.ts index 515d27a88..cbded249b 100644 --- a/frontend/src/app/modules/login/log-in-page/log-in-page.component.ts +++ b/frontend/src/app/modules/login/log-in-page/log-in-page.component.ts @@ -7,7 +7,7 @@ import { UserService } from '@core/services/user.service'; import { User } from '@shared/models/user/user'; import { emailMaxLength } from '@shared/utils/validation/form-control-validator-options'; import { passwordPattern } from '@shared/utils/validation/regex-patterns'; -import { getErrorMessage } from '@shared/utils/validation/validation-helper'; +import { emailWithDotValidator, getErrorMessage } from '@shared/utils/validation/validation-helper'; import { switchMap } from 'rxjs'; @Component({ @@ -17,7 +17,13 @@ import { switchMap } from 'rxjs'; }) export class LogInPageComponent implements OnInit { logInForm = new FormGroup({ - email: new FormControl('', [Validators.required, Validators.maxLength(emailMaxLength), Validators.email]), + email: new FormControl('', [ + Validators.required, + Validators.maxLength(emailMaxLength), + Validators.email, + emailWithDotValidator, + ]), + password: new FormControl('', [Validators.required, Validators.pattern(passwordPattern)]), }); diff --git a/frontend/src/app/modules/login/sign-up-page/sign-up.component.ts b/frontend/src/app/modules/login/sign-up-page/sign-up.component.ts index 06e29a127..828a7bee9 100644 --- a/frontend/src/app/modules/login/sign-up-page/sign-up.component.ts +++ b/frontend/src/app/modules/login/sign-up-page/sign-up.component.ts @@ -13,7 +13,7 @@ import { userNameMinLength, } from '@shared/utils/validation/form-control-validator-options'; import { latinCharactersPattern, passwordPattern } from '@shared/utils/validation/regex-patterns'; -import { getErrorMessage } from '@shared/utils/validation/validation-helper'; +import { emailWithDotValidator, getErrorMessage } from '@shared/utils/validation/validation-helper'; import { switchMap } from 'rxjs'; @Component({ @@ -25,7 +25,12 @@ export class SignUpComponent { isExistingEmail = false; registrationForm = new FormGroup({ - email: new FormControl('', [Validators.required, Validators.maxLength(emailMaxLength), Validators.email]), + email: new FormControl('', [ + Validators.required, + Validators.maxLength(emailMaxLength), + Validators.email, + emailWithDotValidator, + ]), username: new FormControl('', [ Validators.required, Validators.minLength(userNameMinLength), diff --git a/frontend/src/app/shared/utils/validation/form-controls-error-messages.ts b/frontend/src/app/shared/utils/validation/form-controls-error-messages.ts index 3d76a2300..0a237ae9c 100644 --- a/frontend/src/app/shared/utils/validation/form-controls-error-messages.ts +++ b/frontend/src/app/shared/utils/validation/form-controls-error-messages.ts @@ -11,6 +11,7 @@ export const emailValidationErrorMessages: ControlErrorMessages = { required: 'Please enter your Email', email: 'Email format is incorrect. An example of the correct format: example@example.com', maxlength: `Email must not exceed ${emailMaxLength} characters`, + noDotInDomain: 'Email format is incorrect. An example of the correct format: example@example.com', }; export const usernameValidationErrorMessages: ControlErrorMessages = { diff --git a/frontend/src/app/shared/utils/validation/regex-patterns.ts b/frontend/src/app/shared/utils/validation/regex-patterns.ts index f6fd5b7f6..388ea7e85 100644 --- a/frontend/src/app/shared/utils/validation/regex-patterns.ts +++ b/frontend/src/app/shared/utils/validation/regex-patterns.ts @@ -1,2 +1,3 @@ export const passwordPattern = '^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9]).{8,32}$'; export const latinCharactersPattern = '^[a-zA-Z]+(?:[-\\s][a-zA-Z]+)*$'; +export const emailDomainPattern = /^[^@]+@[^@]+\.[a-z]+$/i; diff --git a/frontend/src/app/shared/utils/validation/validation-helper.ts b/frontend/src/app/shared/utils/validation/validation-helper.ts index 1218218b0..7595fafc3 100644 --- a/frontend/src/app/shared/utils/validation/validation-helper.ts +++ b/frontend/src/app/shared/utils/validation/validation-helper.ts @@ -1,4 +1,4 @@ -import { FormGroup } from '@angular/forms'; +import { AbstractControl, FormGroup, ValidationErrors } from '@angular/forms'; import { emailValidationErrorMessages, passwordValidationErrorMessages, @@ -6,6 +6,8 @@ import { } from '@shared/utils/validation/form-controls-error-messages'; import { ControlErrorMessages } from '@shared/utils/validation/validation-interfaces'; +import { emailDomainPattern } from './regex-patterns'; + const controlErrorMessagesMap: { [key: string]: ControlErrorMessages } = { email: emailValidationErrorMessages, username: usernameValidationErrorMessages, @@ -24,3 +26,13 @@ export function getErrorMessage(formControlName: string, form: FormGroup): strin return null; } + +export function emailWithDotValidator(control: AbstractControl): ValidationErrors | null { + const email = control.value as string; + + if (email && emailDomainPattern.test(email)) { + return null; + } + + return { noDotInDomain: true }; +}