diff --git a/apps/web/src/locales/en/messages.json b/apps/web/src/locales/en/messages.json index d4bf901dbfe..70ac05fca65 100644 --- a/apps/web/src/locales/en/messages.json +++ b/apps/web/src/locales/en/messages.json @@ -5519,5 +5519,8 @@ }, "noDomainsSubText": { "message": "Connecting a domain allows members to skip the SSO identifier field during Login with SSO." + }, + "verifyDomain": { + "message": "Verify domain" } } diff --git a/bitwarden_license/bit-web/src/app/organizations/manage/domain-verification/domain-add-edit-dialog/domain-add-edit-dialog.component.html b/bitwarden_license/bit-web/src/app/organizations/manage/domain-verification/domain-add-edit-dialog/domain-add-edit-dialog.component.html new file mode 100644 index 00000000000..34973505b03 --- /dev/null +++ b/bitwarden_license/bit-web/src/app/organizations/manage/domain-verification/domain-add-edit-dialog/domain-add-edit-dialog.component.html @@ -0,0 +1,35 @@ + + {{ "newDomain" | i18n }} +
+
+ + Domain name + + Example: mydomain.com. Subdomains require separate entries to be verified. + + + + DNS TXT record + + Copy and paste the TXT record into your DNS Provider. + +
+
+
+ + + +
+
diff --git a/bitwarden_license/bit-web/src/app/organizations/manage/domain-verification/domain-add-edit-dialog/domain-add-edit-dialog.component.ts b/bitwarden_license/bit-web/src/app/organizations/manage/domain-verification/domain-add-edit-dialog/domain-add-edit-dialog.component.ts new file mode 100644 index 00000000000..e27b72763fc --- /dev/null +++ b/bitwarden_license/bit-web/src/app/organizations/manage/domain-verification/domain-add-edit-dialog/domain-add-edit-dialog.component.ts @@ -0,0 +1,34 @@ +import { DialogRef, DIALOG_DATA } from "@angular/cdk/dialog"; +import { Component, Inject, OnInit } from "@angular/core"; +import { FormBuilder, FormGroup, Validators } from "@angular/forms"; + +import { OrganizationDomainResponse } from "@bitwarden/common/abstractions/organization-domain/responses/organization-domain.response"; + +export interface DomainAddEditDialogData { + organizationId: string; + orgDomain: OrganizationDomainResponse; +} + +@Component({ + selector: "app-domain-add-edit-dialog", + templateUrl: "domain-add-edit-dialog.component.html", +}) +export class DomainAddEditDialogComponent implements OnInit { + dialogSize: "small" | "default" | "large" = "default"; + disablePadding = false; + + domainForm: FormGroup = this.formBuilder.group({ + domainName: ["", [Validators.required]], + txt: [""], + }); + + constructor( + public dialogRef: DialogRef, + @Inject(DIALOG_DATA) public data: DomainAddEditDialogData, + private formBuilder: FormBuilder + ) {} + + ngOnInit(): void { + // If we have data.orgDomain, then editing, otherwise creating new domain + } +} diff --git a/bitwarden_license/bit-web/src/app/organizations/manage/domain-verification/domain-verification.component.html b/bitwarden_license/bit-web/src/app/organizations/manage/domain-verification/domain-verification.component.html index 3da3eacb9c1..415d220d9bd 100644 --- a/bitwarden_license/bit-web/src/app/organizations/manage/domain-verification/domain-verification.component.html +++ b/bitwarden_license/bit-web/src/app/organizations/manage/domain-verification/domain-verification.component.html @@ -1,7 +1,7 @@

{{ "domainVerification" | i18n }}

-
@@ -58,7 +58,7 @@ - diff --git a/bitwarden_license/bit-web/src/app/organizations/manage/domain-verification/domain-verification.component.ts b/bitwarden_license/bit-web/src/app/organizations/manage/domain-verification/domain-verification.component.ts index 20144ddf673..d0de2f4db89 100644 --- a/bitwarden_license/bit-web/src/app/organizations/manage/domain-verification/domain-verification.component.ts +++ b/bitwarden_license/bit-web/src/app/organizations/manage/domain-verification/domain-verification.component.ts @@ -9,6 +9,12 @@ import { OrgDomainServiceAbstraction } from "@bitwarden/common/abstractions/orga import { OrganizationDomainResponse } from "@bitwarden/common/abstractions/organization-domain/responses/organization-domain.response"; import { OrganizationService } from "@bitwarden/common/abstractions/organization/organization.service.abstraction"; import { PlatformUtilsService } from "@bitwarden/common/abstractions/platformUtils.service"; +import { DialogService } from "@bitwarden/components"; + +import { + DomainAddEditDialogComponent, + DomainAddEditDialogData, +} from "./domain-add-edit-dialog/domain-add-edit-dialog.component"; @Component({ selector: "app-org-manage-domain-verification", @@ -30,7 +36,8 @@ export class DomainVerificationComponent implements OnInit, OnDestroy { private i18nService: I18nService, private organizationService: OrganizationService, private orgDomainApiService: OrgDomainApiServiceAbstraction, - private orgDomainService: OrgDomainServiceAbstraction + private orgDomainService: OrgDomainServiceAbstraction, + private dialogService: DialogService ) {} // eslint-disable-next-line @typescript-eslint/no-empty-function @@ -57,6 +64,17 @@ export class DomainVerificationComponent implements OnInit, OnDestroy { this.loading = false; } + addDomain() { + const domainAddEditDialogData: DomainAddEditDialogData = { + organizationId: this.organizationId, + orgDomain: null, + }; + + this.dialogService.open(DomainAddEditDialogComponent, { + data: domainAddEditDialogData, + }); + } + ngOnDestroy(): void { this.componentDestroyed$.next(); this.componentDestroyed$.complete(); diff --git a/bitwarden_license/bit-web/src/app/organizations/organizations.module.ts b/bitwarden_license/bit-web/src/app/organizations/organizations.module.ts index 9047949aee1..63c34f5b902 100644 --- a/bitwarden_license/bit-web/src/app/organizations/organizations.module.ts +++ b/bitwarden_license/bit-web/src/app/organizations/organizations.module.ts @@ -3,6 +3,7 @@ import { NgModule } from "@angular/core"; import { SharedModule } from "@bitwarden/web-vault/app/shared/shared.module"; import { InputCheckboxComponent } from "./components/input-checkbox.component"; +import { DomainAddEditDialogComponent } from "./manage/domain-verification/domain-add-edit-dialog/domain-add-edit-dialog.component"; import { DomainVerificationComponent } from "./manage/domain-verification/domain-verification.component"; import { ScimComponent } from "./manage/scim.component"; import { SsoComponent } from "./manage/sso.component"; @@ -10,6 +11,12 @@ import { OrganizationsRoutingModule } from "./organizations-routing.module"; @NgModule({ imports: [SharedModule, OrganizationsRoutingModule], - declarations: [InputCheckboxComponent, SsoComponent, ScimComponent, DomainVerificationComponent], + declarations: [ + InputCheckboxComponent, + SsoComponent, + ScimComponent, + DomainVerificationComponent, + DomainAddEditDialogComponent, + ], }) export class OrganizationsModule {}