Browse Source

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()
pull/1163/head
Addison Beck 5 years ago committed by GitHub
parent
commit
f8940e4be5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 19
      src/Core/Services/Implementations/EmergencyAccessService.cs

19
src/Core/Services/Implementations/EmergencyAccessService.cs

@ -248,8 +248,7 @@ namespace Bit.Core.Services @@ -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 @@ -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 @@ -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 @@ -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 @@ -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;
}
}
}

Loading…
Cancel
Save