diff --git a/apps/web/src/app/admin-console/organizations/settings/account.component.html b/apps/web/src/app/admin-console/organizations/settings/account.component.html index 096ae89015d..08059ed99fd 100644 --- a/apps/web/src/app/admin-console/organizations/settings/account.component.html +++ b/apps/web/src/app/admin-console/organizations/settings/account.component.html @@ -91,7 +91,6 @@ - diff --git a/apps/web/src/app/admin-console/organizations/settings/account.component.ts b/apps/web/src/app/admin-console/organizations/settings/account.component.ts index 0072e1f3ae1..473ce88f2d4 100644 --- a/apps/web/src/app/admin-console/organizations/settings/account.component.ts +++ b/apps/web/src/app/admin-console/organizations/settings/account.component.ts @@ -1,6 +1,8 @@ import { Component, ViewChild, ViewContainerRef } from "@angular/core"; import { ActivatedRoute, Router } from "@angular/router"; +import { lastValueFrom } from "rxjs"; +import { DialogServiceAbstraction } from "@bitwarden/angular/services/dialog"; import { ModalService } from "@bitwarden/angular/services/modal.service"; import { CryptoService } from "@bitwarden/common/abstractions/crypto.service"; import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; @@ -15,7 +17,7 @@ import { OrganizationResponse } from "@bitwarden/common/admin-console/models/res import { ApiKeyComponent } from "../../../settings/api-key.component"; import { PurgeVaultComponent } from "../../../settings/purge-vault.component"; -import { DeleteOrganizationComponent } from "./delete-organization.component"; +import { DeleteOrganizationDialogResult, openDeleteOrganizationDialog } from "./components"; @Component({ selector: "app-org-account", @@ -23,8 +25,6 @@ import { DeleteOrganizationComponent } from "./delete-organization.component"; }) // eslint-disable-next-line rxjs-angular/prefer-takeuntil export class AccountComponent { - @ViewChild("deleteOrganizationTemplate", { read: ViewContainerRef, static: true }) - deleteModalRef: ViewContainerRef; @ViewChild("purgeOrganizationTemplate", { read: ViewContainerRef, static: true }) purgeModalRef: ViewContainerRef; @ViewChild("apiKeyTemplate", { read: ViewContainerRef, static: true }) @@ -51,7 +51,8 @@ export class AccountComponent { private logService: LogService, private router: Router, private organizationService: OrganizationService, - private organizationApiService: OrganizationApiServiceAbstraction + private organizationApiService: OrganizationApiServiceAbstraction, + private dialogService: DialogServiceAbstraction ) {} async ngOnInit() { @@ -100,17 +101,18 @@ export class AccountComponent { } async deleteOrganization() { - await this.modalService.openViewRef( - DeleteOrganizationComponent, - this.deleteModalRef, - (comp) => { - comp.organizationId = this.organizationId; - // eslint-disable-next-line rxjs-angular/prefer-takeuntil - comp.onSuccess.subscribe(() => { - this.router.navigate(["/"]); - }); - } - ); + const dialog = openDeleteOrganizationDialog(this.dialogService, { + data: { + organizationId: this.organizationId, + requestType: "RegularDelete", + }, + }); + + const result = await lastValueFrom(dialog.closed); + + if (result === DeleteOrganizationDialogResult.Deleted) { + this.router.navigate(["/"]); + } } async purgeVault() { diff --git a/apps/web/src/app/admin-console/organizations/settings/components/delete-organization-dialog.component.html b/apps/web/src/app/admin-console/organizations/settings/components/delete-organization-dialog.component.html new file mode 100644 index 00000000000..f963d27b8d8 --- /dev/null +++ b/apps/web/src/app/admin-console/organizations/settings/components/delete-organization-dialog.component.html @@ -0,0 +1,40 @@ +
+ + {{ "deleteOrganization" | i18n }} +
+ {{ + "deletingOrganizationIsPermanentWarning" | i18n : organization?.name + }} +

