From 7a07eb4420ddfc682af200d42e5078480d25eb6b Mon Sep 17 00:00:00 2001 From: Sven Date: Thu, 15 Jan 2026 00:04:13 -0600 Subject: [PATCH] Separates policy response model for individual policy data --- .../policies/base-policy-edit.component.ts | 4 ++-- .../remove-unlock-with-pin.component.spec.ts | 11 ++++------- .../policy/policy-api.service.abstraction.ts | 3 ++- .../models/response/policy-status.response.ts | 19 +++++++++++++++++++ .../services/policy/policy-api.service.ts | 3 ++- 5 files changed, 29 insertions(+), 11 deletions(-) create mode 100644 libs/common/src/admin-console/models/response/policy-status.response.ts diff --git a/apps/web/src/app/admin-console/organizations/policies/base-policy-edit.component.ts b/apps/web/src/app/admin-console/organizations/policies/base-policy-edit.component.ts index c1b175fa988..08897299d81 100644 --- a/apps/web/src/app/admin-console/organizations/policies/base-policy-edit.component.ts +++ b/apps/web/src/app/admin-console/organizations/policies/base-policy-edit.component.ts @@ -6,7 +6,7 @@ import { Constructor } from "type-fest"; import { PolicyType } from "@bitwarden/common/admin-console/enums"; import { Organization } from "@bitwarden/common/admin-console/models/domain/organization"; import { PolicyRequest } from "@bitwarden/common/admin-console/models/request/policy.request"; -import { PolicyResponse } from "@bitwarden/common/admin-console/models/response/policy.response"; +import { PolicyStatusResponse } from "@bitwarden/common/admin-console/models/response/policy-status.response"; import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service"; import { DialogConfig, DialogRef, DialogService } from "@bitwarden/components"; @@ -80,7 +80,7 @@ export abstract class BasePolicyEditDefinition { export abstract class BasePolicyEditComponent implements OnInit { // FIXME(https://bitwarden.atlassian.net/browse/CL-903): Migrate to Signals // eslint-disable-next-line @angular-eslint/prefer-signals - @Input() policyResponse: PolicyResponse | undefined; + @Input() policyResponse: PolicyStatusResponse | undefined; // FIXME(https://bitwarden.atlassian.net/browse/CL-903): Migrate to Signals // eslint-disable-next-line @angular-eslint/prefer-signals @Input() policy: BasePolicyEditDefinition | undefined; diff --git a/apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/remove-unlock-with-pin.component.spec.ts b/apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/remove-unlock-with-pin.component.spec.ts index f6df56cd83a..21ab7fc71ba 100644 --- a/apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/remove-unlock-with-pin.component.spec.ts +++ b/apps/web/src/app/admin-console/organizations/policies/policy-edit-definitions/remove-unlock-with-pin.component.spec.ts @@ -4,7 +4,7 @@ import { By } from "@angular/platform-browser"; import { mock } from "jest-mock-extended"; import { PolicyType } from "@bitwarden/common/admin-console/enums"; -import { PolicyResponse } from "@bitwarden/common/admin-console/models/response/policy.response"; +import { PolicyStatusResponse } from "@bitwarden/common/admin-console/models/response/policy-status.response"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { @@ -42,8 +42,7 @@ describe("RemoveUnlockWithPinPolicyComponent", () => { }); it("input selected on load when policy enabled", async () => { - component.policyResponse = new PolicyResponse({ - id: "policy1", + component.policyResponse = new PolicyStatusResponse({ organizationId: "org1", type: PolicyType.RemoveUnlockWithPin, enabled: true, @@ -63,8 +62,7 @@ describe("RemoveUnlockWithPinPolicyComponent", () => { }); it("input not selected on load when policy disabled", async () => { - component.policyResponse = new PolicyResponse({ - id: "policy1", + component.policyResponse = new PolicyStatusResponse({ organizationId: "org1", type: PolicyType.RemoveUnlockWithPin, enabled: false, @@ -84,8 +82,7 @@ describe("RemoveUnlockWithPinPolicyComponent", () => { }); it("turn on message label", async () => { - component.policyResponse = new PolicyResponse({ - id: "policy1", + component.policyResponse = new PolicyStatusResponse({ organizationId: "org1", type: PolicyType.RemoveUnlockWithPin, enabled: false, diff --git a/libs/common/src/admin-console/abstractions/policy/policy-api.service.abstraction.ts b/libs/common/src/admin-console/abstractions/policy/policy-api.service.abstraction.ts index 79055d3cb11..a044aac9d72 100644 --- a/libs/common/src/admin-console/abstractions/policy/policy-api.service.abstraction.ts +++ b/libs/common/src/admin-console/abstractions/policy/policy-api.service.abstraction.ts @@ -3,10 +3,11 @@ import { PolicyType } from "../../enums"; import { MasterPasswordPolicyOptions } from "../../models/domain/master-password-policy-options"; import { Policy } from "../../models/domain/policy"; import { PolicyRequest } from "../../models/request/policy.request"; +import { PolicyStatusResponse } from "../../models/response/policy-status.response"; import { PolicyResponse } from "../../models/response/policy.response"; export abstract class PolicyApiServiceAbstraction { - abstract getPolicy: (organizationId: string, type: PolicyType) => Promise; + abstract getPolicy: (organizationId: string, type: PolicyType) => Promise; abstract getPolicies: (organizationId: string) => Promise>; abstract getPoliciesByToken: ( diff --git a/libs/common/src/admin-console/models/response/policy-status.response.ts b/libs/common/src/admin-console/models/response/policy-status.response.ts new file mode 100644 index 00000000000..7e4ff604dd6 --- /dev/null +++ b/libs/common/src/admin-console/models/response/policy-status.response.ts @@ -0,0 +1,19 @@ +import { BaseResponse } from "../../../models/response/base.response"; +import { PolicyType } from "../../enums"; + +export class PolicyStatusResponse extends BaseResponse { + organizationId: string; + type: PolicyType; + data: any; + enabled: boolean; + canToggleState: boolean; + + constructor(response: any) { + super(response); + this.organizationId = this.getResponseProperty("OrganizationId"); + this.type = this.getResponseProperty("Type"); + this.data = this.getResponseProperty("Data"); + this.enabled = this.getResponseProperty("Enabled"); + this.canToggleState = this.getResponseProperty("CanToggleState") ?? true; + } +} diff --git a/libs/common/src/admin-console/services/policy/policy-api.service.ts b/libs/common/src/admin-console/services/policy/policy-api.service.ts index c0a5c74f1e3..dbf12e98860 100644 --- a/libs/common/src/admin-console/services/policy/policy-api.service.ts +++ b/libs/common/src/admin-console/services/policy/policy-api.service.ts @@ -14,6 +14,7 @@ import { PolicyData } from "../../models/data/policy.data"; import { MasterPasswordPolicyOptions } from "../../models/domain/master-password-policy-options"; import { Policy } from "../../models/domain/policy"; import { PolicyRequest } from "../../models/request/policy.request"; +import { PolicyStatusResponse } from "../../models/response/policy-status.response"; import { PolicyResponse } from "../../models/response/policy.response"; export class PolicyApiService implements PolicyApiServiceAbstraction { @@ -23,7 +24,7 @@ export class PolicyApiService implements PolicyApiServiceAbstraction { private accountService: AccountService, ) {} - async getPolicy(organizationId: string, type: PolicyType): Promise { + async getPolicy(organizationId: string, type: PolicyType): Promise { const r = await this.apiService.send( "GET", "/organizations/" + organizationId + "/policies/" + type,