From f8940e4be5215ad423c4d2880f8f7d574f75124d Mon Sep 17 00:00:00 2001 From: Addison Beck Date: Tue, 23 Feb 2021 17:12:52 -0500 Subject: [PATCH] Checked Emergency Access access type on access initiation (#1160) * also updated the View method * removed old code * naming refactor * used the right type * also checked PasswordAsync() * also checked GetPolicies() --- .../Implementations/EmergencyAccessService.cs | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/Core/Services/Implementations/EmergencyAccessService.cs b/src/Core/Services/Implementations/EmergencyAccessService.cs index 41d4299ceb..07682842dd 100644 --- a/src/Core/Services/Implementations/EmergencyAccessService.cs +++ b/src/Core/Services/Implementations/EmergencyAccessService.cs @@ -248,8 +248,7 @@ namespace Bit.Core.Services { var emergencyAccess = await _emergencyAccessRepository.GetByIdAsync(id); - if (emergencyAccess == null || emergencyAccess.GranteeId != requestingUser.Id || - emergencyAccess.Status != EmergencyAccessStatusType.RecoveryApproved) + if (!IsValidRequest(emergencyAccess, requestingUser, EmergencyAccessType.Takeover)) { throw new BadRequestException("Emergency Access not valid."); } @@ -267,8 +266,7 @@ namespace Bit.Core.Services { var emergencyAccess = await _emergencyAccessRepository.GetByIdAsync(id); - if (emergencyAccess == null || emergencyAccess.GranteeId != requestingUser.Id || - emergencyAccess.Status != EmergencyAccessStatusType.RecoveryApproved) + if (!IsValidRequest(emergencyAccess, requestingUser, EmergencyAccessType.Takeover)) { throw new BadRequestException("Emergency Access not valid."); } @@ -282,8 +280,7 @@ namespace Bit.Core.Services { var emergencyAccess = await _emergencyAccessRepository.GetByIdAsync(id); - if (emergencyAccess == null || emergencyAccess.GranteeId != requestingUser.Id || - emergencyAccess.Status != EmergencyAccessStatusType.RecoveryApproved) + if (!IsValidRequest(emergencyAccess, requestingUser, EmergencyAccessType.Takeover)) { throw new BadRequestException("Emergency Access not valid."); } @@ -340,8 +337,7 @@ namespace Bit.Core.Services { var emergencyAccess = await _emergencyAccessRepository.GetByIdAsync(id); - if (emergencyAccess == null || emergencyAccess.GranteeId != requestingUser.Id || - emergencyAccess.Status != EmergencyAccessStatusType.RecoveryApproved) + if (!IsValidRequest(emergencyAccess, requestingUser, EmergencyAccessType.View)) { throw new BadRequestException("Emergency Access not valid."); } @@ -362,5 +358,12 @@ namespace Bit.Core.Services { return string.IsNullOrWhiteSpace(user.Name) ? user.Email : user.Name; } + + private bool IsValidRequest(EmergencyAccess availibleAccess, User requestingUser, EmergencyAccessType requestedAccessType) { + return availibleAccess != null && + availibleAccess.GranteeId == requestingUser.Id && + availibleAccess.Status == EmergencyAccessStatusType.RecoveryApproved && + availibleAccess.Type == requestedAccessType; + } } }