public async Task <UserToken> GetRefreshTokenForUser(string purpose, int userId) { try { using (var connection = await GetConnectionAsync()) { var res = await connection.QueryAsync(RegistrarQueries.UserTokenGetByPurpose, new { UserId = userId, Purpose = purpose }); if (!res.Any()) { throw new RecordNotFoundException(); } var dbModel = new DbUserToken(res.First()); return(dbModel.ToToken()); } } catch (Exception e) { if (e is RecordNotFoundException) { throw; } throw new Exception("Could not get user token"); } }
public async Task <AuthenticationResponse> Authenticate(string username, string password) { var userAuthResult = await ApiClient.UserAuth(_userApiUri, new UserCred { Username = username, Password = password }); if (userAuthResult?.Code != 0) { return(null); } var tokenCreatedAt = DateTime.Now; var token = GenerateTokenString(username, tokenCreatedAt); var refreshToken = _refreshTokenGenerator.GenerateToken(); using (var scope = _serviceProvider.CreateScope()) { var dbRepository = scope.ServiceProvider.GetRequiredService <IDbRepository>(); var entity = await dbRepository.Get <DbUserToken>() .FirstOrDefaultAsync(x => x.UserId == userAuthResult.User.Id); if (entity == null) { entity = new DbUserToken(Guid.NewGuid()) { Username = userAuthResult.User.Username, Token = token, RefreshToken = refreshToken, TokenCreatedAt = tokenCreatedAt, Expires = tokenCreatedAt.AddMinutes(2), UserId = userAuthResult.User.Id }; await dbRepository.Add(entity); } else { entity.Token = token; entity.RefreshToken = refreshToken; entity.TokenCreatedAt = tokenCreatedAt; entity.Expires = tokenCreatedAt.AddMinutes(2); await dbRepository.Update(entity); } await dbRepository.SaveChangesAsync(); } return(new AuthenticationResponse { Token = token, RefreshToken = refreshToken, Expires = tokenCreatedAt.AddMinutes(2), Code = (int)ActionResult.Success, Message = ActionResult.Success.ToDescription() }); }
public async Task UpdateUserToken(UserToken token) { try { var dbModel = new DbUserToken(token); using (var connection = await GetConnectionAsync()) { await connection.ExecuteAsync(RegistrarQueries.UserTokenUpdate, dbModel); } } catch (Exception e) { if (e is RecordNotFoundException) { throw; } throw new Exception("Could not update refresh token"); } }