示例#1
0
        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();
        }
示例#2
0
        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);