diff --git a/libs/admin-console/src/common/collections/models/collection.data.ts b/libs/admin-console/src/common/collections/models/collection.data.ts index 4a2b78543a5..b28a066509c 100644 --- a/libs/admin-console/src/common/collections/models/collection.data.ts +++ b/libs/admin-console/src/common/collections/models/collection.data.ts @@ -2,6 +2,7 @@ import { Jsonify } from "type-fest"; import { CollectionId, OrganizationId } from "@bitwarden/common/types/guid"; +import { CollectionType } from "./collection"; import { CollectionDetailsResponse } from "./collection.response"; export class CollectionData { @@ -12,6 +13,7 @@ export class CollectionData { readOnly: boolean; manage: boolean; hidePasswords: boolean; + type: CollectionType; constructor(response: CollectionDetailsResponse) { this.id = response.id; @@ -21,6 +23,7 @@ export class CollectionData { this.readOnly = response.readOnly; this.manage = response.manage; this.hidePasswords = response.hidePasswords; + this.type = response.type; } static fromJSON(obj: Jsonify) { diff --git a/libs/admin-console/src/common/collections/models/collection.response.ts b/libs/admin-console/src/common/collections/models/collection.response.ts index e2b8bfd08f6..c9b8ccf0456 100644 --- a/libs/admin-console/src/common/collections/models/collection.response.ts +++ b/libs/admin-console/src/common/collections/models/collection.response.ts @@ -2,11 +2,14 @@ import { SelectionReadOnlyResponse } from "@bitwarden/common/admin-console/model import { BaseResponse } from "@bitwarden/common/models/response/base.response"; import { CollectionId, OrganizationId } from "@bitwarden/common/types/guid"; +import { CollectionType } from "./collection"; + export class CollectionResponse extends BaseResponse { id: CollectionId; organizationId: OrganizationId; name: string; externalId: string; + type: CollectionType; constructor(response: any) { super(response); @@ -14,6 +17,7 @@ export class CollectionResponse extends BaseResponse { this.organizationId = this.getResponseProperty("OrganizationId"); this.name = this.getResponseProperty("Name"); this.externalId = this.getResponseProperty("ExternalId"); + this.type = this.getResponseProperty("Type"); } } diff --git a/libs/admin-console/src/common/collections/models/collection.spec.ts b/libs/admin-console/src/common/collections/models/collection.spec.ts index a21ce573512..925490d22b9 100644 --- a/libs/admin-console/src/common/collections/models/collection.spec.ts +++ b/libs/admin-console/src/common/collections/models/collection.spec.ts @@ -2,7 +2,7 @@ import { makeSymmetricCryptoKey, mockEnc } from "@bitwarden/common/spec"; import { CollectionId, OrganizationId } from "@bitwarden/common/types/guid"; import { OrgKey } from "@bitwarden/common/types/key"; -import { Collection } from "./collection"; +import { Collection, CollectionTypes } from "./collection"; import { CollectionData } from "./collection.data"; describe("Collection", () => { @@ -17,6 +17,7 @@ describe("Collection", () => { readOnly: true, manage: true, hidePasswords: true, + type: CollectionTypes.DefaultUserCollection, }; }); @@ -32,6 +33,7 @@ describe("Collection", () => { organizationId: null, readOnly: null, manage: null, + type: null, }); }); @@ -46,6 +48,7 @@ describe("Collection", () => { readOnly: true, manage: true, hidePasswords: true, + type: CollectionTypes.DefaultUserCollection, }); }); @@ -58,6 +61,7 @@ describe("Collection", () => { collection.readOnly = false; collection.hidePasswords = false; collection.manage = true; + collection.type = CollectionTypes.DefaultUserCollection; const key = makeSymmetricCryptoKey(); @@ -72,6 +76,7 @@ describe("Collection", () => { readOnly: false, manage: true, assigned: true, + type: CollectionTypes.DefaultUserCollection, }); }); }); diff --git a/libs/admin-console/src/common/collections/models/collection.ts b/libs/admin-console/src/common/collections/models/collection.ts index 5b6f1a6fb7a..4d87130c162 100644 --- a/libs/admin-console/src/common/collections/models/collection.ts +++ b/libs/admin-console/src/common/collections/models/collection.ts @@ -7,6 +7,13 @@ import { OrgKey } from "@bitwarden/common/types/key"; import { CollectionData } from "./collection.data"; import { CollectionView } from "./collection.view"; +export const CollectionTypes = { + SharedCollection: 0, + DefaultUserCollection: 1, +} as const; + +export type CollectionType = (typeof CollectionTypes)[keyof typeof CollectionTypes]; + export class Collection extends Domain { id: string; organizationId: string; @@ -15,6 +22,7 @@ export class Collection extends Domain { readOnly: boolean; hidePasswords: boolean; manage: boolean; + type: CollectionType; constructor(obj?: CollectionData) { super(); @@ -33,8 +41,9 @@ export class Collection extends Domain { readOnly: null, hidePasswords: null, manage: null, + type: null, }, - ["id", "organizationId", "readOnly", "hidePasswords", "manage"], + ["id", "organizationId", "readOnly", "hidePasswords", "manage", "type"], ); } diff --git a/libs/admin-console/src/common/collections/models/collection.view.ts b/libs/admin-console/src/common/collections/models/collection.view.ts index 1ce76608df1..7baf2e2b718 100644 --- a/libs/admin-console/src/common/collections/models/collection.view.ts +++ b/libs/admin-console/src/common/collections/models/collection.view.ts @@ -6,7 +6,7 @@ import { Organization } from "@bitwarden/common/admin-console/models/domain/orga import { View } from "@bitwarden/common/models/view/view"; import { ITreeNodeObject } from "@bitwarden/common/vault/models/domain/tree-node"; -import { Collection } from "./collection"; +import { Collection, CollectionType } from "./collection"; import { CollectionAccessDetailsResponse } from "./collection.response"; export const NestingDelimiter = "/"; @@ -21,6 +21,7 @@ export class CollectionView implements View, ITreeNodeObject { hidePasswords: boolean = null; manage: boolean = null; assigned: boolean = null; + type: CollectionType = null; constructor(c?: Collection | CollectionAccessDetailsResponse) { if (!c) { @@ -39,6 +40,7 @@ export class CollectionView implements View, ITreeNodeObject { if (c instanceof CollectionAccessDetailsResponse) { this.assigned = c.assigned; } + this.type = c.type; } canEditItems(org: Organization): boolean { diff --git a/libs/vault/src/cipher-form/components/item-details/item-details-section.component.spec.ts b/libs/vault/src/cipher-form/components/item-details/item-details-section.component.spec.ts index 1e9916e76a4..42b29193c85 100644 --- a/libs/vault/src/cipher-form/components/item-details/item-details-section.component.spec.ts +++ b/libs/vault/src/cipher-form/components/item-details/item-details-section.component.spec.ts @@ -7,7 +7,7 @@ import { BehaviorSubject } from "rxjs"; // This import has been flagged as unallowed for this class. It may be involved in a circular dependency loop. // eslint-disable-next-line no-restricted-imports -import { CollectionView } from "@bitwarden/admin-console/common"; +import { CollectionTypes, CollectionView } from "@bitwarden/admin-console/common"; import { Organization } from "@bitwarden/common/admin-console/models/domain/organization"; import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; @@ -35,6 +35,7 @@ const createMockCollection = ( hidePasswords: false, manage: true, assigned: true, + type: CollectionTypes.DefaultUserCollection, canEditItems: jest.fn().mockReturnValue(canEdit), canEdit: jest.fn(), canDelete: jest.fn(),