1
0
mirror of https://github.com/bitwarden/browser synced 2026-02-07 04:03:29 +00:00

Merge remote-tracking branch 'origin' into auth/pm-18720/change-password-component-non-dialog-v3

This commit is contained in:
Patrick Pimentel
2025-06-03 09:53:12 -04:00
271 changed files with 219 additions and 1226 deletions

3
.gitignore vendored
View File

@@ -34,6 +34,9 @@ build
# Testing
coverage
junit.xml
## The "base" root level folder is expected for some local tests that do
## comparisons between the current branch and a base branch (usually main)
base/
# Misc
*.crx

View File

@@ -1,6 +1,6 @@
const { pathsToModuleNameMapper } = require("ts-jest");
const { compilerOptions } = require("./tsconfig");
const { compilerOptions } = require("../../tsconfig.base");
const sharedConfig = require("../../libs/shared/jest.config.angular");
@@ -9,9 +9,9 @@ module.exports = {
...sharedConfig,
setupFilesAfterEnv: ["<rootDir>/test.setup.ts"],
moduleNameMapper: pathsToModuleNameMapper(
{ "@bitwarden/common/spec": ["../../libs/common/spec"], ...(compilerOptions?.paths ?? {}) },
{ "@bitwarden/common/spec": ["libs/common/spec"], ...(compilerOptions?.paths ?? {}) },
{
prefix: "<rootDir>/",
prefix: "<rootDir>/../../",
},
),
};

View File