+ + {{ "orgCreatedSponsorshipInvalid" | i18n }} + + + + {{ "deletingOrganizationContentWarning" | i18n : organization?.name }} +

    +
  • + {{ type.count }} {{ type.localizationKey | i18n }} +
  • +
+ {{ "deletingOrganizationActiveUserAccountsWarning" | i18n }} + + +

+ +
+
+ + +
+
+
diff --git a/apps/web/src/app/admin-console/organizations/settings/delete-organization.component.ts b/apps/web/src/app/admin-console/organizations/settings/components/delete-organization-dialog.component.ts similarity index 57% rename from apps/web/src/app/admin-console/organizations/settings/delete-organization.component.ts rename to apps/web/src/app/admin-console/organizations/settings/components/delete-organization-dialog.component.ts index cec096955aa..e99a0d29109 100644 --- a/apps/web/src/app/admin-console/organizations/settings/delete-organization.component.ts +++ b/apps/web/src/app/admin-console/organizations/settings/components/delete-organization-dialog.component.ts @@ -1,17 +1,25 @@ -import { Component, EventEmitter, OnInit, Output } from "@angular/core"; +import { DIALOG_DATA, DialogConfig, DialogRef } from "@angular/cdk/dialog"; +import { Component, Inject, OnDestroy, OnInit } from "@angular/core"; +import { FormBuilder, FormControl, Validators } from "@angular/forms"; +import { combineLatest, Subject, takeUntil } from "rxjs"; +import { DialogServiceAbstraction } from "@bitwarden/angular/services/dialog"; import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/abstractions/log.service"; import { PlatformUtilsService } from "@bitwarden/common/abstractions/platformUtils.service"; import { UserVerificationService } from "@bitwarden/common/abstractions/userVerification/userVerification.service.abstraction"; import { OrganizationApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/organization/organization-api.service.abstraction"; import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction"; +import { Organization } from "@bitwarden/common/admin-console/models/domain/organization"; import { Utils } from "@bitwarden/common/misc/utils"; import { Verification } from "@bitwarden/common/types/verification"; import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service"; import { CipherType } from "@bitwarden/common/vault/enums/cipher-type"; import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view"; +import { UserVerificationModule } from "../../../../shared/components/user-verification"; +import { SharedModule } from "../../../../shared/shared.module"; + class CountBasedLocalizationKey { singular: string; plural: string; @@ -43,63 +51,90 @@ class OrganizationContentSummary { itemCountByType: OrganizationContentSummaryItem[] = []; } +export interface DeleteOrganizationDialogParams { + organizationId: string; + + requestType: "InvalidFamiliesForEnterprise" | "RegularDelete"; +} + +export enum DeleteOrganizationDialogResult { + Deleted = "deleted", + Canceled = "canceled", +} + @Component({ selector: "app-delete-organization", - templateUrl: "delete-organization.component.html", + standalone: true, + imports: [SharedModule, UserVerificationModule], + templateUrl: "delete-organization-dialog.component.html", }) -export class DeleteOrganizationComponent implements OnInit { - organizationId: string; +export class DeleteOrganizationDialogComponent implements OnInit, OnDestroy { + private destroy$ = new Subject(); + loaded: boolean; deleteOrganizationRequestType: "InvalidFamiliesForEnterprise" | "RegularDelete" = "RegularDelete"; - organizationName: string; + organization: Organization; organizationContentSummary: OrganizationContentSummary = new OrganizationContentSummary(); - @Output() onSuccess: EventEmitter = new EventEmitter(); + secret: Verification; - masterPassword: Verification; + protected formGroup = this.formBuilder.group({ + secret: new FormControl(null, [Validators.required]), + }); formPromise: Promise; constructor( + @Inject(DIALOG_DATA) private params: DeleteOrganizationDialogParams, + private dialogRef: DialogRef, private i18nService: I18nService, private platformUtilsService: PlatformUtilsService, private userVerificationService: UserVerificationService, private logService: LogService, private cipherService: CipherService, private organizationService: OrganizationService, - private organizationApiService: OrganizationApiServiceAbstraction + private organizationApiService: OrganizationApiServiceAbstraction, + private formBuilder: FormBuilder ) {} - async ngOnInit(): Promise { - await this.load(); + ngOnDestroy(): void { + this.destroy$.next(); + this.destroy$.complete(); } - async submit() { + async ngOnInit(): Promise { + this.deleteOrganizationRequestType = this.params.requestType; + + combineLatest([ + this.organizationService.get$(this.params.organizationId), + this.cipherService.getAllFromApiForOrganization(this.params.organizationId), + ]) + .pipe(takeUntil(this.destroy$)) + .subscribe(([organization, ciphers]) => { + this.organization = organization; + this.organizationContentSummary = this.buildOrganizationContentSummary(ciphers); + this.loaded = true; + }); + } + + protected submit = async () => { try { this.formPromise = this.userVerificationService - .buildRequest(this.masterPassword) - .then((request) => this.organizationApiService.delete(this.organizationId, request)); + .buildRequest(this.formGroup.value.secret) + .then((request) => this.organizationApiService.delete(this.organization.id, request)); await this.formPromise; this.platformUtilsService.showToast( "success", this.i18nService.t("organizationDeleted"), this.i18nService.t("organizationDeletedDesc") ); - this.onSuccess.emit(); + this.dialogRef.close(DeleteOrganizationDialogResult.Deleted); } catch (e) { this.logService.error(e); } - } + }; - private async load() { - this.organizationName = (await this.organizationService.get(this.organizationId)).name; - this.organizationContentSummary = await this.buildOrganizationContentSummary(); - this.loaded = true; - } - - private async buildOrganizationContentSummary(): Promise { + private buildOrganizationContentSummary(ciphers: CipherView[]): OrganizationContentSummary { const organizationContentSummary = new OrganizationContentSummary(); - const organizationItems = ( - await this.cipherService.getAllFromApiForOrganization(this.organizationId) - ).filter((item) => item.deletedDate == null); + const organizationItems = ciphers.filter((item) => item.deletedDate == null); if (organizationItems.length < 1) { return organizationContentSummary; @@ -129,3 +164,18 @@ export class DeleteOrganizationComponent implements OnInit { return new CountBasedLocalizationKey(`type${type}`, `type${type}Plural`); } } + +/** + * Strongly typed helper to open a Delete Organization dialog + * @param dialogService Instance of the dialog service that will be used to open the dialog + * @param config Configuration for the dialog + */ +export function openDeleteOrganizationDialog( + dialogService: DialogServiceAbstraction, + config: DialogConfig +) { + return dialogService.open( + DeleteOrganizationDialogComponent, + config + ); +} diff --git a/apps/web/src/app/admin-console/organizations/settings/components/index.ts b/apps/web/src/app/admin-console/organizations/settings/components/index.ts new file mode 100644 index 00000000000..ae4b74837da --- /dev/null +++ b/apps/web/src/app/admin-console/organizations/settings/components/index.ts @@ -0,0 +1 @@ +export * from "./delete-organization-dialog.component"; diff --git a/apps/web/src/app/admin-console/organizations/settings/delete-organization.component.html b/apps/web/src/app/admin-console/organizations/settings/delete-organization.component.html deleted file mode 100644 index ef4ec15b7e4..00000000000 --- a/apps/web/src/app/admin-console/organizations/settings/delete-organization.component.html +++ /dev/null @@ -1,61 +0,0 @@ - diff --git a/apps/web/src/app/admin-console/organizations/settings/index.ts b/apps/web/src/app/admin-console/organizations/settings/index.ts index 289bf3d6323..74b356100a6 100644 --- a/apps/web/src/app/admin-console/organizations/settings/index.ts +++ b/apps/web/src/app/admin-console/organizations/settings/index.ts @@ -1,2 +1,2 @@ export * from "./organization-settings.module"; -export { DeleteOrganizationComponent } from "./delete-organization.component"; +export { DeleteOrganizationDialogComponent } from "./components/delete-organization-dialog.component"; diff --git a/apps/web/src/app/admin-console/organizations/settings/organization-settings.module.ts b/apps/web/src/app/admin-console/organizations/settings/organization-settings.module.ts index 0b22c66d1e3..c5500c6a94a 100644 --- a/apps/web/src/app/admin-console/organizations/settings/organization-settings.module.ts +++ b/apps/web/src/app/admin-console/organizations/settings/organization-settings.module.ts @@ -4,18 +4,12 @@ import { LooseComponentsModule, SharedModule } from "../../../shared"; import { PoliciesModule } from "../../organizations/policies"; import { AccountComponent } from "./account.component"; -import { DeleteOrganizationComponent } from "./delete-organization.component"; import { OrganizationSettingsRoutingModule } from "./organization-settings-routing.module"; import { SettingsComponent } from "./settings.component"; import { TwoFactorSetupComponent } from "./two-factor-setup.component"; @NgModule({ imports: [SharedModule, LooseComponentsModule, PoliciesModule, OrganizationSettingsRoutingModule], - declarations: [ - SettingsComponent, - AccountComponent, - DeleteOrganizationComponent, - TwoFactorSetupComponent, - ], + declarations: [SettingsComponent, AccountComponent, TwoFactorSetupComponent], }) export class OrganizationSettingsModule {} diff --git a/apps/web/src/app/admin-console/organizations/sponsorships/families-for-enterprise-setup.component.html b/apps/web/src/app/admin-console/organizations/sponsorships/families-for-enterprise-setup.component.html index 055cdddb38a..34a8f21123c 100644 --- a/apps/web/src/app/admin-console/organizations/sponsorships/families-for-enterprise-setup.component.html +++ b/apps/web/src/app/admin-console/organizations/sponsorships/families-for-enterprise-setup.component.html @@ -50,4 +50,3 @@ - diff --git a/apps/web/src/app/admin-console/organizations/sponsorships/families-for-enterprise-setup.component.ts b/apps/web/src/app/admin-console/organizations/sponsorships/families-for-enterprise-setup.component.ts index 9d632f56c51..1406f080249 100644 --- a/apps/web/src/app/admin-console/organizations/sponsorships/families-for-enterprise-setup.component.ts +++ b/apps/web/src/app/admin-console/organizations/sponsorships/families-for-enterprise-setup.component.ts @@ -1,9 +1,9 @@ -import { Component, OnDestroy, OnInit, ViewChild, ViewContainerRef } from "@angular/core"; +import { Component, OnDestroy, OnInit, ViewChild } from "@angular/core"; import { ActivatedRoute, Router } from "@angular/router"; -import { Observable, Subject } from "rxjs"; +import { lastValueFrom, Observable, Subject } from "rxjs"; import { first, map, takeUntil } from "rxjs/operators"; -import { ModalService } from "@bitwarden/angular/services/modal.service"; +import { DialogServiceAbstraction } from "@bitwarden/angular/services/dialog"; import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; import { PlatformUtilsService } from "@bitwarden/common/abstractions/platformUtils.service"; @@ -11,12 +11,15 @@ import { ValidationService } from "@bitwarden/common/abstractions/validation.ser import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction"; import { Organization } from "@bitwarden/common/admin-console/models/domain/organization"; import { OrganizationSponsorshipRedeemRequest } from "@bitwarden/common/admin-console/models/request/organization/organization-sponsorship-redeem.request"; -import { PlanType, PlanSponsorshipType } from "@bitwarden/common/billing/enums"; +import { PlanSponsorshipType, PlanType } from "@bitwarden/common/billing/enums"; import { ProductType } from "@bitwarden/common/enums"; import { SyncService } from "@bitwarden/common/vault/abstractions/sync/sync.service.abstraction"; import { OrganizationPlansComponent } from "../../../billing/settings/organization-plans.component"; -import { DeleteOrganizationComponent } from "../../organizations/settings"; +import { + DeleteOrganizationDialogResult, + openDeleteOrganizationDialog, +} from "../settings/components"; @Component({ selector: "families-for-enterprise-setup", @@ -36,9 +39,6 @@ export class FamiliesForEnterpriseSetupComponent implements OnInit, OnDestroy { value.onSuccess.subscribe(this.onOrganizationCreateSuccess.bind(this)); } - @ViewChild("deleteOrganizationTemplate", { read: ViewContainerRef, static: true }) - deleteModalRef: ViewContainerRef; - loading = true; badToken = false; formPromise: Promise; @@ -62,7 +62,7 @@ export class FamiliesForEnterpriseSetupComponent implements OnInit, OnDestroy { private syncService: SyncService, private validationService: ValidationService, private organizationService: OrganizationService, - private modalService: ModalService + private dialogService: DialogServiceAbstraction ) {} async ngOnInit() { @@ -136,18 +136,18 @@ export class FamiliesForEnterpriseSetupComponent implements OnInit, OnDestroy { this.router.navigate(["/"]); } catch (e) { if (this.showNewOrganization) { - await this.modalService.openViewRef( - DeleteOrganizationComponent, - this.deleteModalRef, - (comp) => { - comp.organizationId = organizationId; - comp.deleteOrganizationRequestType = "InvalidFamiliesForEnterprise"; - // eslint-disable-next-line rxjs-angular/prefer-takeuntil - comp.onSuccess.subscribe(() => { - this.router.navigate(["/"]); - }); - } - ); + const dialog = openDeleteOrganizationDialog(this.dialogService, { + data: { + organizationId: organizationId, + requestType: "InvalidFamiliesForEnterprise", + }, + }); + + const result = await lastValueFrom(dialog.closed); + + if (result === DeleteOrganizationDialogResult.Deleted) { + this.router.navigate(["/"]); + } } this.validationService.showError(this.i18nService.t("sponsorshipTokenHasExpired")); } diff --git a/apps/web/src/app/oss-routing.module.ts b/apps/web/src/app/oss-routing.module.ts index 6a7ae61aa88..955e9b0da90 100644 --- a/apps/web/src/app/oss-routing.module.ts +++ b/apps/web/src/app/oss-routing.module.ts @@ -9,7 +9,6 @@ import { SubscriptionRoutingModule } from "../app/billing/settings/subscription- import { flagEnabled, Flags } from "../utils/flags"; import { TrialInitiationComponent } from "./accounts/trial-initiation/trial-initiation.component"; -import { OrganizationModule } from "./admin-console/organizations/organization.module"; import { AcceptFamilySponsorshipComponent } from "./admin-console/organizations/sponsorships/accept-family-sponsorship.component"; import { FamiliesForEnterpriseSetupComponent } from "./admin-console/organizations/sponsorships/families-for-enterprise-setup.component"; import { CreateOrganizationComponent } from "./admin-console/settings/create-organization.component"; @@ -249,7 +248,8 @@ const routes: Routes = [ }, { path: "organizations", - loadChildren: () => OrganizationModule, + loadChildren: () => + import("./admin-console/organizations/organization.module").then((m) => m.OrganizationModule), }, ]; diff --git a/apps/web/src/app/shared/components/user-verification/index.ts b/apps/web/src/app/shared/components/user-verification/index.ts new file mode 100644 index 00000000000..9fe21e309cb --- /dev/null +++ b/apps/web/src/app/shared/components/user-verification/index.ts @@ -0,0 +1,3 @@ +export * from "./user-verification.module"; +export * from "./user-verification-prompt.component"; +export * from "./user-verification.component"; diff --git a/apps/web/src/app/components/user-verification-prompt.component.html b/apps/web/src/app/shared/components/user-verification/user-verification-prompt.component.html similarity index 100% rename from apps/web/src/app/components/user-verification-prompt.component.html rename to apps/web/src/app/shared/components/user-verification/user-verification-prompt.component.html diff --git a/apps/web/src/app/components/user-verification-prompt.component.ts b/apps/web/src/app/shared/components/user-verification/user-verification-prompt.component.ts similarity index 100% rename from apps/web/src/app/components/user-verification-prompt.component.ts rename to apps/web/src/app/shared/components/user-verification/user-verification-prompt.component.ts diff --git a/apps/web/src/app/components/user-verification.component.html b/apps/web/src/app/shared/components/user-verification/user-verification.component.html similarity index 100% rename from apps/web/src/app/components/user-verification.component.html rename to apps/web/src/app/shared/components/user-verification/user-verification.component.html diff --git a/apps/web/src/app/components/user-verification.component.ts b/apps/web/src/app/shared/components/user-verification/user-verification.component.ts similarity index 100% rename from apps/web/src/app/components/user-verification.component.ts rename to apps/web/src/app/shared/components/user-verification/user-verification.component.ts diff --git a/apps/web/src/app/shared/components/user-verification/user-verification.module.ts b/apps/web/src/app/shared/components/user-verification/user-verification.module.ts new file mode 100644 index 00000000000..de6b32f7fea --- /dev/null +++ b/apps/web/src/app/shared/components/user-verification/user-verification.module.ts @@ -0,0 +1,13 @@ +import { NgModule } from "@angular/core"; + +import { SharedModule } from "../../shared.module"; + +import { UserVerificationPromptComponent } from "./user-verification-prompt.component"; +import { UserVerificationComponent } from "./user-verification.component"; + +@NgModule({ + imports: [SharedModule], + declarations: [UserVerificationComponent, UserVerificationPromptComponent], + exports: [UserVerificationComponent, UserVerificationPromptComponent], +}) +export class UserVerificationModule {} diff --git a/apps/web/src/app/shared/loose-components.module.ts b/apps/web/src/app/shared/loose-components.module.ts index a1ba393866a..c9f115a2732 100644 --- a/apps/web/src/app/shared/loose-components.module.ts +++ b/apps/web/src/app/shared/loose-components.module.ts @@ -64,8 +64,6 @@ import { TaxInfoComponent } from "../billing/settings/tax-info.component"; import { UserSubscriptionComponent } from "../billing/settings/user-subscription.component"; import { DynamicAvatarComponent } from "../components/dynamic-avatar.component"; import { SelectableAvatarComponent } from "../components/selectable-avatar.component"; -import { UserVerificationPromptComponent } from "../components/user-verification-prompt.component"; -import { UserVerificationComponent } from "../components/user-verification.component"; import { FooterComponent } from "../layouts/footer.component"; import { FrontendLayoutComponent } from "../layouts/frontend-layout.component"; import { NavbarComponent } from "../layouts/navbar.component"; @@ -110,6 +108,7 @@ import { AddEditComponent as OrgAddEditComponent } from "../vault/org-vault/add- import { AttachmentsComponent as OrgAttachmentsComponent } from "../vault/org-vault/attachments.component"; import { CollectionsComponent as OrgCollectionsComponent } from "../vault/org-vault/collections.component"; +import { UserVerificationModule } from "./components/user-verification"; import { SharedModule } from "./shared.module"; // Please do not add to this list of declarations - we should refactor these into modules when doing so makes sense until there are none left. @@ -120,6 +119,7 @@ import { SharedModule } from "./shared.module"; OrganizationCreateModule, RegisterFormModule, ProductSwitcherModule, + UserVerificationModule, ChangeKdfModule, DynamicAvatarComponent, ], @@ -178,7 +178,6 @@ import { SharedModule } from "./shared.module"; GeneratorComponent, PasswordGeneratorHistoryComponent, PasswordRepromptComponent, - UserVerificationPromptComponent, PaymentComponent, PaymentMethodComponent, PreferencesComponent, @@ -224,7 +223,6 @@ import { SharedModule } from "./shared.module"; BillingHistoryViewComponent, UserLayoutComponent, UserSubscriptionComponent, - UserVerificationComponent, VaultTimeoutInputComponent, VerifyEmailComponent, VerifyEmailTokenComponent, @@ -330,7 +328,6 @@ import { SharedModule } from "./shared.module"; BillingHistoryViewComponent, UserLayoutComponent, UserSubscriptionComponent, - UserVerificationComponent, VaultTimeoutInputComponent, VerifyEmailComponent, VerifyEmailTokenComponent, diff --git a/apps/web/src/app/tools/import-export/export.component.ts b/apps/web/src/app/tools/import-export/export.component.ts index 0b3982dcb7d..a615eed07de 100644 --- a/apps/web/src/app/tools/import-export/export.component.ts +++ b/apps/web/src/app/tools/import-export/export.component.ts @@ -15,7 +15,7 @@ import { PolicyService } from "@bitwarden/common/admin-console/abstractions/poli import { EncryptedExportType } from "@bitwarden/common/enums"; import { VaultExportServiceAbstraction } from "@bitwarden/exporter/vault-export"; -import { UserVerificationPromptComponent } from "../../components/user-verification-prompt.component"; +import { UserVerificationPromptComponent } from "../../shared/components/user-verification"; @Component({ selector: "app-export", diff --git a/bitwarden_license/bit-web/src/app/secrets-manager/service-accounts/access/access-tokens.component.ts b/bitwarden_license/bit-web/src/app/secrets-manager/service-accounts/access/access-tokens.component.ts index 2355f3049f0..e6eadd9e927 100644 --- a/bitwarden_license/bit-web/src/app/secrets-manager/service-accounts/access/access-tokens.component.ts +++ b/bitwarden_license/bit-web/src/app/secrets-manager/service-accounts/access/access-tokens.component.ts @@ -6,7 +6,7 @@ import { DialogServiceAbstraction } from "@bitwarden/angular/services/dialog"; import { ModalService } from "@bitwarden/angular/services/modal.service"; import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; import { PlatformUtilsService } from "@bitwarden/common/abstractions/platformUtils.service"; -import { UserVerificationPromptComponent } from "@bitwarden/web-vault/app/components/user-verification-prompt.component"; +import { UserVerificationPromptComponent } from "@bitwarden/web-vault/app/shared/components/user-verification"; import { AccessTokenView } from "../models/view/access-token.view"; diff --git a/bitwarden_license/bit-web/src/app/secrets-manager/settings/porting/sm-export.component.ts b/bitwarden_license/bit-web/src/app/secrets-manager/settings/porting/sm-export.component.ts index 74d90c52a6c..ee90b4fcb55 100644 --- a/bitwarden_license/bit-web/src/app/secrets-manager/settings/porting/sm-export.component.ts +++ b/bitwarden_license/bit-web/src/app/secrets-manager/settings/porting/sm-export.component.ts @@ -9,7 +9,7 @@ import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/abstractions/log.service"; import { PlatformUtilsService } from "@bitwarden/common/abstractions/platformUtils.service"; import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction"; -import { UserVerificationPromptComponent } from "@bitwarden/web-vault/app/components/user-verification-prompt.component"; +import { UserVerificationPromptComponent } from "@bitwarden/web-vault/app/shared/components/user-verification"; import { SecretsManagerPortingApiService } from "../services/sm-porting-api.service"; import { SecretsManagerPortingService } from "../services/sm-porting.service";