Exemplo n.º 1
0
        public async Task <bool> ResetPassword(string hash, string newPassword, CancellationToken ct = default)
        {
            UserPassResetToken token = await _context.UserPassResetTokens
                                       .FirstOrDefaultAsync(urt => urt.UserResetHash == hash && urt.HashExpiry > DateTime.UtcNow);

            if (token == null)
            {
                return(false);
            }

            Tuple <string, string> hashedPassValues = _hashingService.NewHashAndSalt(newPassword);
            UserAuthentication     auth             = await _context.UserAuthentications.FirstOrDefaultAsync(ua => ua.UserUUID == token.UserUUID);

            if (auth != null)
            {
                auth.UserPassHash = hashedPassValues.Item1;
                auth.UserPassSalt = hashedPassValues.Item2;
            }
            await _tokenService.InvalidateAllRefreshTokensAsync(token.UserUUID);

            token.HashIsActive = false;
            _context.Update(token);
            await _context.SaveChangesAsync();

            return(true);

            throw new NotImplementedException();
        }
Exemplo n.º 2
0
        public async Task <string> AddResetHash(User user, CancellationToken ct = default)
        {
            string             resetHash  = Base64UrlEncoder.Encode(_hashingService.RandomHash());
            UserPassResetToken resetToken = new UserPassResetToken
            {
                UserUUID      = user.UserUUID,
                UserResetHash = resetHash,
                HashExpiry    = DateTime.UtcNow.AddMinutes(30),
                HashIsActive  = true
            };
            await _context.UserPassResetTokens.AddAsync(resetToken, ct);

            await _context.SaveChangesAsync();

            return(resetToken.UserResetHash);
        }