mirror of
https://github.com/bitwarden/browser
synced 2025-12-16 08:13:42 +00:00
add addCipherV2 method in the admin console vault
This commit is contained in:
@@ -41,16 +41,17 @@ import { EventCollectionService } from "@bitwarden/common/abstractions/event/eve
|
|||||||
import { SearchService } from "@bitwarden/common/abstractions/search.service";
|
import { SearchService } from "@bitwarden/common/abstractions/search.service";
|
||||||
import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.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 { Organization } from "@bitwarden/common/admin-console/models/domain/organization";
|
||||||
import { AccountService } from "@bitwarden/common/auth/abstractions/account.service";
|
|
||||||
import { EventType } from "@bitwarden/common/enums";
|
import { EventType } from "@bitwarden/common/enums";
|
||||||
|
import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum";
|
||||||
import { BroadcasterService } from "@bitwarden/common/platform/abstractions/broadcaster.service";
|
import { BroadcasterService } from "@bitwarden/common/platform/abstractions/broadcaster.service";
|
||||||
|
import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service";
|
||||||
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
|
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
|
||||||
import { LogService } from "@bitwarden/common/platform/abstractions/log.service";
|
import { LogService } from "@bitwarden/common/platform/abstractions/log.service";
|
||||||
import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service";
|
import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service";
|
||||||
import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service";
|
import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service";
|
||||||
import { Utils } from "@bitwarden/common/platform/misc/utils";
|
import { Utils } from "@bitwarden/common/platform/misc/utils";
|
||||||
import { SyncService } from "@bitwarden/common/platform/sync";
|
import { SyncService } from "@bitwarden/common/platform/sync";
|
||||||
import { OrganizationId } from "@bitwarden/common/types/guid";
|
import { CollectionId, OrganizationId } from "@bitwarden/common/types/guid";
|
||||||
import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service";
|
import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service";
|
||||||
import { CollectionService } from "@bitwarden/common/vault/abstractions/collection.service";
|
import { CollectionService } from "@bitwarden/common/vault/abstractions/collection.service";
|
||||||
import { TotpService } from "@bitwarden/common/vault/abstractions/totp.service";
|
import { TotpService } from "@bitwarden/common/vault/abstractions/totp.service";
|
||||||
@@ -61,7 +62,11 @@ import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view";
|
|||||||
import { CollectionView } from "@bitwarden/common/vault/models/view/collection.view";
|
import { CollectionView } from "@bitwarden/common/vault/models/view/collection.view";
|
||||||
import { ServiceUtils } from "@bitwarden/common/vault/service-utils";
|
import { ServiceUtils } from "@bitwarden/common/vault/service-utils";
|
||||||
import { DialogService, Icons, NoItemsModule, ToastService } from "@bitwarden/components";
|
import { DialogService, Icons, NoItemsModule, ToastService } from "@bitwarden/components";
|
||||||
import { CollectionAssignmentResult, PasswordRepromptService } from "@bitwarden/vault";
|
import {
|
||||||
|
CipherFormConfigService,
|
||||||
|
CollectionAssignmentResult,
|
||||||
|
PasswordRepromptService,
|
||||||
|
} from "@bitwarden/vault";
|
||||||
|
|
||||||
import { GroupService, GroupView } from "../../admin-console/organizations/core";
|
import { GroupService, GroupView } from "../../admin-console/organizations/core";
|
||||||
import { openEntityEventsDialog } from "../../admin-console/organizations/manage/entity-events.component";
|
import { openEntityEventsDialog } from "../../admin-console/organizations/manage/entity-events.component";
|
||||||
@@ -78,6 +83,11 @@ import { VaultItemEvent } from "../components/vault-items/vault-item-event";
|
|||||||
import { VaultItemsModule } from "../components/vault-items/vault-items.module";
|
import { VaultItemsModule } from "../components/vault-items/vault-items.module";
|
||||||
import { CollectionAdminService } from "../core/collection-admin.service";
|
import { CollectionAdminService } from "../core/collection-admin.service";
|
||||||
import { CollectionAdminView } from "../core/views/collection-admin.view";
|
import { CollectionAdminView } from "../core/views/collection-admin.view";
|
||||||
|
import {
|
||||||
|
AddEditCipherDialogCloseResult,
|
||||||
|
AddEditCipherDialogResult,
|
||||||
|
openAddEditCipherDialog,
|
||||||
|
} from "../individual-vault/add-edit-v2.component";
|
||||||
import {
|
import {
|
||||||
BulkDeleteDialogResult,
|
BulkDeleteDialogResult,
|
||||||
openBulkDeleteDialog,
|
openBulkDeleteDialog,
|
||||||
@@ -108,8 +118,8 @@ import {
|
|||||||
} from "./bulk-collections-dialog";
|
} from "./bulk-collections-dialog";
|
||||||
import { CollectionAccessRestrictedComponent } from "./collection-access-restricted.component";
|
import { CollectionAccessRestrictedComponent } from "./collection-access-restricted.component";
|
||||||
import { openOrgVaultCollectionsDialog } from "./collections.component";
|
import { openOrgVaultCollectionsDialog } from "./collections.component";
|
||||||
|
import { AdminConsoleCipherFormConfigService } from "./services/admin-console-cipher-form-config.service";
|
||||||
import { VaultFilterModule } from "./vault-filter/vault-filter.module";
|
import { VaultFilterModule } from "./vault-filter/vault-filter.module";
|
||||||
|
|
||||||
const BroadcasterSubscriptionId = "OrgVaultComponent";
|
const BroadcasterSubscriptionId = "OrgVaultComponent";
|
||||||
const SearchTextDebounceInterval = 200;
|
const SearchTextDebounceInterval = 200;
|
||||||
|
|
||||||
@@ -131,7 +141,11 @@ enum AddAccessStatusType {
|
|||||||
NoItemsModule,
|
NoItemsModule,
|
||||||
ViewComponent,
|
ViewComponent,
|
||||||
],
|
],
|
||||||
providers: [RoutedVaultFilterService, RoutedVaultFilterBridgeService],
|
providers: [
|
||||||
|
RoutedVaultFilterService,
|
||||||
|
RoutedVaultFilterBridgeService,
|
||||||
|
{ provide: CipherFormConfigService, useClass: AdminConsoleCipherFormConfigService },
|
||||||
|
],
|
||||||
})
|
})
|
||||||
export class VaultComponent implements OnInit, OnDestroy {
|
export class VaultComponent implements OnInit, OnDestroy {
|
||||||
protected Unassigned = Unassigned;
|
protected Unassigned = Unassigned;
|
||||||
@@ -178,6 +192,7 @@ export class VaultComponent implements OnInit, OnDestroy {
|
|||||||
private refresh$ = new BehaviorSubject<void>(null);
|
private refresh$ = new BehaviorSubject<void>(null);
|
||||||
private destroy$ = new Subject<void>();
|
private destroy$ = new Subject<void>();
|
||||||
protected addAccessStatus$ = new BehaviorSubject<AddAccessStatusType>(0);
|
protected addAccessStatus$ = new BehaviorSubject<AddAccessStatusType>(0);
|
||||||
|
private extensionRefreshEnabled: boolean;
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
private route: ActivatedRoute,
|
private route: ActivatedRoute,
|
||||||
@@ -208,10 +223,15 @@ export class VaultComponent implements OnInit, OnDestroy {
|
|||||||
private collectionService: CollectionService,
|
private collectionService: CollectionService,
|
||||||
private organizationUserApiService: OrganizationUserApiService,
|
private organizationUserApiService: OrganizationUserApiService,
|
||||||
private toastService: ToastService,
|
private toastService: ToastService,
|
||||||
private accountService: AccountService,
|
private configService: ConfigService,
|
||||||
|
private cipherFormConfigService: CipherFormConfigService,
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
async ngOnInit() {
|
async ngOnInit() {
|
||||||
|
this.extensionRefreshEnabled = await this.configService.getFeatureFlag(
|
||||||
|
FeatureFlag.ExtensionRefresh,
|
||||||
|
);
|
||||||
|
|
||||||
this.trashCleanupWarning = this.i18nService.t(
|
this.trashCleanupWarning = this.i18nService.t(
|
||||||
this.platformUtilsService.isSelfHost()
|
this.platformUtilsService.isSelfHost()
|
||||||
? "trashCleanupWarningSelfHosted"
|
? "trashCleanupWarningSelfHosted"
|
||||||
@@ -764,6 +784,10 @@ export class VaultComponent implements OnInit, OnDestroy {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async addCipher(cipherType?: CipherType) {
|
async addCipher(cipherType?: CipherType) {
|
||||||
|
if (this.extensionRefreshEnabled) {
|
||||||
|
return this.addCipherV2(cipherType);
|
||||||
|
}
|
||||||
|
|
||||||
let collections: CollectionView[] = [];
|
let collections: CollectionView[] = [];
|
||||||
|
|
||||||
// Admins limited to only adding items to collections they have access to.
|
// Admins limited to only adding items to collections they have access to.
|
||||||
@@ -778,6 +802,38 @@ export class VaultComponent implements OnInit, OnDestroy {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Opens the Add/Edit Dialog. Only to be used when the BrowserExtension feature flag is active */
|
||||||
|
async addCipherV2(cipherType?: CipherType) {
|
||||||
|
const cipherFormConfig = await this.cipherFormConfigService.buildConfig(
|
||||||
|
"add",
|
||||||
|
null,
|
||||||
|
cipherType,
|
||||||
|
);
|
||||||
|
|
||||||
|
cipherFormConfig.initialValues = {
|
||||||
|
organizationId: this.organization.id as OrganizationId,
|
||||||
|
collectionIds: this.collections.map((c) => c.id as CollectionId),
|
||||||
|
};
|
||||||
|
|
||||||
|
// Open the dialog.
|
||||||
|
const dialogRef = openAddEditCipherDialog(this.dialogService, {
|
||||||
|
data: cipherFormConfig,
|
||||||
|
});
|
||||||
|
|
||||||
|
// Wait for the dialog to close.
|
||||||
|
const result: AddEditCipherDialogCloseResult = await lastValueFrom(dialogRef.closed);
|
||||||
|
|
||||||
|
// Refresh the vault to show the new cipher.
|
||||||
|
if (result?.action === AddEditCipherDialogResult.Added) {
|
||||||
|
this.refresh();
|
||||||
|
this.go({ itemId: result.id, action: "view" });
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If the dialog was closed by any other action navigate back to the vault.
|
||||||
|
this.go({ cipherId: null, itemId: null, action: null });
|
||||||
|
}
|
||||||
|
|
||||||
async editCipher(
|
async editCipher(
|
||||||
cipher: CipherView,
|
cipher: CipherView,
|
||||||
additionalComponentParameters?: (comp: AddEditComponent) => void,
|
additionalComponentParameters?: (comp: AddEditComponent) => void,
|
||||||
|
|||||||
Reference in New Issue
Block a user