Skip to content

Commit

Permalink
Merge pull request #89 from BinaryStudioAcademy/hotfix/23-validate-em…
Browse files Browse the repository at this point in the history
…ail-domain-part

Hotfix/23 validate email domain part
  • Loading branch information
SashaBondarchuk committed Sep 5, 2023
2 parents 17e6800 + c190108 commit 52761d7
Show file tree
Hide file tree
Showing 5 changed files with 30 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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({
Expand All @@ -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)]),
});

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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({
Expand All @@ -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),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ export const emailValidationErrorMessages: ControlErrorMessages = {
required: 'Please enter your Email',
email: 'Email format is incorrect. An example of the correct format: [email protected]',
maxlength: `Email must not exceed ${emailMaxLength} characters`,
noDotInDomain: 'Email format is incorrect. An example of the correct format: [email protected]',
};

export const usernameValidationErrorMessages: ControlErrorMessages = {
Expand Down
1 change: 1 addition & 0 deletions frontend/src/app/shared/utils/validation/regex-patterns.ts
Original file line number Diff line number Diff line change
@@ -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;
14 changes: 13 additions & 1 deletion frontend/src/app/shared/utils/validation/validation-helper.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
import { FormGroup } from '@angular/forms';
import { AbstractControl, FormGroup, ValidationErrors } from '@angular/forms';
import {
emailValidationErrorMessages,
passwordValidationErrorMessages,
usernameValidationErrorMessages,
} 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,
Expand All @@ -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 };
}

0 comments on commit 52761d7

Please sign in to comment.