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; + } } }