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 @@
+
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";