diff --git a/src/abstractions/crypto.service.ts b/src/abstractions/crypto.service.ts index e10eb6ecb1..42e91c1851 100644 --- a/src/abstractions/crypto.service.ts +++ b/src/abstractions/crypto.service.ts @@ -43,7 +43,7 @@ export abstract class CryptoService { encrypt: (plainValue: string | ArrayBuffer, key?: SymmetricCryptoKey) => Promise; encryptToBytes: (plainValue: ArrayBuffer, key?: SymmetricCryptoKey) => Promise; rsaEncrypt: (data: ArrayBuffer, publicKey?: ArrayBuffer) => Promise; - rsaDecrypt: (encValue: string) => Promise; + rsaDecrypt: (encValue: string, privateKeyValue?: ArrayBuffer) => Promise; decryptToBytes: (encString: EncString, key?: SymmetricCryptoKey) => Promise; decryptToUtf8: (encString: EncString, key?: SymmetricCryptoKey) => Promise; decryptFromBytes: (encBuf: ArrayBuffer, key: SymmetricCryptoKey) => Promise; diff --git a/src/abstractions/policy.service.ts b/src/abstractions/policy.service.ts index 6dc76d04d3..b823f2fbfd 100644 --- a/src/abstractions/policy.service.ts +++ b/src/abstractions/policy.service.ts @@ -6,6 +6,9 @@ import { ResetPasswordPolicyOptions } from '../models/domain/resetPasswordPolicy import { PolicyType } from '../enums/policyType'; +import { ListResponse } from '../models/response/listResponse'; +import { PolicyResponse } from '../models/response/policyResponse'; + export abstract class PolicyService { policyCache: Policy[]; @@ -16,5 +19,6 @@ export abstract class PolicyService { getMasterPasswordPolicyOptions: (policies?: Policy[]) => Promise; evaluateMasterPassword: (passwordStrength: number, newPassword: string, enforcedPolicyOptions?: MasterPasswordPolicyOptions) => boolean; - getResetPasswordPolicyOptions: (policy: Policy) => ResetPasswordPolicyOptions; + getResetPasswordPolicyOptions: (policies: Policy[], orgId: string) => [ResetPasswordPolicyOptions, boolean]; + mapPoliciesFromToken: (policiesResponse: ListResponse) => Policy[]; } diff --git a/src/services/crypto.service.ts b/src/services/crypto.service.ts index 26b96baf0c..1b98315cf3 100644 --- a/src/services/crypto.service.ts +++ b/src/services/crypto.service.ts @@ -446,7 +446,7 @@ export class CryptoService implements CryptoServiceAbstraction { return new EncString(EncryptionType.Rsa2048_OaepSha1_B64, Utils.fromBufferToB64(encBytes)); } - async rsaDecrypt(encValue: string): Promise { + async rsaDecrypt(encValue: string, privateKeyValue?: ArrayBuffer): Promise { const headerPieces = encValue.split('.'); let encType: EncryptionType = null; let encPieces: string[]; @@ -477,7 +477,7 @@ export class CryptoService implements CryptoServiceAbstraction { } const data = Utils.fromB64ToArray(encPieces[0]).buffer; - const privateKey = await this.getPrivateKey(); + const privateKey = privateKeyValue ?? await this.getPrivateKey(); if (privateKey == null) { throw new Error('No private key.'); } diff --git a/src/services/policy.service.ts b/src/services/policy.service.ts index d9c5db2dba..92807a0f99 100644 --- a/src/services/policy.service.ts +++ b/src/services/policy.service.ts @@ -6,9 +6,12 @@ import { PolicyData } from '../models/data/policyData'; import { MasterPasswordPolicyOptions } from '../models/domain/masterPasswordPolicyOptions'; import { Policy } from '../models/domain/policy'; +import { ResetPasswordPolicyOptions } from '../models/domain/resetPasswordPolicyOptions'; import { PolicyType } from '../enums/policyType'; -import { ResetPasswordPolicyOptions } from '../models/domain/resetPasswordPolicyOptions'; + +import { ListResponse } from '../models/response/listResponse'; +import { PolicyResponse } from '../models/response/policyResponse'; const Keys = { policiesPrefix: 'policies_', @@ -140,13 +143,25 @@ export class PolicyService implements PolicyServiceAbstraction { return true; } - getResetPasswordPolicyOptions(policy: Policy): ResetPasswordPolicyOptions { + getResetPasswordPolicyOptions(policies: Policy[], orgId: string): [ResetPasswordPolicyOptions, boolean] { const resetPasswordPolicyOptions = new ResetPasswordPolicyOptions(); - if (policy != null && policy.enabled && policy.data != null) { - resetPasswordPolicyOptions.autoEnrollEnabled = policy.data.autoEnrollEnabled; + if (policies == null || orgId == null) { + return [resetPasswordPolicyOptions, false]; } - return resetPasswordPolicyOptions; + const policy = policies.find(p => p.organizationId === orgId && p.type === PolicyType.ResetPassword && p.enabled); + resetPasswordPolicyOptions.autoEnrollEnabled = policy?.data?.autoEnrollEnabled ?? false; + + return [resetPasswordPolicyOptions, policy?.enabled ?? false]; + } + + mapPoliciesFromToken(policiesResponse: ListResponse): Policy[] { + if (policiesResponse == null || policiesResponse.data == null) { + return null; + } + + const policiesData = policiesResponse.data.map(p => new PolicyData(p)); + return policiesData.map(p => new Policy(p)); } }