1
0
mirror of https://github.com/bitwarden/browser synced 2025-12-14 07:13:32 +00:00

SG-680 - Domain Add Edit Dialog - (1) Added custom validator for domain name (2) Disable verify btn if form invalid

This commit is contained in:
Jared Snider
2022-12-07 11:40:15 -05:00
parent d58c93e517
commit f528c4ba5a
4 changed files with 31 additions and 3 deletions

View File

@@ -5555,6 +5555,9 @@
},
"automaticDomainVerificationProcess": {
"message": "Bitwarden will attempt to verify the domain 3 times during the first 72 hours. If the domain cant be verified, check the DNS record in your host and manually verify."
},
"invalidDomainNameMessage": {
"message": "'https://', 'http://', or 'www.' domain prefixes not allowed."
}
}

View File

@@ -29,7 +29,9 @@
</bit-callout>
</div>
<div bitDialogFooter class="tw-flex tw-flex-row tw-items-center tw-gap-2">
<button bitButton buttonType="primary">{{ "verifyDomain" | i18n }}</button>
<button bitButton buttonType="primary" [disabled]="domainForm.invalid">
{{ "verifyDomain" | i18n }}
</button>
<button bitButton buttonType="secondary" (click)="dialogRef.close()">
{{ "cancel" | i18n }}
</button>

View File

@@ -7,6 +7,8 @@ import { I18nService } from "@bitwarden/common/abstractions/i18n.service";
import { OrganizationDomainResponse } from "@bitwarden/common/abstractions/organization-domain/responses/organization-domain.response";
import { PlatformUtilsService } from "@bitwarden/common/abstractions/platformUtils.service";
import { Utils } from "@bitwarden/common/misc/utils";
import { domainNameValidator } from "./domain-name.validator";
export interface DomainAddEditDialogData {
organizationId: string;
orgDomain: OrganizationDomainResponse;
@@ -20,9 +22,11 @@ export class DomainAddEditDialogComponent implements OnInit {
dialogSize: "small" | "default" | "large" = "default";
disablePadding = false;
// TODO: custom validator for preventing https:// or www. on domainName
domainForm: FormGroup = this.formBuilder.group({
domainName: ["", [Validators.required]],
domainName: [
"",
[Validators.required, domainNameValidator(this.i18nService.t("invalidDomainNameMessage"))],
],
txt: [{ value: null, disabled: true }],
});

View File

@@ -0,0 +1,19 @@
import { AbstractControl, ValidationErrors, ValidatorFn } from "@angular/forms";
export function domainNameValidator(errorMessage: string): ValidatorFn {
return (control: AbstractControl): ValidationErrors | null => {
const value = control.value;
if (!value) {
return null;
}
const forbiddenPatterns = [/^https:\/\//, /^http:\/\//, /^www\./];
for (const pattern of forbiddenPatterns) {
if (pattern.test(control.value)) {
return { invalidDomainName: errorMessage };
}
}
return null;
};
}