@@ -1371,8 +1371,8 @@
"featureUnavailable": {
"message": "Feature unavailable"
},
"encryptionKeyMigrationRequired": {
"message": "Encryption key migration required. Please login through the web vault to update your encryption key."
"legacyEncryptionUnsupported": {
"message": "Legacy encryption is no longer supported. Please contact support to recover your account."
},
"premiumMembership": {
"message": "Premium membership"

View File

@@ -12,7 +12,6 @@ import { FilePopoutUtilsService } from "../services/file-popout-utils.service";
@Component({
selector: "tools-file-popout-callout",
templateUrl: "file-popout-callout.component.html",
standalone: true,
imports: [CommonModule, JslibModule, CalloutModule],
})
export class FilePopoutCalloutComponent implements OnInit {

View File

@@ -28,7 +28,6 @@ import { PopupPageComponent } from "../../../platform/popup/layout/popup-page.co
@Component({
selector: "app-credential-generator-history",
templateUrl: "credential-generator-history.component.html",
standalone: true,
imports: [
ButtonModule,
CommonModule,

View File

@@ -11,7 +11,6 @@ import { PopupHeaderComponent } from "../../../platform/popup/layout/popup-heade
import { PopupPageComponent } from "../../../platform/popup/layout/popup-page.component";
@Component({
standalone: true,
selector: "credential-generator",
templateUrl: "credential-generator.component.html",
imports: [

View File

@@ -63,7 +63,6 @@ export type AddEditQueryParams = Partial<Record<keyof QueryParams, string>>;
@Component({
selector: "tools-send-add-edit",
templateUrl: "send-add-edit.component.html",
standalone: true,
providers: [{ provide: SendFormConfigService, useClass: DefaultSendFormConfigService }],
imports: [
CommonModule,

View File

@@ -23,7 +23,6 @@ import { PopupPageComponent } from "../../../../platform/popup/layout/popup-page
@Component({
selector: "app-send-created",
templateUrl: "./send-created.component.html",
standalone: true,
imports: [
ButtonModule,
CommonModule,

View File

@@ -15,7 +15,6 @@ import { SendFilePopoutDialogComponent } from "./send-file-popout-dialog.compone
@Component({
selector: "send-file-popout-dialog-container",
templateUrl: "./send-file-popout-dialog-container.component.html",
standalone: true,
imports: [JslibModule, CommonModule],
})
export class SendFilePopoutDialogContainerComponent implements OnInit {

View File

@@ -9,7 +9,6 @@ import BrowserPopupUtils from "../../../../platform/popup/browser-popup-utils";
@Component({
selector: "send-file-popout-dialog",
templateUrl: "./send-file-popout-dialog.component.html",
standalone: true,
imports: [JslibModule, CommonModule, DialogModule, ButtonModule, TypographyModule],
})
export class SendFilePopoutDialogComponent {

View File

@@ -35,7 +35,6 @@ export enum SendState {
@Component({
templateUrl: "send-v2.component.html",
standalone: true,
imports: [
CalloutModule,
PopupPageComponent,

View File

@@ -18,7 +18,6 @@ import {
@Component({
templateUrl: "about-dialog.component.html",
standalone: true,
imports: [CommonModule, JslibModule, DialogModule, ButtonModule, TypographyModule],
})
export class AboutDialogComponent {

View File

@@ -33,7 +33,6 @@ const RateUrls = {
@Component({
templateUrl: "about-page-v2.component.html",
standalone: true,
imports: [
CommonModule,
JslibModule,

View File

@@ -14,7 +14,6 @@ import { PopupPageComponent } from "../../../../platform/popup/layout/popup-page
@Component({
templateUrl: "export-browser-v2.component.html",
standalone: true,
imports: [
CommonModule,
JslibModule,

View File

@@ -13,7 +13,6 @@ import { PopupPageComponent } from "../../../../platform/popup/layout/popup-page
@Component({
templateUrl: "import-browser-v2.component.html",
standalone: true,
imports: [
CommonModule,
JslibModule,

View File

@@ -28,7 +28,6 @@ import { PopupPageComponent } from "../../../platform/popup/layout/popup-page.co
@Component({
templateUrl: "settings-v2.component.html",
standalone: true,
imports: [
CommonModule,
JslibModule,

View File

@@ -11,7 +11,6 @@ import { I18nPipe } from "@bitwarden/ui-common";
@Component({
selector: "vault-at-risk-password-callout",
standalone: true,
imports: [CommonModule, AnchorLinkDirective, RouterModule, CalloutModule, I18nPipe],
templateUrl: "./at-risk-password-callout.component.html",
})

View File

@@ -27,7 +27,6 @@ export enum AtRiskCarouselDialogResult {
DarkImageSourceDirective,
I18nPipe,
],
standalone: true,
})
export class AtRiskCarouselDialogComponent {
private dialogRef = inject(DialogRef);

View File

@@ -35,7 +35,6 @@ import { AtRiskPasswordPageService } from "./at-risk-password-page.service";
import { AtRiskPasswordsComponent } from "./at-risk-passwords.component";
@Component({
standalone: true,
selector: "popup-header",
template: `<ng-content></ng-content>`,
})
@@ -45,7 +44,6 @@ class MockPopupHeaderComponent {
}
@Component({
standalone: true,
selector: "popup-page",
template: `<ng-content></ng-content>`,
})
@@ -54,7 +52,6 @@ class MockPopupPageComponent {
}
@Component({
standalone: true,
selector: "app-vault-icon",
template: `<ng-content></ng-content>`,
})

View File

@@ -79,7 +79,6 @@ import { AtRiskPasswordPageService } from "./at-risk-password-page.service";
{ provide: ChangeLoginPasswordService, useClass: DefaultChangeLoginPasswordService },
],
selector: "vault-at-risk-passwords",
standalone: true,
templateUrl: "./at-risk-passwords.component.html",
})
export class AtRiskPasswordsComponent implements OnInit {

View File

@@ -132,7 +132,6 @@ export type AddEditQueryParams = Partial<Record<keyof QueryParams, string>>;
@Component({
selector: "app-add-edit-v2",
templateUrl: "add-edit-v2.component.html",
standalone: true,
providers: [
{ provide: CipherFormConfigService, useClass: DefaultCipherFormConfigService },
{ provide: TotpCaptureService, useClass: BrowserTotpCaptureService },

View File

@@ -28,7 +28,6 @@ import { PopupHeaderComponent } from "../../../../../platform/popup/layout/popup
import { PopupPageComponent } from "../../../../../platform/popup/layout/popup-page.component";
@Component({
standalone: true,
selector: "app-assign-collections",
templateUrl: "./assign-collections.component.html",
imports: [

View File

@@ -26,7 +26,6 @@ import { PopupRouterCacheService } from "../../../../../platform/popup/view-cach
import { AttachmentsV2Component } from "./attachments-v2.component";
@Component({
standalone: true,
selector: "popup-header",
template: `<ng-content></ng-content>`,
})
@@ -36,7 +35,6 @@ class MockPopupHeaderComponent {
}
@Component({
standalone: true,
selector: "popup-footer",
template: `<ng-content></ng-content>`,
})

View File

@@ -18,7 +18,6 @@ import { PopupPageComponent } from "../../../../../platform/popup/layout/popup-p
import { PopupRouterCacheService } from "../../../../../platform/popup/view-cache/popup-router-cache.service";
@Component({
standalone: true,
selector: "app-attachments-v2",
templateUrl: "./attachments-v2.component.html",
imports: [

View File

@@ -24,7 +24,6 @@ import BrowserPopupUtils from "../../../../../../platform/popup/browser-popup-ut
import { FilePopoutUtilsService } from "../../../../../../tools/popup/services/file-popout-utils.service";
@Component({
standalone: true,
selector: "app-open-attachments",
templateUrl: "./open-attachments.component.html",
imports: [BadgeModule, CommonModule, ItemModule, JslibModule, TypographyModule],

View File

@@ -15,7 +15,6 @@ import { PopupCipherView } from "../../../views/popup-cipher.view";
import { VaultListItemsContainerComponent } from "../vault-list-items-container/vault-list-items-container.component";
@Component({
standalone: true,
imports: [
CommonModule,
TypographyModule,

View File

@@ -16,7 +16,6 @@ import { VaultPopupAutofillService } from "../../../services/vault-popup-autofil
const blockedURISettingsRoute = "/blocked-domains";
@Component({
standalone: true,
imports: [
BannerModule,
CommonModule,

View File

@@ -20,7 +20,6 @@ import { IntroCarouselService } from "../../../services/intro-carousel.service";
JslibModule,
I18nPipe,
],
standalone: true,
})
export class IntroCarouselComponent {
protected securityHandshake = VaultIcons.SecurityHandshake;

View File

@@ -19,7 +19,6 @@ type CipherItem = {
};
@Component({
standalone: true,
selector: "app-item-copy-actions",
templateUrl: "item-copy-actions.component.html",
imports: [

View File

@@ -28,7 +28,6 @@ import { VaultPopupAutofillService } from "../../../services/vault-popup-autofil
import { AddEditQueryParams } from "../add-edit/add-edit-v2.component";
@Component({
standalone: true,
selector: "app-item-more-options",
templateUrl: "./item-more-options.component.html",
imports: [ItemModule, IconButtonModule, MenuModule, CommonModule, JslibModule, RouterModule],

View File

@@ -23,7 +23,6 @@ export interface NewItemInitialValues {
@Component({
selector: "app-new-item-dropdown",
templateUrl: "new-item-dropdown-v2.component.html",
standalone: true,
imports: [NoItemsModule, JslibModule, CommonModule, ButtonModule, RouterLink, MenuModule],
})
export class NewItemDropdownV2Component implements OnInit {

View File

@@ -21,7 +21,6 @@ import {
@Component({
selector: "vault-cipher-form-generator",
template: "",
standalone: true,
})
class MockCipherFormGenerator {
@Input() type: "password" | "username" = "password";

View File

@@ -40,7 +40,6 @@ export enum GeneratorDialogAction {
@Component({
selector: "app-vault-generator-dialog",
templateUrl: "./vault-generator-dialog.component.html",
standalone: true,
imports: [
PopupPageComponent,
PopupHeaderComponent,

View File

@@ -20,7 +20,6 @@ import { VaultV2SearchComponent } from "../vault-search/vault-v2-search.componen
@Component({
selector: "app-vault-header-v2",
templateUrl: "vault-header-v2.component.html",
standalone: true,
imports: [
VaultV2SearchComponent,
VaultListFiltersComponent,

View File

@@ -9,7 +9,6 @@ import { ChipSelectComponent } from "@bitwarden/components";
import { VaultPopupListFiltersService } from "../../../services/vault-popup-list-filters.service";
@Component({
standalone: true,
selector: "app-vault-list-filters",
templateUrl: "./vault-list-filters.component.html",
imports: [CommonModule, JslibModule, ChipSelectComponent, ReactiveFormsModule],

View File

@@ -77,7 +77,6 @@ import { ItemMoreOptionsComponent } from "../item-more-options/item-more-options
],
selector: "app-vault-list-items-container",
templateUrl: "vault-list-items-container.component.html",
standalone: true,
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class VaultListItemsContainerComponent implements OnInit, AfterViewInit {

View File

@@ -19,7 +19,6 @@ import { PopupPageComponent } from "../../../../../platform/popup/layout/popup-p
import { PopupRouterCacheService } from "../../../../../platform/popup/view-cache/popup-router-cache.service";
@Component({
standalone: true,
selector: "vault-password-history-v2",
templateUrl: "vault-password-history-v2.component.html",
imports: [

View File

@@ -13,7 +13,6 @@ const SearchTextDebounceInterval = 200;
@Component({
imports: [CommonModule, SearchModule, JslibModule, FormsModule],
standalone: true,
selector: "app-vault-v2-search",
templateUrl: "vault-v2-search.component.html",
})

View File

@@ -66,7 +66,6 @@ enum VaultState {
@Component({
selector: "app-vault",
templateUrl: "vault-v2.component.html",
standalone: true,
imports: [
BlockedInjectionBanner,
PopupPageComponent,

View File

@@ -80,7 +80,6 @@ type LoadAction =
@Component({
selector: "app-view-v2",
templateUrl: "view-v2.component.html",
standalone: true,
imports: [
CommonModule,
SearchModule,

View File

@@ -23,7 +23,6 @@ import { VaultPopupCopyButtonsService } from "../services/vault-popup-copy-butto
import { AppearanceV2Component } from "./appearance-v2.component";
@Component({
standalone: true,
selector: "popup-header",
template: `<ng-content></ng-content>`,
})
@@ -33,7 +32,6 @@ class MockPopupHeaderComponent {
}
@Component({
standalone: true,
selector: "popup-page",
template: `<ng-content></ng-content>`,
})

View File

@@ -35,7 +35,6 @@ import {
import { VaultPopupCopyButtonsService } from "../services/vault-popup-copy-buttons.service";
@Component({
standalone: true,
templateUrl: "./appearance-v2.component.html",
imports: [
CommonModule,

View File

@@ -15,7 +15,6 @@ import { PopupPageComponent } from "../../../platform/popup/layout/popup-page.co
@Component({
templateUrl: "download-bitwarden.component.html",
standalone: true,
imports: [
CommonModule,
JslibModule,

View File

@@ -22,7 +22,6 @@ import { PopupHeaderComponent } from "../../../platform/popup/layout/popup-heade
import { FoldersV2Component } from "./folders-v2.component";
@Component({
standalone: true,
selector: "popup-header",
template: `<ng-content></ng-content>`,
})
@@ -32,7 +31,6 @@ class MockPopupHeaderComponent {
}
@Component({
standalone: true,
selector: "popup-footer",
template: `<ng-content></ng-content>`,
})

View File

@@ -22,7 +22,6 @@ import { PopupHeaderComponent } from "../../../platform/popup/layout/popup-heade
import { PopupPageComponent } from "../../../platform/popup/layout/popup-page.component";
@Component({
standalone: true,
templateUrl: "./folders-v2.component.html",
imports: [
CommonModule,

View File

@@ -19,7 +19,6 @@ import { PopupPageComponent } from "../../../platform/popup/layout/popup-page.co
@Component({
templateUrl: "more-from-bitwarden-page-v2.component.html",
standalone: true,
imports: [
CommonModule,
JslibModule,

View File

@@ -37,7 +37,6 @@ import { PopupCipherView } from "../../views/popup-cipher.view";
@Component({
selector: "app-trash-list-items-container",
templateUrl: "trash-list-items-container.component.html",
standalone: true,
imports: [
CommonModule,
ItemModule,

View File

@@ -14,7 +14,6 @@ import { TrashListItemsContainerComponent } from "./trash-list-items-container/t
@Component({
templateUrl: "trash.component.html",
standalone: true,
imports: [
CommonModule,
JslibModule,

View File

@@ -15,7 +15,6 @@ import { PopupPageComponent } from "../../../platform/popup/layout/popup-page.co
@Component({
templateUrl: "vault-settings-v2.component.html",
standalone: true,
imports: [
CommonModule,
JslibModule,

View File

@@ -1,55 +1,5 @@
{
"compilerOptions": {
"moduleResolution": "node",
"noImplicitAny": true,
"allowSyntheticDefaultImports": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"module": "ES2020",
"target": "ES2016",
"allowJs": true,
"sourceMap": true,
"baseUrl": ".",
"lib": ["ES2021.String"],
"paths": {
"@bitwarden/admin-console/common": ["../../libs/admin-console/src/common"],
"@bitwarden/angular/*": ["../../libs/angular/src/*"],
"@bitwarden/auth/common": ["../../libs/auth/src/common"],
"@bitwarden/auth/angular": ["../../libs/auth/src/angular"],
"@bitwarden/billing": ["../../libs/billing/src"],
"@bitwarden/common/*": ["../../libs/common/src/*"],
"@bitwarden/components": ["../../libs/components/src"],
"@bitwarden/dirt-card": ["../../libs/dirt/card/src"],
"@bitwarden/generator-components": ["../../libs/tools/generator/components/src"],
"@bitwarden/generator-core": ["../../libs/tools/generator/core/src"],
"@bitwarden/generator-history": ["../../libs/tools/generator/extensions/history/src"],
"@bitwarden/generator-legacy": ["../../libs/tools/generator/extensions/legacy/src"],
"@bitwarden/generator-navigation": ["../../libs/tools/generator/extensions/navigation/src"],
"@bitwarden/importer-core": ["../../libs/importer/src"],
"@bitwarden/importer-ui": ["../../libs/importer/src/components"],
"@bitwarden/key-management": ["../../libs/key-management/src"],
"@bitwarden/key-management-ui": ["../../libs/key-management-ui/src"],
"@bitwarden/platform": ["../../libs/platform/src"],
"@bitwarden/platform/*": ["../../libs/platform/src/*"],
"@bitwarden/send-ui": ["../../libs/tools/send/send-ui/src"],
"@bitwarden/ui-common": ["../../libs/ui/common/src"],
"@bitwarden/ui-common/setup-jest": ["../../libs/ui/common/src/setup-jest"],
"@bitwarden/vault-export-core": [
"../../libs/tools/export/vault-export/vault-export-core/src"
],
"@bitwarden/vault-export-ui": ["../../libs/tools/export/vault-export/vault-export-ui/src"],
"@bitwarden/vault": ["../../libs/vault/src"]
},
"plugins": [
{
"name": "typescript-strict-plugin"
}
],
"useDefineForClassFields": false
},
"angularCompilerOptions": {
"strictTemplates": true
},
"extends": "../../tsconfig.base",
"include": [
"src",
"../../libs/common/src/autofill/constants",

View File

@@ -1,6 +1,6 @@
const { pathsToModuleNameMapper } = require("ts-jest");
const { compilerOptions } = require("./tsconfig");
const { compilerOptions } = require("../../tsconfig.base");
const sharedConfig = require("../../libs/shared/jest.config.ts");
@@ -13,8 +13,14 @@ module.exports = {
moduleNameMapper: {
"@bitwarden/common/platform/services/sdk/default-sdk-client-factory":
"<rootDir>/../../libs/common/spec/jest-sdk-client-factory",
...pathsToModuleNameMapper(compilerOptions?.paths || {}, {
prefix: "<rootDir>/",
}),
...pathsToModuleNameMapper(
{
"@bitwarden/common/spec": ["libs/common/spec"],
...(compilerOptions?.paths || {}),
},
{
prefix: "<rootDir>/../../",
},
),
},
};

View File

@@ -34,6 +34,7 @@ import { CryptoFunctionService } from "@bitwarden/common/key-management/crypto/a
import { KeyConnectorService } from "@bitwarden/common/key-management/key-connector/abstractions/key-connector.service";
import { MasterPasswordServiceAbstraction } from "@bitwarden/common/key-management/master-password/abstractions/master-password.service.abstraction";
import { EnvironmentService } from "@bitwarden/common/platform/abstractions/environment.service";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service";
import { Utils } from "@bitwarden/common/platform/misc/utils";
import { EncString } from "@bitwarden/common/platform/models/domain/enc-string";
@@ -77,6 +78,7 @@ export class LoginCommand {
protected logoutCallback: () => Promise<void>,
protected kdfConfigService: KdfConfigService,
protected ssoUrlService: SsoUrlService,
protected i18nService: I18nService,
protected masterPasswordService: MasterPasswordServiceAbstraction,
) {}
@@ -227,9 +229,7 @@ export class LoginCommand {
);
}
if (response.requiresEncryptionKeyMigration) {
return Response.error(
"Encryption key migration required. Please login through the web vault to update your encryption key.",
);
return Response.error(this.i18nService.t("legacyEncryptionUnsupported"));
}
if (response.requiresTwoFactor) {
const twoFactorProviders = await this.twoFactorService.getSupportedProviders(null);

View File

@@ -185,6 +185,9 @@
}
}
},
"legacyEncryptionUnsupported": {
"message": "Legacy encryption is no longer supported. Please contact support to recover your account."
},
"organizationUsingKeyConnectorOptInLoggedOut": {
"message": "An organization you are a member of is using Key Connector. In order to access the vault, you must opt-in to Key Connector now via the web vault. You have been logged out."
},

View File

@@ -175,6 +175,7 @@ export class Program extends BaseProgram {
async () => await this.serviceContainer.logout(),
this.serviceContainer.kdfConfigService,
this.serviceContainer.ssoUrlService,
this.serviceContainer.i18nService,
this.serviceContainer.masterPasswordService,
);
const response = await command.run(email, password, options);

View File

@@ -1,38 +1,4 @@
{
"compilerOptions": {
"pretty": true,
"moduleResolution": "node",
"target": "ES2016",
"module": "ES2020",
"noImplicitAny": true,
"allowSyntheticDefaultImports": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"allowJs": true,
"sourceMap": true,
"baseUrl": ".",
"paths": {
"@bitwarden/common/spec": ["../../libs/common/spec"],
"@bitwarden/admin-console/common": ["../../libs/admin-console/src/common"],
"@bitwarden/auth/common": ["../../libs/auth/src/common"],
"@bitwarden/auth/angular": ["../../libs/auth/src/angular"],
"@bitwarden/common/*": ["../../libs/common/src/*"],
"@bitwarden/importer-core": ["../../libs/importer/src"],
"@bitwarden/generator-core": ["../../libs/tools/generator/core/src"],
"@bitwarden/generator-legacy": ["../../libs/tools/generator/extensions/legacy/src"],
"@bitwarden/generator-history": ["../../libs/tools/generator/extensions/history/src"],
"@bitwarden/generator-navigation": ["../../libs/tools/generator/extensions/navigation/src"],
"@bitwarden/vault-export-core": [
"../../libs/tools/export/vault-export/vault-export-core/src"
],
"@bitwarden/key-management": ["../../libs/key-management/src"],
"@bitwarden/node/*": ["../../libs/node/src/*"]
},
"plugins": [
{
"name": "typescript-strict-plugin"
}
]
},
"extends": "../../tsconfig.base",
"include": ["src", "src/**/*.spec.ts"]
}

View File

@@ -1,6 +1,6 @@
const { pathsToModuleNameMapper } = require("ts-jest");
const { compilerOptions } = require("./tsconfig");
const { compilerOptions } = require("../../tsconfig.base");
const sharedConfig = require("../../libs/shared/jest.config.angular");
@@ -9,9 +9,9 @@ module.exports = {
...sharedConfig,
setupFilesAfterEnv: ["<rootDir>/test.setup.ts"],
moduleNameMapper: pathsToModuleNameMapper(
{ "@bitwarden/common/spec": ["../../libs/common/spec"], ...(compilerOptions?.paths ?? {}) },
{ "@bitwarden/common/spec": ["libs/common/spec"], ...(compilerOptions?.paths ?? {}) },
{
prefix: "<rootDir>/",
prefix: "<rootDir>/../../",
},
),
};

View File

@@ -1,6 +1,6 @@
{
"extends": "../tsconfig",
"compilerOptions": {
"baseUrl": "./",
"outDir": "dist",
"target": "es6",
"module": "CommonJS",
@@ -10,12 +10,7 @@
"sourceMap": false,
"declaration": false,
"paths": {
"@src/*": ["src/*"],
"@bitwarden/admin-console/*": ["../../../libs/admin-console/src/*"],
"@bitwarden/auth/*": ["../../../libs/auth/src/*"],
"@bitwarden/common/*": ["../../../libs/common/src/*"],
"@bitwarden/key-management": ["../../../libs/key-management/src/"],
"@bitwarden/node/*": ["../../../libs/node/src/*"]
"@src/*": ["src/*"]
},
"plugins": [
{

View File

@@ -7,7 +7,6 @@ import { ExportComponent } from "@bitwarden/vault-export-ui";
@Component({
templateUrl: "export-desktop.component.html",
standalone: true,
imports: [
CommonModule,
JslibModule,

View File

@@ -14,7 +14,6 @@ import {
} from "@bitwarden/generator-components";
@Component({
standalone: true,
selector: "credential-generator",
templateUrl: "credential-generator.component.html",
imports: [DialogModule, ButtonModule, JslibModule, GeneratorModule, ItemModule, LinkModule],

View File

@@ -7,7 +7,6 @@ import { ImportComponent } from "@bitwarden/importer-ui";
@Component({
templateUrl: "import-desktop.component.html",
standalone: true,
imports: [
CommonModule,
JslibModule,

View File

@@ -22,7 +22,6 @@ import { CalloutModule, DialogService, ToastService } from "@bitwarden/component
@Component({
selector: "app-send-add-edit",
templateUrl: "add-edit.component.html",
standalone: true,
imports: [CommonModule, JslibModule, ReactiveFormsModule, CalloutModule],
})
export class AddEditComponent extends BaseAddEditComponent {

View File

@@ -38,7 +38,6 @@ const BroadcasterSubscriptionId = "SendComponent";
@Component({
selector: "app-send",
templateUrl: "send.component.html",
standalone: true,
imports: [CommonModule, JslibModule, FormsModule, NavComponent, AddEditComponent],
})
export class SendComponent extends BaseSendComponent implements OnInit, OnDestroy {

View File

@@ -1,5 +1,4 @@
import { Injectable, OnDestroy } from "@angular/core";
import { autofill } from "desktop_native/napi";
import {
Subject,
distinctUntilChanged,
@@ -33,6 +32,7 @@ import { UserId } from "@bitwarden/common/types/guid";
import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service";
import { CipherType } from "@bitwarden/common/vault/enums";
import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view";
import { autofill } from "@bitwarden/desktop-napi";
import { NativeAutofillStatusCommand } from "../../platform/main/autofill/status.command";
import {

View File

@@ -691,8 +691,8 @@
"maxFileSize": {
"message": "Maximum file size is 500 MB."
},
"encryptionKeyMigrationRequired": {
"message": "Encryption key migration required. Please login through the web vault to update your encryption key."
"legacyEncryptionUnsupported": {
"message": "Legacy encryption is no longer supported. Please contact support to recover your account."
},
"editedFolder": {
"message": "Folder saved"

View File

@@ -39,7 +39,6 @@ export enum CredentialGeneratorDialogAction {
}
@Component({
standalone: true,
selector: "credential-generator-dialog",
templateUrl: "credential-generator-dialog.component.html",
imports: [

View File

@@ -18,7 +18,6 @@ import { PasswordRepromptService } from "@bitwarden/vault";
@Component({
selector: "app-vault-item-footer",
templateUrl: "item-footer.component.html",
standalone: true,
imports: [ButtonModule, CommonModule, JslibModule],
})
export class ItemFooterComponent implements OnInit {

View File

@@ -17,7 +17,6 @@ import { SearchBarService } from "../../../app/layout/search/search-bar.service"
@Component({
selector: "app-vault-items-v2",
templateUrl: "vault-items-v2.component.html",
standalone: true,
imports: [MenuModule, CommonModule, JslibModule, ScrollingModule],
})
export class VaultItemsV2Component extends BaseVaultItemsComponent {

View File

@@ -79,7 +79,6 @@ const BroadcasterSubscriptionId = "VaultComponent";
@Component({
selector: "app-vault",
templateUrl: "vault-v2.component.html",
standalone: true,
imports: [
BadgeModule,
CommonModule,

View File

@@ -1,50 +1,5 @@
{
"compilerOptions": {
"moduleResolution": "node",
"noImplicitAny": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"module": "ES2020",
"target": "ES2016",
"sourceMap": true,
"types": [],
"baseUrl": ".",
"paths": {
"@bitwarden/admin-console/common": ["../../libs/admin-console/src/common"],
"@bitwarden/angular/*": ["../../libs/angular/src/*"],
"@bitwarden/auth/common": ["../../libs/auth/src/common"],
"@bitwarden/auth/angular": ["../../libs/auth/src/angular"],
"@bitwarden/billing": ["../../libs/billing/src"],
"@bitwarden/common/*": ["../../libs/common/src/*"],
"@bitwarden/components": ["../../libs/components/src"],
"@bitwarden/dirt-card": ["../../libs/dirt/card/src"],
"@bitwarden/generator-components": ["../../libs/tools/generator/components/src"],
"@bitwarden/generator-core": ["../../libs/tools/generator/core/src"],
"@bitwarden/generator-history": ["../../libs/tools/generator/extensions/history/src"],
"@bitwarden/generator-legacy": ["../../libs/tools/generator/extensions/legacy/src"],
"@bitwarden/generator-navigation": ["../../libs/tools/generator/extensions/navigation/src"],
"@bitwarden/importer-core": ["../../libs/importer/src"],
"@bitwarden/importer-ui": ["../../libs/importer/src/components"],
"@bitwarden/key-management": ["../../libs/key-management/src"],
"@bitwarden/key-management-ui": ["../../libs/key-management-ui/src"],
"@bitwarden/node/*": ["../../libs/node/src/*"],
"@bitwarden/platform": ["../../libs/platform/src"],
"@bitwarden/send-ui": ["../../libs/tools/send/send-ui/src"],
"@bitwarden/ui-common": ["../../libs/ui/common/src"],
"@bitwarden/ui-common/setup-jest": ["../../libs/ui/common/src/setup-jest"],
"@bitwarden/vault-export-core": [
"../../libs/tools/export/vault-export/vault-export-core/src"
],
"@bitwarden/vault-export-ui": ["../../libs/tools/export/vault-export/vault-export-ui/src"],
"@bitwarden/vault": ["../../libs/vault/src"]
},
"plugins": [
{
"name": "typescript-strict-plugin"
}
],
"useDefineForClassFields": false
},
"extends": "../../tsconfig.base",
"angularCompilerOptions": {
"strictTemplates": true
},

View File

@@ -1,6 +1,6 @@
const { pathsToModuleNameMapper } = require("ts-jest");
const { compilerOptions } = require("./tsconfig");
const { compilerOptions } = require("../../tsconfig.base");
const sharedConfig = require("../../libs/shared/jest.config.angular");
@@ -15,11 +15,11 @@ module.exports = {
...pathsToModuleNameMapper(
{
// lets us use @bitwarden/common/spec in web tests
"@bitwarden/common/spec": ["../../libs/common/spec"],
"@bitwarden/common/spec": ["libs/common/spec"],
...(compilerOptions?.paths ?? {}),
},
{
prefix: "<rootDir>/",
prefix: "<rootDir>/../../",
},
),
},

View File

@@ -54,7 +54,6 @@ export enum BulkCollectionsDialogResult {
imports: [SharedModule, AccessSelectorModule],
selector: "app-bulk-collections-dialog",
templateUrl: "bulk-collections-dialog.component.html",
standalone: true,
})
export class BulkCollectionsDialogComponent implements OnDestroy {
protected readonly PermissionMode = PermissionMode;

View File

@@ -12,7 +12,6 @@ const icon = svgIcon`<svg xmlns="http://www.w3.org/2000/svg" width="120" height=
@Component({
selector: "collection-access-restricted",
standalone: true,
imports: [SharedModule, ButtonModule, NoItemsModule],
template: `<bit-no-items [icon]="icon" class="tw-mt-2 tw-block">
<span slot="title" class="tw-mt-4 tw-block">{{ "youDoNotHavePermissions" | i18n }}</span>

View File

@@ -10,7 +10,6 @@ import { GetCollectionNameFromIdPipe } from "../pipes";
@Component({
selector: "app-collection-badge",
templateUrl: "collection-name-badge.component.html",
standalone: true,
imports: [SharedModule, GetCollectionNameFromIdPipe],
})
export class CollectionNameBadgeComponent {

View File

@@ -5,7 +5,6 @@ import { CollectionView } from "@bitwarden/admin-console/common";
@Pipe({
name: "collectionNameFromId",
pure: true,
standalone: true,
})
export class GetCollectionNameFromIdPipe implements PipeTransform {
transform(value: string, collections: CollectionView[]) {

View File

@@ -35,7 +35,6 @@ import {
import { CollectionDialogTabType } from "../../shared/components/collection-dialog";
@Component({
standalone: true,
selector: "app-org-vault-header",
templateUrl: "./vault-header.component.html",
imports: [

View File

@@ -144,7 +144,6 @@ enum AddAccessStatusType {
}
@Component({
standalone: true,
selector: "app-org-vault",
templateUrl: "vault.component.html",
imports: [

View File

@@ -22,7 +22,6 @@ import { Integration } from "../shared/components/integrations/models";
@Component({
selector: "ac-integrations",
templateUrl: "./integrations.component.html",
standalone: true,
imports: [
SharedModule,
SharedOrganizationModule,

View File

@@ -37,7 +37,6 @@ import { AdminConsoleLogo } from "../../icons/admin-console-logo";
@Component({
selector: "app-organization-layout",
templateUrl: "organization-layout.component.html",
standalone: true,
imports: [
CommonModule,
RouterModule,

View File

@@ -38,7 +38,6 @@ export interface EntityEventsDialogParams {
@Component({
imports: [SharedModule],
templateUrl: "entity-events.component.html",
standalone: true,
})
export class EntityEventsComponent implements OnInit, OnDestroy {
loading = true;

View File

@@ -14,7 +14,6 @@ import { SharedModule } from "../../../shared/shared.module";
@Component({
templateUrl: "verify-recover-delete-org.component.html",
standalone: true,
imports: [SharedModule],
})
export class VerifyRecoverDeleteOrgComponent implements OnInit {

View File

@@ -80,7 +80,6 @@ export enum DeleteOrganizationDialogResult {
@Component({
selector: "app-delete-organization",
standalone: true,
imports: [SharedModule, UserVerificationModule],
templateUrl: "delete-organization-dialog.component.html",
})

View File

@@ -117,7 +117,6 @@ export enum CollectionDialogAction {
@Component({
templateUrl: "collection-dialog.component.html",
standalone: true,
imports: [SharedModule, AccessSelectorModule, SelectModule],
})
export class CollectionDialogComponent implements OnInit, OnDestroy {

View File

@@ -20,7 +20,6 @@ import { SharedModule } from "../../../../../../shared/shared.module";
@Component({
selector: "app-integration-card",
templateUrl: "./integration-card.component.html",
standalone: true,
imports: [SharedModule],
})
export class IntegrationCardComponent implements AfterViewInit, OnDestroy {

View File

@@ -11,7 +11,6 @@ import { Integration } from "../models";
@Component({
selector: "app-integration-grid",
templateUrl: "./integration-grid.component.html",
standalone: true,
imports: [IntegrationCardComponent, SharedModule],
})
export class IntegrationGridComponent {

View File

@@ -6,7 +6,6 @@ import { Integration } from "../../../shared/components/integrations/models";
@Pipe({
name: "filterIntegrations",
standalone: true,
})
export class FilterIntegrationsPipe implements PipeTransform {
transform(integrations: Integration[], type: IntegrationType): Integration[] {

View File

@@ -30,7 +30,6 @@ import {
@Component({
templateUrl: "families-for-enterprise-setup.component.html",
standalone: true,
imports: [SharedModule, OrganizationPlansComponent],
})
export class FamiliesForEnterpriseSetupComponent implements OnInit, OnDestroy {

View File

@@ -13,7 +13,6 @@ import { SharedModule } from "../../shared";
@Component({
templateUrl: "create-organization.component.html",
standalone: true,
imports: [SharedModule, OrganizationPlansComponent, HeaderModule],
})
export class CreateOrganizationComponent {

View File

@@ -1,2 +1 @@
export * from "./web-two-factor-auth-component.service";
export * from "./web-two-factor-auth-duo-component.service";

View File

@@ -1,14 +0,0 @@
import {
DefaultTwoFactorAuthComponentService,
TwoFactorAuthComponentService,
LegacyKeyMigrationAction,
} from "@bitwarden/auth/angular";
export class WebTwoFactorAuthComponentService
extends DefaultTwoFactorAuthComponentService
implements TwoFactorAuthComponentService
{
override determineLegacyKeyMigrationAction(): LegacyKeyMigrationAction {
return LegacyKeyMigrationAction.NAVIGATE_TO_MIGRATION_COMPONENT;
}
}

View File

@@ -32,7 +32,6 @@ import {
SetPasswordJitService,
SsoComponentService,
LoginDecryptionOptionsService,
TwoFactorAuthComponentService,
TwoFactorAuthDuoComponentService,
ChangePasswordService,
} from "@bitwarden/auth/angular";
@@ -117,7 +116,6 @@ import {
WebRegistrationFinishService,
WebLoginComponentService,
WebLoginDecryptionOptionsService,
WebTwoFactorAuthComponentService,
WebTwoFactorAuthDuoComponentService,
LinkSsoService,
} from "../auth";
@@ -270,12 +268,6 @@ const safeProviders: SafeProvider[] = [
useClass: WebLockComponentService,
deps: [],
}),
// TODO: PM-18182 - Refactor component services into lazy loaded modules
safeProvider({
provide: TwoFactorAuthComponentService,
useClass: WebTwoFactorAuthComponentService,
deps: [],
}),
safeProvider({
provide: SetPasswordJitService,
useClass: WebSetPasswordJitService,

View File

@@ -1,36 +0,0 @@
<form [formGroup]="formGroup" [bitSubmit]="submit">
<div class="tw-mt-12 tw-flex tw-justify-center">
<div class="tw-max-w-xl">
<h1 bitTypography="h1" class="tw-mb-4 tw-text-center">{{ "updateEncryptionKey" | i18n }}</h1>
<div
class="tw-block tw-rounded tw-border tw-border-solid tw-border-secondary-300 tw-bg-background tw-p-8"
>
<p>
{{ "updateEncryptionSchemeDesc" | i18n }}
<a
href="https://bitwarden.com/help/account-encryption-key/#rotate-your-encryption-key"
target="_blank"
rel="noreferrer"
>{{ "learnMore" | i18n }}</a
>
</p>
<bit-callout type="warning">{{ "updateEncryptionKeyWarning" | i18n }}</bit-callout>
<bit-form-field>
<bit-label>{{ "masterPass" | i18n }}</bit-label>
<input
id="masterPassword"
bitInput
type="password"
formControlName="masterPassword"
appAutofocus
/>
<button type="button" bitIconButton bitSuffix bitPasswordInputToggle></button>
</bit-form-field>
<button type="submit" bitButton bitFormButton buttonType="primary" block>
{{ "updateEncryptionKey" | i18n }}
</button>
</div>
</div>
</div>
</form>

View File

@@ -1,100 +0,0 @@
import { Component } from "@angular/core";
import { FormControl, FormGroup, Validators } from "@angular/forms";
import { firstValueFrom } from "rxjs";
import { AccountService } from "@bitwarden/common/auth/abstractions/account.service";
import { ErrorResponse } from "@bitwarden/common/models/response/error.response";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
import { LogService } from "@bitwarden/common/platform/abstractions/log.service";
import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service";
import { FolderApiServiceAbstraction } from "@bitwarden/common/vault/abstractions/folder/folder-api.service.abstraction";
import { SyncService } from "@bitwarden/common/vault/abstractions/sync/sync.service.abstraction";
import { DialogService, ToastService } from "@bitwarden/components";
import { KeyService } from "@bitwarden/key-management";
import { SharedModule } from "../../shared";
import { UserKeyRotationModule } from "../key-rotation/user-key-rotation.module";
import { UserKeyRotationService } from "../key-rotation/user-key-rotation.service";
// The master key was originally used to encrypt user data, before the user key was introduced.
// This component is used to migrate from the old encryption scheme to the new one.
@Component({
imports: [SharedModule, UserKeyRotationModule],
templateUrl: "migrate-legacy-encryption.component.html",
})
export class MigrateFromLegacyEncryptionComponent {
protected formGroup = new FormGroup({
masterPassword: new FormControl("", [Validators.required]),
});
constructor(
private accountService: AccountService,
private keyRotationService: UserKeyRotationService,
private i18nService: I18nService,
private keyService: KeyService,
private messagingService: MessagingService,
private logService: LogService,
private syncService: SyncService,
private toastService: ToastService,
private dialogService: DialogService,
private folderApiService: FolderApiServiceAbstraction,
) {}
submit = async () => {
this.formGroup.markAsTouched();
if (this.formGroup.invalid) {
return;
}
const activeUser = await firstValueFrom(this.accountService.activeAccount$);
if (activeUser == null) {
throw new Error("No active user.");
}
const hasUserKey = await this.keyService.hasUserKey(activeUser.id);
if (hasUserKey) {
this.messagingService.send("logout");
throw new Error("User key already exists, cannot migrate legacy encryption.");
}
const masterPassword = this.formGroup.value.masterPassword!;
try {
await this.syncService.fullSync(false, true);
await this.keyRotationService.rotateUserKeyAndEncryptedDataLegacy(masterPassword, activeUser);
this.toastService.showToast({
variant: "success",
title: this.i18nService.t("keyUpdated"),
message: this.i18nService.t("logBackInOthersToo"),
timeout: 15000,
});
this.messagingService.send("logout");
} catch (e) {
// If the error is due to missing folders, we can delete all folders and try again
if (
e instanceof ErrorResponse &&
e.message === "All existing folders must be included in the rotation."
) {
const deleteFolders = await this.dialogService.openSimpleDialog({
type: "warning",
title: { key: "encryptionKeyUpdateCannotProceed" },
content: { key: "keyUpdateFoldersFailed" },
acceptButtonText: { key: "ok" },
cancelButtonText: { key: "cancel" },
});
if (deleteFolders) {
await this.folderApiService.deleteAll(activeUser.id);
await this.syncService.fullSync(true, true);
await this.submit();
return;
}
}
this.logService.error(e);
throw e;
}
};
}

View File

@@ -3,7 +3,6 @@ import { RouterModule } from "@angular/router";
import { applicationConfig, Meta, moduleMetadata, StoryObj } from "@storybook/angular";
import { BehaviorSubject, firstValueFrom, Observable, of } from "rxjs";
import { I18nPipe } from "@bitwarden/angular/platform/pipes/i18n.pipe";
import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction";
import { PolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction";
import { ProviderService } from "@bitwarden/common/admin-console/abstractions/provider.service";
@@ -18,6 +17,7 @@ import { LayoutComponent, NavigationModule } from "@bitwarden/components";
// FIXME: remove `src` and fix import
// eslint-disable-next-line no-restricted-imports
import { I18nMockService } from "@bitwarden/components/src/utils/i18n-mock.service";
import { I18nPipe } from "@bitwarden/ui-common";
import { ProductSwitcherService } from "../shared/product-switcher.service";
@@ -109,9 +109,8 @@ export default {
MockProviderService,
StoryLayoutComponent,
StoryContentComponent,
I18nPipe,
],
imports: [NavigationModule, RouterModule, LayoutComponent],
imports: [NavigationModule, RouterModule, LayoutComponent, I18nPipe],
providers: [
{ provide: OrganizationService, useClass: MockOrganizationService },
{ provide: AccountService, useClass: MockAccountService },
@@ -119,12 +118,6 @@ export default {
{ provide: SyncService, useClass: MockSyncService },
{ provide: PlatformUtilsService, useClass: MockPlatformUtilsService },
ProductSwitcherService,
{
provide: I18nPipe,
useFactory: () => ({
transform: (key: string) => translations[key],
}),
},
{
provide: I18nService,
useFactory: () => {

View File

@@ -2,8 +2,8 @@ import { A11yModule } from "@angular/cdk/a11y";
import { NgModule } from "@angular/core";
import { RouterModule } from "@angular/router";
import { I18nPipe } from "@bitwarden/angular/platform/pipes/i18n.pipe";
import { NavigationModule } from "@bitwarden/components";
import { I18nPipe } from "@bitwarden/ui-common";
import { SharedModule } from "../../shared";
@@ -12,13 +12,12 @@ import { ProductSwitcherContentComponent } from "./product-switcher-content.comp
import { ProductSwitcherComponent } from "./product-switcher.component";
@NgModule({
imports: [SharedModule, A11yModule, RouterModule, NavigationModule],
imports: [SharedModule, A11yModule, RouterModule, NavigationModule, I18nPipe],
declarations: [
ProductSwitcherComponent,
ProductSwitcherContentComponent,
NavigationProductSwitcherComponent,
],
exports: [ProductSwitcherComponent, NavigationProductSwitcherComponent],
providers: [I18nPipe],
})
export class ProductSwitcherModule {}

View File

@@ -5,13 +5,13 @@ import { ActivatedRoute, Router, convertToParamMap } from "@angular/router";
import { mock, MockProxy } from "jest-mock-extended";
import { Observable, firstValueFrom, of } from "rxjs";
import { I18nPipe } from "@bitwarden/angular/platform/pipes/i18n.pipe";
import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction";
import { PolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction";
import { ProviderService } from "@bitwarden/common/admin-console/abstractions/provider.service";
import { Organization } from "@bitwarden/common/admin-console/models/domain/organization";
import { Provider } from "@bitwarden/common/admin-console/models/domain/provider";
import { AccountService } from "@bitwarden/common/auth/abstractions/account.service";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service";
import { Utils } from "@bitwarden/common/platform/misc/utils";
import { SyncService } from "@bitwarden/common/platform/sync";
@@ -70,9 +70,9 @@ describe("ProductSwitcherService", () => {
},
},
{
provide: I18nPipe,
provide: I18nService,
useValue: {
transform: (key: string) => key,
t: (id: string, p1?: string | number, p2?: string | number, p3?: string | number) => id,
},
},
{

View File

@@ -14,7 +14,6 @@ import {
switchMap,
} from "rxjs";
import { I18nPipe } from "@bitwarden/angular/platform/pipes/i18n.pipe";
import {
canAccessOrgAdmin,
OrganizationService,
@@ -25,6 +24,7 @@ import { PolicyType, ProviderType } from "@bitwarden/common/admin-console/enums"
import { Organization } from "@bitwarden/common/admin-console/models/domain/organization";
import { AccountService } from "@bitwarden/common/auth/abstractions/account.service";
import { getUserId } from "@bitwarden/common/auth/services/account.service";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service";
import { SyncService } from "@bitwarden/common/platform/sync";
@@ -103,11 +103,11 @@ export class ProductSwitcherService {
private providerService: ProviderService,
private route: ActivatedRoute,
private router: Router,
private i18n: I18nPipe,
private syncService: SyncService,
private accountService: AccountService,
private platformUtilsService: PlatformUtilsService,
private policyService: PolicyService,
private i18nService: I18nService,
) {
this.pollUntilSynced();
}
@@ -197,7 +197,7 @@ export class ProductSwitcherService {
},
isActive: this.router.url.includes("/sm/"),
otherProductOverrides: {
supportingText: this.i18n.transform("secureYourInfrastructure"),
supportingText: this.i18nService.t("secureYourInfrastructure"),
},
},
ac: {
@@ -222,7 +222,7 @@ export class ProductSwitcherService {
marketingRoute: orgsMarketingRoute,
otherProductOverrides: {
name: "Share your passwords",
supportingText: this.i18n.transform("protectYourFamilyOrBusiness"),
supportingText: this.i18nService.t("protectYourFamilyOrBusiness"),
},
},
} satisfies Record<string, ProductSwitcherItem>;

View File

@@ -170,13 +170,6 @@ const routes: Routes = [
],
data: { titleId: "updatePassword" } satisfies RouteDataProperties,
},
{
path: "migrate-legacy-encryption",
loadComponent: () =>
import("./key-management/migrate-encryption/migrate-legacy-encryption.component").then(
(mod) => mod.MigrateFromLegacyEncryptionComponent,
),
},
],
},
{

View File

@@ -10,7 +10,6 @@ import { HeaderModule } from "../../layouts/header/header.module";
import { SharedModule } from "../../shared";
@Component({
standalone: true,
selector: "credential-generator",
templateUrl: "credential-generator.component.html",
imports: [SharedModule, HeaderModule, GeneratorModule, ButtonModule, LinkModule],

View File

@@ -8,7 +8,6 @@ import { SharedModule } from "../../shared";
@Component({
templateUrl: "import-web.component.html",
standalone: true,
imports: [SharedModule, ImportComponent, HeaderModule],
})
export class ImportWebComponent {

View File

@@ -20,7 +20,6 @@ import { ImportCollectionAdminService } from "./import-collection-admin.service"
@Component({
templateUrl: "org-import.component.html",
standalone: true,
imports: [SharedModule, ImportComponent, LooseComponentsModule],
providers: [
{

Some files were not shown because too many files have changed in this diff Show More