Exemplo n.º 1
0
        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()
            });
        }
Exemplo n.º 3
0
 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");
     }
 }