public async Task UnblockAsync(UnblockUser command) { var emailHash = _hashManager.CalculateDataHash(command.Email); var user = await _context.Users.GetByEmail(emailHash).SingleOrDefaultAsync(); if (user == null || user.RestoreKey != command.RestoreKey) { throw new CorruptedOperationException("Invalid data"); } if (user.IsActive == true || user.IsRestoreKeyFresh == false) { throw new CorruptedOperationException("Invalid operation."); } _hashManager.CalculatePasswordHash(command.NewPassword, user.Salt, out var newPasswordHash); user.UpdatePassword(newPasswordHash); user.RestoreKeyUsedAt = DateTime.UtcNow; user.IsRestoreKeyFresh = false; user.IsActive = true; _context.Users.Update(user); await _context.SaveChangesAsync(); }
public async Task <IActionResult> Unblock(string username) { var command = new UnblockUser { Username = username }; var result = await _userService .UnblockUserAsync(command) .OrFailAsync(); return(Ok(result)); }
public async Task <Response <UserDto> > UnblockUserAsync(UnblockUser command) => await PutAsync <UserDto>($"api/users/{command.Username}/unblock", command);