diff --git a/libs/angular/src/services/jslib-services.module.ts b/libs/angular/src/services/jslib-services.module.ts index 43344a6894..4d1b3ce580 100644 --- a/libs/angular/src/services/jslib-services.module.ts +++ b/libs/angular/src/services/jslib-services.module.ts @@ -736,7 +736,7 @@ import { ModalService } from "./modal.service"; useClass: PasswordResetEnrollmentServiceImplementation, deps: [ OrganizationApiServiceAbstraction, - StateServiceAbstraction, + AccountServiceAbstraction, CryptoServiceAbstraction, OrganizationUserService, I18nServiceAbstraction, diff --git a/libs/common/src/auth/services/password-reset-enrollment.service.implementation.spec.ts b/libs/common/src/auth/services/password-reset-enrollment.service.implementation.spec.ts index bdbbfea94b..408ed33c97 100644 --- a/libs/common/src/auth/services/password-reset-enrollment.service.implementation.spec.ts +++ b/libs/common/src/auth/services/password-reset-enrollment.service.implementation.spec.ts @@ -1,17 +1,22 @@ import { mock, MockProxy } from "jest-mock-extended"; +import { BehaviorSubject } from "rxjs"; +import { UserId } from "../../../../common/src/types/guid"; import { OrganizationApiServiceAbstraction } from "../../admin-console/abstractions/organization/organization-api.service.abstraction"; import { OrganizationUserService } from "../../admin-console/abstractions/organization-user/organization-user.service"; import { OrganizationAutoEnrollStatusResponse } from "../../admin-console/models/response/organization-auto-enroll-status.response"; import { CryptoService } from "../../platform/abstractions/crypto.service"; import { I18nService } from "../../platform/abstractions/i18n.service"; -import { StateService } from "../../platform/abstractions/state.service"; +import { AccountInfo, AccountService } from "../abstractions/account.service"; +import { AuthenticationStatus } from "../enums/authentication-status"; import { PasswordResetEnrollmentServiceImplementation } from "./password-reset-enrollment.service.implementation"; describe("PasswordResetEnrollmentServiceImplementation", () => { + const activeAccountSubject = new BehaviorSubject<{ id: UserId } & AccountInfo>(null); + let organizationApiService: MockProxy; - let stateService: MockProxy; + let accountService: MockProxy; let cryptoService: MockProxy; let organizationUserService: MockProxy; let i18nService: MockProxy; @@ -19,13 +24,14 @@ describe("PasswordResetEnrollmentServiceImplementation", () => { beforeEach(() => { organizationApiService = mock(); - stateService = mock(); + accountService = mock(); + accountService.activeAccount$ = activeAccountSubject; cryptoService = mock(); organizationUserService = mock(); i18nService = mock(); service = new PasswordResetEnrollmentServiceImplementation( organizationApiService, - stateService, + accountService, cryptoService, organizationUserService, i18nService, @@ -81,7 +87,14 @@ describe("PasswordResetEnrollmentServiceImplementation", () => { }; const encryptedKey = { encryptedString: "encryptedString" }; organizationApiService.getKeys.mockResolvedValue(orgKeyResponse as any); - stateService.getUserId.mockResolvedValue("userId"); + + const user1AccountInfo: AccountInfo = { + name: "Test User 1", + email: "test1@email.com", + status: AuthenticationStatus.Unlocked, + }; + activeAccountSubject.next(Object.assign(user1AccountInfo, { id: "userId" as UserId })); + cryptoService.getUserKey.mockResolvedValue({ key: "key" } as any); cryptoService.rsaEncrypt.mockResolvedValue(encryptedKey as any); diff --git a/libs/common/src/auth/services/password-reset-enrollment.service.implementation.ts b/libs/common/src/auth/services/password-reset-enrollment.service.implementation.ts index 8904605acc..aeb978bfd9 100644 --- a/libs/common/src/auth/services/password-reset-enrollment.service.implementation.ts +++ b/libs/common/src/auth/services/password-reset-enrollment.service.implementation.ts @@ -1,11 +1,13 @@ +import { firstValueFrom, map } from "rxjs"; + import { OrganizationApiServiceAbstraction } from "../../admin-console/abstractions/organization/organization-api.service.abstraction"; import { OrganizationUserService } from "../../admin-console/abstractions/organization-user/organization-user.service"; import { OrganizationUserResetPasswordEnrollmentRequest } from "../../admin-console/abstractions/organization-user/requests"; import { CryptoService } from "../../platform/abstractions/crypto.service"; import { I18nService } from "../../platform/abstractions/i18n.service"; -import { StateService } from "../../platform/abstractions/state.service"; import { Utils } from "../../platform/misc/utils"; import { UserKey } from "../../types/key"; +import { AccountService } from "../abstractions/account.service"; import { PasswordResetEnrollmentServiceAbstraction } from "../abstractions/password-reset-enrollment.service.abstraction"; export class PasswordResetEnrollmentServiceImplementation @@ -13,7 +15,7 @@ export class PasswordResetEnrollmentServiceImplementation { constructor( protected organizationApiService: OrganizationApiServiceAbstraction, - protected stateService: StateService, + protected accountService: AccountService, protected cryptoService: CryptoService, protected organizationUserService: OrganizationUserService, protected i18nService: I18nService, @@ -38,7 +40,8 @@ export class PasswordResetEnrollmentServiceImplementation const orgPublicKey = Utils.fromB64ToArray(orgKeyResponse.publicKey); - userId = userId ?? (await this.stateService.getUserId()); + userId = + userId ?? (await firstValueFrom(this.accountService.activeAccount$.pipe(map((a) => a?.id)))); userKey = userKey ?? (await this.cryptoService.getUserKey(userId)); // RSA Encrypt user's userKey.key with organization public key const encryptedKey = await this.cryptoService.rsaEncrypt(userKey.key, orgPublicKey);