diff --git a/libs/common/src/auth/enums/emergency-access-status-type.ts b/apps/web/src/app/auth/core/enums/emergency-access-status-type.ts similarity index 100% rename from libs/common/src/auth/enums/emergency-access-status-type.ts rename to apps/web/src/app/auth/core/enums/emergency-access-status-type.ts diff --git a/libs/common/src/auth/enums/emergency-access-type.ts b/apps/web/src/app/auth/core/enums/emergency-access-type.ts similarity index 100% rename from libs/common/src/auth/enums/emergency-access-type.ts rename to apps/web/src/app/auth/core/enums/emergency-access-type.ts diff --git a/apps/web/src/app/auth/core/services/emergency-access/emergency-access-api.service.ts b/apps/web/src/app/auth/core/services/emergency-access/emergency-access-api.service.ts index f6329f92787..19693b505d0 100644 --- a/apps/web/src/app/auth/core/services/emergency-access/emergency-access-api.service.ts +++ b/apps/web/src/app/auth/core/services/emergency-access/emergency-access-api.service.ts @@ -2,18 +2,19 @@ import { Injectable } from "@angular/core"; import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { PolicyResponse } from "@bitwarden/common/admin-console/models/response/policy.response"; -import { EmergencyAccessAcceptRequest } from "@bitwarden/common/auth/models/request/emergency-access-accept.request"; -import { EmergencyAccessConfirmRequest } from "@bitwarden/common/auth/models/request/emergency-access-confirm.request"; -import { EmergencyAccessInviteRequest } from "@bitwarden/common/auth/models/request/emergency-access-invite.request"; -import { EmergencyAccessPasswordRequest } from "@bitwarden/common/auth/models/request/emergency-access-password.request"; -import { EmergencyAccessUpdateRequest } from "@bitwarden/common/auth/models/request/emergency-access-update.request"; +import { ListResponse } from "@bitwarden/common/models/response/list.response"; + +import { EmergencyAccessAcceptRequest } from "./request/emergency-access-accept.request"; +import { EmergencyAccessConfirmRequest } from "./request/emergency-access-confirm.request"; +import { EmergencyAccessInviteRequest } from "./request/emergency-access-invite.request"; +import { EmergencyAccessPasswordRequest } from "./request/emergency-access-password.request"; +import { EmergencyAccessUpdateRequest } from "./request/emergency-access-update.request"; import { EmergencyAccessGranteeDetailsResponse, EmergencyAccessGrantorDetailsResponse, EmergencyAccessTakeoverResponse, EmergencyAccessViewResponse, -} from "@bitwarden/common/auth/models/response/emergency-access.response"; -import { ListResponse } from "@bitwarden/common/models/response/list.response"; +} from "./response/emergency-access.response"; @Injectable() export class EmergencyAccessApiService { diff --git a/apps/web/src/app/auth/core/services/emergency-access/emergency-access.service.ts b/apps/web/src/app/auth/core/services/emergency-access/emergency-access.service.ts index 12cc25ffe76..4e950e918f2 100644 --- a/apps/web/src/app/auth/core/services/emergency-access/emergency-access.service.ts +++ b/apps/web/src/app/auth/core/services/emergency-access/emergency-access.service.ts @@ -1,12 +1,8 @@ import { Injectable } from "@angular/core"; + import { ApiService } from "@bitwarden/common/abstractions/api.service"; -import { EmergencyAccessStatusType } from "@bitwarden/common/auth/enums/emergency-access-status-type"; -import { EmergencyAccessType } from "@bitwarden/common/auth/enums/emergency-access-type"; -import { EmergencyAccessAcceptRequest } from "@bitwarden/common/auth/models/request/emergency-access-accept.request"; -import { EmergencyAccessConfirmRequest } from "@bitwarden/common/auth/models/request/emergency-access-confirm.request"; -import { EmergencyAccessInviteRequest } from "@bitwarden/common/auth/models/request/emergency-access-invite.request"; -import { EmergencyAccessUpdateRequest } from "@bitwarden/common/auth/models/request/emergency-access-update.request"; import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.service"; +import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; import { Utils } from "@bitwarden/common/platform/misc/utils"; import { EncryptedString } from "@bitwarden/common/platform/models/domain/enc-string"; @@ -14,12 +10,22 @@ import { SymmetricCryptoKey, UserKey, } from "@bitwarden/common/platform/models/domain/symmetric-crypto-key"; -import { EmergencyAccessApiService } from "./emergency-access-api.service"; -import { EmergencyAccessGranteeView } from "../../views/emergency-access.view"; -import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view"; -import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service"; -import { Cipher } from "@bitwarden/common/vault/models/domain/cipher"; import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service"; +import { Cipher } from "@bitwarden/common/vault/models/domain/cipher"; +import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view"; + +import { EmergencyAccessStatusType } from "../../enums/emergency-access-status-type"; +import { EmergencyAccessType } from "../../enums/emergency-access-type"; +import { + EmergencyAccessGranteeView, + EmergencyAccessGrantorView, +} from "../../views/emergency-access.view"; + +import { EmergencyAccessApiService } from "./emergency-access-api.service"; +import { EmergencyAccessAcceptRequest } from "./request/emergency-access-accept.request"; +import { EmergencyAccessConfirmRequest } from "./request/emergency-access-confirm.request"; +import { EmergencyAccessInviteRequest } from "./request/emergency-access-invite.request"; +import { EmergencyAccessUpdateRequest } from "./request/emergency-access-update.request"; @Injectable() export class EmergencyAccessService { @@ -32,8 +38,18 @@ export class EmergencyAccessService { private logService: LogService ) {} - async getEmergencyAccessTrusted(): Promise { - return; + /** + * Gets all emergency access that the user has been granted + */ + async getEmergencyAccessTrusted(): Promise { + return (await this.emergencyAccessApiService.getEmergencyAccessTrusted()).data; + } + + /** + * Gets all emergency access that the user has granted + */ + async getEmergencyAccessGranted(): Promise { + return (await this.emergencyAccessApiService.getEmergencyAccessGranted()).data; } /** diff --git a/libs/common/src/auth/models/request/emergency-access-accept.request.ts b/apps/web/src/app/auth/core/services/emergency-access/request/emergency-access-accept.request.ts similarity index 100% rename from libs/common/src/auth/models/request/emergency-access-accept.request.ts rename to apps/web/src/app/auth/core/services/emergency-access/request/emergency-access-accept.request.ts diff --git a/libs/common/src/auth/models/request/emergency-access-confirm.request.ts b/apps/web/src/app/auth/core/services/emergency-access/request/emergency-access-confirm.request.ts similarity index 100% rename from libs/common/src/auth/models/request/emergency-access-confirm.request.ts rename to apps/web/src/app/auth/core/services/emergency-access/request/emergency-access-confirm.request.ts diff --git a/libs/common/src/auth/models/request/emergency-access-invite.request.ts b/apps/web/src/app/auth/core/services/emergency-access/request/emergency-access-invite.request.ts similarity index 60% rename from libs/common/src/auth/models/request/emergency-access-invite.request.ts rename to apps/web/src/app/auth/core/services/emergency-access/request/emergency-access-invite.request.ts index c5f038bd2c2..d39fbd37c81 100644 --- a/libs/common/src/auth/models/request/emergency-access-invite.request.ts +++ b/apps/web/src/app/auth/core/services/emergency-access/request/emergency-access-invite.request.ts @@ -1,4 +1,4 @@ -import { EmergencyAccessType } from "../../enums/emergency-access-type"; +import { EmergencyAccessType } from "../../../enums/emergency-access-type"; export class EmergencyAccessInviteRequest { email: string; diff --git a/libs/common/src/auth/models/request/emergency-access-password.request.ts b/apps/web/src/app/auth/core/services/emergency-access/request/emergency-access-password.request.ts similarity index 100% rename from libs/common/src/auth/models/request/emergency-access-password.request.ts rename to apps/web/src/app/auth/core/services/emergency-access/request/emergency-access-password.request.ts diff --git a/libs/common/src/auth/models/request/emergency-access-update.request.ts b/apps/web/src/app/auth/core/services/emergency-access/request/emergency-access-update.request.ts similarity index 62% rename from libs/common/src/auth/models/request/emergency-access-update.request.ts rename to apps/web/src/app/auth/core/services/emergency-access/request/emergency-access-update.request.ts index 37e7e975aad..4d2e993738d 100644 --- a/libs/common/src/auth/models/request/emergency-access-update.request.ts +++ b/apps/web/src/app/auth/core/services/emergency-access/request/emergency-access-update.request.ts @@ -1,4 +1,4 @@ -import { EmergencyAccessType } from "../../enums/emergency-access-type"; +import { EmergencyAccessType } from "../../../enums/emergency-access-type"; export class EmergencyAccessUpdateRequest { type: EmergencyAccessType; diff --git a/libs/common/src/auth/models/response/emergency-access.response.ts b/apps/web/src/app/auth/core/services/emergency-access/response/emergency-access.response.ts similarity index 87% rename from libs/common/src/auth/models/response/emergency-access.response.ts rename to apps/web/src/app/auth/core/services/emergency-access/response/emergency-access.response.ts index a8ec9a0c0fc..231c3b60a92 100644 --- a/libs/common/src/auth/models/response/emergency-access.response.ts +++ b/apps/web/src/app/auth/core/services/emergency-access/response/emergency-access.response.ts @@ -1,8 +1,9 @@ -import { KdfType } from "../../../enums"; -import { BaseResponse } from "../../../models/response/base.response"; -import { CipherResponse } from "../../../vault/models/response/cipher.response"; -import { EmergencyAccessStatusType } from "../../enums/emergency-access-status-type"; -import { EmergencyAccessType } from "../../enums/emergency-access-type"; +import { KdfType } from "@bitwarden/common/enums"; +import { BaseResponse } from "@bitwarden/common/models/response/base.response"; +import { CipherResponse } from "@bitwarden/common/vault/models/response/cipher.response"; + +import { EmergencyAccessStatusType } from "../../../enums/emergency-access-status-type"; +import { EmergencyAccessType } from "../../../enums/emergency-access-type"; export class EmergencyAccessGranteeDetailsResponse extends BaseResponse { id: string; diff --git a/apps/web/src/app/auth/core/views/emergency-access.view.ts b/apps/web/src/app/auth/core/views/emergency-access.view.ts index 568bfd4f490..ce2ea47a8a5 100644 --- a/apps/web/src/app/auth/core/views/emergency-access.view.ts +++ b/apps/web/src/app/auth/core/views/emergency-access.view.ts @@ -1,3 +1,9 @@ +import { KdfType } from "@bitwarden/common/enums"; +import { CipherResponse } from "@bitwarden/common/vault/models/response/cipher.response"; + +import { EmergencyAccessStatusType } from "../enums/emergency-access-status-type"; +import { EmergencyAccessType } from "../enums/emergency-access-type"; + export class EmergencyAccessGranteeView { id: string; granteeId: string; @@ -22,7 +28,7 @@ export class EmergencyAccessGrantorView { avatarColor: string; } -export class EmergencyAccessTakeoverView { +export class EmergencyAccessTakeoverTypeView { keyEncrypted: string; kdf: KdfType; kdfIterations: number; @@ -30,7 +36,7 @@ export class EmergencyAccessTakeoverView { kdfParallelism?: number; } -export class EmergencyAccessViewView { +export class EmergencyAccessViewTypeView { keyEncrypted: string; ciphers: CipherResponse[] = []; } diff --git a/apps/web/src/app/auth/settings/emergency-access/emergency-access.component.ts b/apps/web/src/app/auth/settings/emergency-access/emergency-access.component.ts index 9ed0f510c20..9ffb0732ab2 100644 --- a/apps/web/src/app/auth/settings/emergency-access/emergency-access.component.ts +++ b/apps/web/src/app/auth/settings/emergency-access/emergency-access.component.ts @@ -3,20 +3,21 @@ import { Component, OnInit, ViewChild, ViewContainerRef } from "@angular/core"; import { UserNamePipe } from "@bitwarden/angular/pipes/user-name.pipe"; import { ModalService } from "@bitwarden/angular/services/modal.service"; import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction"; -import { EmergencyAccessStatusType } from "@bitwarden/common/auth/enums/emergency-access-status-type"; -import { EmergencyAccessType } from "@bitwarden/common/auth/enums/emergency-access-type"; -import { - EmergencyAccessGranteeDetailsResponse, - EmergencyAccessGrantorDetailsResponse, -} from "@bitwarden/common/auth/models/response/emergency-access.response"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service"; import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; import { StateService } from "@bitwarden/common/platform/abstractions/state.service"; import { DialogService } from "@bitwarden/components"; + +import { EmergencyAccessStatusType } from "../../core/enums/emergency-access-status-type"; +import { EmergencyAccessType } from "../../core/enums/emergency-access-type"; import { EmergencyAccessApiService } from "../../core/services/emergency-access/emergency-access-api.service"; import { EmergencyAccessService } from "../../core/services/emergency-access/emergency-access.service"; +import { + EmergencyAccessGranteeView, + EmergencyAccessGrantorView, +} from "../../core/views/emergency-access.view"; import { EmergencyAccessAddEditComponent } from "./emergency-access-add-edit.component"; import { EmergencyAccessConfirmComponent } from "./emergency-access-confirm.component"; @@ -36,8 +37,8 @@ export class EmergencyAccessComponent implements OnInit { loaded = false; canAccessPremium: boolean; - trustedContacts: EmergencyAccessGranteeDetailsResponse[]; - grantedContacts: EmergencyAccessGrantorDetailsResponse[]; + trustedContacts: EmergencyAccessGranteeView[]; + grantedContacts: EmergencyAccessGrantorView[]; emergencyAccessType = EmergencyAccessType; emergencyAccessStatusType = EmergencyAccessStatusType; actionPromise: Promise; @@ -65,8 +66,8 @@ export class EmergencyAccessComponent implements OnInit { } async load() { - this.trustedContacts = (await this.emergencyAccessApiService.getEmergencyAccessTrusted()).data; - this.grantedContacts = (await this.emergencyAccessApiService.getEmergencyAccessGranted()).data; + this.trustedContacts = await this.emergencyAccessService.getEmergencyAccessTrusted(); + this.grantedContacts = await this.emergencyAccessService.getEmergencyAccessGranted(); this.loaded = true; } @@ -77,7 +78,7 @@ export class EmergencyAccessComponent implements OnInit { } } - async edit(details: EmergencyAccessGranteeDetailsResponse) { + async edit(details: EmergencyAccessGranteeView) { const [modal] = await this.modalService.openViewRef( EmergencyAccessAddEditComponent, this.addEditModalRef, @@ -103,7 +104,7 @@ export class EmergencyAccessComponent implements OnInit { this.edit(null); } - async reinvite(contact: EmergencyAccessGranteeDetailsResponse) { + async reinvite(contact: EmergencyAccessGranteeView) { if (this.actionPromise != null) { return; } @@ -117,7 +118,7 @@ export class EmergencyAccessComponent implements OnInit { this.actionPromise = null; } - async confirm(contact: EmergencyAccessGranteeDetailsResponse) { + async confirm(contact: EmergencyAccessGranteeView) { function updateUser() { contact.status = EmergencyAccessStatusType.Confirmed; } @@ -166,9 +167,7 @@ export class EmergencyAccessComponent implements OnInit { this.actionPromise = null; } - async remove( - details: EmergencyAccessGranteeDetailsResponse | EmergencyAccessGrantorDetailsResponse - ) { + async remove(details: EmergencyAccessGranteeView | EmergencyAccessGrantorView) { const confirmed = await this.dialogService.openSimpleDialog({ title: this.userNamePipe.transform(details), content: { key: "removeUserConfirmation" }, @@ -187,7 +186,7 @@ export class EmergencyAccessComponent implements OnInit { this.i18nService.t("removedUserId", this.userNamePipe.transform(details)) ); - if (details instanceof EmergencyAccessGranteeDetailsResponse) { + if (details instanceof EmergencyAccessGranteeView) { this.removeGrantee(details); } else { this.removeGrantor(details); @@ -197,7 +196,7 @@ export class EmergencyAccessComponent implements OnInit { } } - async requestAccess(details: EmergencyAccessGrantorDetailsResponse) { + async requestAccess(details: EmergencyAccessGrantorView) { const confirmed = await this.dialogService.openSimpleDialog({ title: this.userNamePipe.transform(details), content: { @@ -222,7 +221,7 @@ export class EmergencyAccessComponent implements OnInit { ); } - async approve(details: EmergencyAccessGranteeDetailsResponse) { + async approve(details: EmergencyAccessGranteeView) { const type = this.i18nService.t( details.type === EmergencyAccessType.View ? "view" : "takeover" ); @@ -251,7 +250,7 @@ export class EmergencyAccessComponent implements OnInit { ); } - async reject(details: EmergencyAccessGranteeDetailsResponse) { + async reject(details: EmergencyAccessGranteeView) { await this.emergencyAccessService.reject(details.id); details.status = EmergencyAccessStatusType.Confirmed; @@ -262,7 +261,7 @@ export class EmergencyAccessComponent implements OnInit { ); } - async takeover(details: EmergencyAccessGrantorDetailsResponse) { + async takeover(details: EmergencyAccessGrantorView) { const [modal] = await this.modalService.openViewRef( EmergencyAccessTakeoverComponent, this.takeoverModalRef, @@ -284,14 +283,14 @@ export class EmergencyAccessComponent implements OnInit { ); } - private removeGrantee(details: EmergencyAccessGranteeDetailsResponse) { + private removeGrantee(details: EmergencyAccessGranteeView) { const index = this.trustedContacts.indexOf(details); if (index > -1) { this.trustedContacts.splice(index, 1); } } - private removeGrantor(details: EmergencyAccessGrantorDetailsResponse) { + private removeGrantor(details: EmergencyAccessGrantorView) { const index = this.grantedContacts.indexOf(details); if (index > -1) { this.grantedContacts.splice(index, 1);