From 2425cda4d776527c5b27181cad724becc7ab3ddb Mon Sep 17 00:00:00 2001 From: Thomas Rittson <31796059+eliykat@users.noreply.github.com> Date: Thu, 20 Feb 2025 12:06:43 +1000 Subject: [PATCH] [PM-18356] Reconcile ownership of import export and reporting (#13439) * Move AC import, export and reporting to Tools ownership --- .../organization-reporting-routing.module.ts | 12 +++++++----- .../settings/organization-settings-routing.module.ts | 6 ++++-- apps/web/src/app/shared/loose-components.module.ts | 12 +++++++----- .../import}/org-import.component.html | 0 .../import}/org-import.component.ts | 5 +++-- .../exposed-passwords-report.component.ts | 5 ++--- .../inactive-two-factor-report.component.ts | 5 ++--- .../reused-passwords-report.component.ts | 5 ++--- .../unsecured-websites-report.component.ts | 5 ++--- .../weak-passwords-report.component.ts | 5 ++--- .../vault-export/org-vault-export.component.html | 0 .../tools/vault-export/org-vault-export.component.ts | 2 +- 12 files changed, 32 insertions(+), 30 deletions(-) rename apps/web/src/app/{admin-console/organizations/settings => tools/import}/org-import.component.html (100%) rename apps/web/src/app/{admin-console/organizations/settings => tools/import}/org-import.component.ts (92%) rename apps/web/src/app/{admin-console/organizations/tools => tools/reports/pages/organizations}/exposed-passwords-report.component.ts (92%) rename apps/web/src/app/{admin-console/organizations/tools => tools/reports/pages/organizations}/inactive-two-factor-report.component.ts (91%) rename apps/web/src/app/{admin-console/organizations/tools => tools/reports/pages/organizations}/reused-passwords-report.component.ts (92%) rename apps/web/src/app/{admin-console/organizations/tools => tools/reports/pages/organizations}/unsecured-websites-report.component.ts (91%) rename apps/web/src/app/{admin-console/organizations/tools => tools/reports/pages/organizations}/weak-passwords-report.component.ts (93%) rename apps/web/src/app/{admin-console/organizations => }/tools/vault-export/org-vault-export.component.html (100%) rename apps/web/src/app/{admin-console/organizations => }/tools/vault-export/org-vault-export.component.ts (92%) diff --git a/apps/web/src/app/admin-console/organizations/reporting/organization-reporting-routing.module.ts b/apps/web/src/app/admin-console/organizations/reporting/organization-reporting-routing.module.ts index d6c7bdd97c..2de5b83c40 100644 --- a/apps/web/src/app/admin-console/organizations/reporting/organization-reporting-routing.module.ts +++ b/apps/web/src/app/admin-console/organizations/reporting/organization-reporting-routing.module.ts @@ -6,11 +6,13 @@ import { RouterModule, Routes } from "@angular/router"; import { canAccessReportingTab } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction"; import { Organization } from "@bitwarden/common/admin-console/models/domain/organization"; -import { ExposedPasswordsReportComponent } from "../../../admin-console/organizations/tools/exposed-passwords-report.component"; -import { InactiveTwoFactorReportComponent } from "../../../admin-console/organizations/tools/inactive-two-factor-report.component"; -import { ReusedPasswordsReportComponent } from "../../../admin-console/organizations/tools/reused-passwords-report.component"; -import { UnsecuredWebsitesReportComponent } from "../../../admin-console/organizations/tools/unsecured-websites-report.component"; -import { WeakPasswordsReportComponent } from "../../../admin-console/organizations/tools/weak-passwords-report.component"; +/* eslint no-restricted-imports: "off" -- Normally prohibited by Tools Team eslint rules but required here */ +import { ExposedPasswordsReportComponent } from "../../../tools/reports/pages/organizations/exposed-passwords-report.component"; +import { InactiveTwoFactorReportComponent } from "../../../tools/reports/pages/organizations/inactive-two-factor-report.component"; +import { ReusedPasswordsReportComponent } from "../../../tools/reports/pages/organizations/reused-passwords-report.component"; +import { UnsecuredWebsitesReportComponent } from "../../../tools/reports/pages/organizations/unsecured-websites-report.component"; +import { WeakPasswordsReportComponent } from "../../../tools/reports/pages/organizations/weak-passwords-report.component"; +/* eslint no-restricted-imports: "error" */ import { isPaidOrgGuard } from "../guards/is-paid-org.guard"; import { organizationPermissionsGuard } from "../guards/org-permissions.guard"; import { organizationRedirectGuard } from "../guards/org-redirect.guard"; diff --git a/apps/web/src/app/admin-console/organizations/settings/organization-settings-routing.module.ts b/apps/web/src/app/admin-console/organizations/settings/organization-settings-routing.module.ts index 06ceaa0d9c..a644086628 100644 --- a/apps/web/src/app/admin-console/organizations/settings/organization-settings-routing.module.ts +++ b/apps/web/src/app/admin-console/organizations/settings/organization-settings-routing.module.ts @@ -52,7 +52,9 @@ const routes: Routes = [ { path: "import", loadComponent: () => - import("./org-import.component").then((mod) => mod.OrgImportComponent), + import("../../../tools/import/org-import.component").then( + (mod) => mod.OrgImportComponent, + ), canActivate: [organizationPermissionsGuard((org) => org.canAccessImport)], data: { titleId: "importData", @@ -61,7 +63,7 @@ const routes: Routes = [ { path: "export", loadComponent: () => - import("../tools/vault-export/org-vault-export.component").then( + import("../../../tools/vault-export/org-vault-export.component").then( (mod) => mod.OrganizationVaultExportComponent, ), canActivate: [organizationPermissionsGuard((org) => org.canAccessExport)], diff --git a/apps/web/src/app/shared/loose-components.module.ts b/apps/web/src/app/shared/loose-components.module.ts index b565621b77..5597123b24 100644 --- a/apps/web/src/app/shared/loose-components.module.ts +++ b/apps/web/src/app/shared/loose-components.module.ts @@ -12,11 +12,6 @@ import { EventsComponent as OrgEventsComponent } from "../admin-console/organiza import { UserConfirmComponent as OrgUserConfirmComponent } from "../admin-console/organizations/manage/user-confirm.component"; import { VerifyRecoverDeleteOrgComponent } from "../admin-console/organizations/manage/verify-recover-delete-org.component"; import { AcceptFamilySponsorshipComponent } from "../admin-console/organizations/sponsorships/accept-family-sponsorship.component"; -import { ExposedPasswordsReportComponent as OrgExposedPasswordsReportComponent } from "../admin-console/organizations/tools/exposed-passwords-report.component"; -import { InactiveTwoFactorReportComponent as OrgInactiveTwoFactorReportComponent } from "../admin-console/organizations/tools/inactive-two-factor-report.component"; -import { ReusedPasswordsReportComponent as OrgReusedPasswordsReportComponent } from "../admin-console/organizations/tools/reused-passwords-report.component"; -import { UnsecuredWebsitesReportComponent as OrgUnsecuredWebsitesReportComponent } from "../admin-console/organizations/tools/unsecured-websites-report.component"; -import { WeakPasswordsReportComponent as OrgWeakPasswordsReportComponent } from "../admin-console/organizations/tools/weak-passwords-report.component"; import { HintComponent } from "../auth/hint.component"; import { RecoverDeleteComponent } from "../auth/recover-delete.component"; import { RecoverTwoFactorComponent } from "../auth/recover-two-factor.component"; @@ -65,6 +60,13 @@ import { ProductSwitcherModule } from "../layouts/product-switcher/product-switc import { UserLayoutComponent } from "../layouts/user-layout.component"; import { DomainRulesComponent } from "../settings/domain-rules.component"; import { PreferencesComponent } from "../settings/preferences.component"; +/* eslint no-restricted-imports: "off" -- Temporarily disabled until Tools refactors these out of this module */ +import { ExposedPasswordsReportComponent as OrgExposedPasswordsReportComponent } from "../tools/reports/pages/organizations/exposed-passwords-report.component"; +import { InactiveTwoFactorReportComponent as OrgInactiveTwoFactorReportComponent } from "../tools/reports/pages/organizations/inactive-two-factor-report.component"; +import { ReusedPasswordsReportComponent as OrgReusedPasswordsReportComponent } from "../tools/reports/pages/organizations/reused-passwords-report.component"; +import { UnsecuredWebsitesReportComponent as OrgUnsecuredWebsitesReportComponent } from "../tools/reports/pages/organizations/unsecured-websites-report.component"; +import { WeakPasswordsReportComponent as OrgWeakPasswordsReportComponent } from "../tools/reports/pages/organizations/weak-passwords-report.component"; +/* eslint no-restricted-imports: "error" */ import { AddEditComponent as SendAddEditComponent } from "../tools/send/add-edit.component"; import { PremiumBadgeComponent } from "../vault/components/premium-badge.component"; import { AddEditCustomFieldsComponent } from "../vault/individual-vault/add-edit-custom-fields.component"; diff --git a/apps/web/src/app/admin-console/organizations/settings/org-import.component.html b/apps/web/src/app/tools/import/org-import.component.html similarity index 100% rename from apps/web/src/app/admin-console/organizations/settings/org-import.component.html rename to apps/web/src/app/tools/import/org-import.component.html diff --git a/apps/web/src/app/admin-console/organizations/settings/org-import.component.ts b/apps/web/src/app/tools/import/org-import.component.ts similarity index 92% rename from apps/web/src/app/admin-console/organizations/settings/org-import.component.ts rename to apps/web/src/app/tools/import/org-import.component.ts index e7a0051253..90c13833ff 100644 --- a/apps/web/src/app/admin-console/organizations/settings/org-import.component.ts +++ b/apps/web/src/app/tools/import/org-import.component.ts @@ -14,8 +14,9 @@ import { getUserId } from "@bitwarden/common/auth/services/account.service"; import { ImportCollectionServiceAbstraction } from "@bitwarden/importer-core"; import { ImportComponent } from "@bitwarden/importer-ui"; -import { LooseComponentsModule, SharedModule } from "../../../shared"; -import { ImportCollectionAdminService } from "../../../tools/import/import-collection-admin.service"; +import { LooseComponentsModule, SharedModule } from "../../shared"; + +import { ImportCollectionAdminService } from "./import-collection-admin.service"; @Component({ templateUrl: "org-import.component.html", diff --git a/apps/web/src/app/admin-console/organizations/tools/exposed-passwords-report.component.ts b/apps/web/src/app/tools/reports/pages/organizations/exposed-passwords-report.component.ts similarity index 92% rename from apps/web/src/app/admin-console/organizations/tools/exposed-passwords-report.component.ts rename to apps/web/src/app/tools/reports/pages/organizations/exposed-passwords-report.component.ts index 5601c2f141..7658da2e79 100644 --- a/apps/web/src/app/admin-console/organizations/tools/exposed-passwords-report.component.ts +++ b/apps/web/src/app/tools/reports/pages/organizations/exposed-passwords-report.component.ts @@ -19,12 +19,11 @@ import { Cipher } from "@bitwarden/common/vault/models/domain/cipher"; import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view"; import { PasswordRepromptService } from "@bitwarden/vault"; -// eslint-disable-next-line no-restricted-imports -import { ExposedPasswordsReportComponent as BaseExposedPasswordsReportComponent } from "../../../tools/reports/pages/exposed-passwords-report.component"; +import { ExposedPasswordsReportComponent as BaseExposedPasswordsReportComponent } from "../exposed-passwords-report.component"; @Component({ selector: "app-org-exposed-passwords-report", - templateUrl: "../../../tools/reports/pages/exposed-passwords-report.component.html", + templateUrl: "../exposed-passwords-report.component.html", }) // eslint-disable-next-line rxjs-angular/prefer-takeuntil export class ExposedPasswordsReportComponent diff --git a/apps/web/src/app/admin-console/organizations/tools/inactive-two-factor-report.component.ts b/apps/web/src/app/tools/reports/pages/organizations/inactive-two-factor-report.component.ts similarity index 91% rename from apps/web/src/app/admin-console/organizations/tools/inactive-two-factor-report.component.ts rename to apps/web/src/app/tools/reports/pages/organizations/inactive-two-factor-report.component.ts index 4ddbd58efc..8db0389108 100644 --- a/apps/web/src/app/admin-console/organizations/tools/inactive-two-factor-report.component.ts +++ b/apps/web/src/app/tools/reports/pages/organizations/inactive-two-factor-report.component.ts @@ -17,12 +17,11 @@ import { SyncService } from "@bitwarden/common/vault/abstractions/sync/sync.serv import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view"; import { PasswordRepromptService } from "@bitwarden/vault"; -// eslint-disable-next-line no-restricted-imports -import { InactiveTwoFactorReportComponent as BaseInactiveTwoFactorReportComponent } from "../../../tools/reports/pages/inactive-two-factor-report.component"; +import { InactiveTwoFactorReportComponent as BaseInactiveTwoFactorReportComponent } from "../inactive-two-factor-report.component"; @Component({ selector: "app-inactive-two-factor-report", - templateUrl: "../../../tools/reports/pages/inactive-two-factor-report.component.html", + templateUrl: "../inactive-two-factor-report.component.html", }) // eslint-disable-next-line rxjs-angular/prefer-takeuntil export class InactiveTwoFactorReportComponent diff --git a/apps/web/src/app/admin-console/organizations/tools/reused-passwords-report.component.ts b/apps/web/src/app/tools/reports/pages/organizations/reused-passwords-report.component.ts similarity index 92% rename from apps/web/src/app/admin-console/organizations/tools/reused-passwords-report.component.ts rename to apps/web/src/app/tools/reports/pages/organizations/reused-passwords-report.component.ts index 19f5d3607f..a15078d48f 100644 --- a/apps/web/src/app/admin-console/organizations/tools/reused-passwords-report.component.ts +++ b/apps/web/src/app/tools/reports/pages/organizations/reused-passwords-report.component.ts @@ -18,12 +18,11 @@ import { Cipher } from "@bitwarden/common/vault/models/domain/cipher"; import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view"; import { PasswordRepromptService } from "@bitwarden/vault"; -// eslint-disable-next-line no-restricted-imports -import { ReusedPasswordsReportComponent as BaseReusedPasswordsReportComponent } from "../../../tools/reports/pages/reused-passwords-report.component"; +import { ReusedPasswordsReportComponent as BaseReusedPasswordsReportComponent } from "../reused-passwords-report.component"; @Component({ selector: "app-reused-passwords-report", - templateUrl: "../../../tools/reports/pages/reused-passwords-report.component.html", + templateUrl: "../reused-passwords-report.component.html", }) // eslint-disable-next-line rxjs-angular/prefer-takeuntil export class ReusedPasswordsReportComponent diff --git a/apps/web/src/app/admin-console/organizations/tools/unsecured-websites-report.component.ts b/apps/web/src/app/tools/reports/pages/organizations/unsecured-websites-report.component.ts similarity index 91% rename from apps/web/src/app/admin-console/organizations/tools/unsecured-websites-report.component.ts rename to apps/web/src/app/tools/reports/pages/organizations/unsecured-websites-report.component.ts index f6c1f9cff6..a67116cc44 100644 --- a/apps/web/src/app/admin-console/organizations/tools/unsecured-websites-report.component.ts +++ b/apps/web/src/app/tools/reports/pages/organizations/unsecured-websites-report.component.ts @@ -17,12 +17,11 @@ import { SyncService } from "@bitwarden/common/vault/abstractions/sync/sync.serv import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view"; import { PasswordRepromptService } from "@bitwarden/vault"; -// eslint-disable-next-line no-restricted-imports -import { UnsecuredWebsitesReportComponent as BaseUnsecuredWebsitesReportComponent } from "../../../tools/reports/pages/unsecured-websites-report.component"; +import { UnsecuredWebsitesReportComponent as BaseUnsecuredWebsitesReportComponent } from "../unsecured-websites-report.component"; @Component({ selector: "app-unsecured-websites-report", - templateUrl: "../../../tools/reports/pages/unsecured-websites-report.component.html", + templateUrl: "../unsecured-websites-report.component.html", }) // eslint-disable-next-line rxjs-angular/prefer-takeuntil export class UnsecuredWebsitesReportComponent diff --git a/apps/web/src/app/admin-console/organizations/tools/weak-passwords-report.component.ts b/apps/web/src/app/tools/reports/pages/organizations/weak-passwords-report.component.ts similarity index 93% rename from apps/web/src/app/admin-console/organizations/tools/weak-passwords-report.component.ts rename to apps/web/src/app/tools/reports/pages/organizations/weak-passwords-report.component.ts index 7c1c71b934..a476a50e73 100644 --- a/apps/web/src/app/admin-console/organizations/tools/weak-passwords-report.component.ts +++ b/apps/web/src/app/tools/reports/pages/organizations/weak-passwords-report.component.ts @@ -19,12 +19,11 @@ import { Cipher } from "@bitwarden/common/vault/models/domain/cipher"; import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view"; import { PasswordRepromptService } from "@bitwarden/vault"; -// eslint-disable-next-line no-restricted-imports -import { WeakPasswordsReportComponent as BaseWeakPasswordsReportComponent } from "../../../tools/reports/pages/weak-passwords-report.component"; +import { WeakPasswordsReportComponent as BaseWeakPasswordsReportComponent } from "../weak-passwords-report.component"; @Component({ selector: "app-weak-passwords-report", - templateUrl: "../../../tools/reports/pages/weak-passwords-report.component.html", + templateUrl: "../weak-passwords-report.component.html", }) // eslint-disable-next-line rxjs-angular/prefer-takeuntil export class WeakPasswordsReportComponent diff --git a/apps/web/src/app/admin-console/organizations/tools/vault-export/org-vault-export.component.html b/apps/web/src/app/tools/vault-export/org-vault-export.component.html similarity index 100% rename from apps/web/src/app/admin-console/organizations/tools/vault-export/org-vault-export.component.html rename to apps/web/src/app/tools/vault-export/org-vault-export.component.html diff --git a/apps/web/src/app/admin-console/organizations/tools/vault-export/org-vault-export.component.ts b/apps/web/src/app/tools/vault-export/org-vault-export.component.ts similarity index 92% rename from apps/web/src/app/admin-console/organizations/tools/vault-export/org-vault-export.component.ts rename to apps/web/src/app/tools/vault-export/org-vault-export.component.ts index 93b8ebd1f2..d84d2b26a9 100644 --- a/apps/web/src/app/admin-console/organizations/tools/vault-export/org-vault-export.component.ts +++ b/apps/web/src/app/tools/vault-export/org-vault-export.component.ts @@ -5,7 +5,7 @@ import { ActivatedRoute } from "@angular/router"; import { ExportComponent } from "@bitwarden/vault-export-ui"; -import { LooseComponentsModule, SharedModule } from "../../../../shared"; +import { LooseComponentsModule, SharedModule } from "../../shared"; @Component({ templateUrl: "org-vault-export.component.html",