Exemplo n.º 1
0
        public async Task <Configuration> BuildUserSessionConfiguration(CancellationToken cancellationToken = default)
        {
            var id      = _httpContextAccessor.HttpContext.GetAuthId();
            var session = await _cachingService.GetUserSession(id);

            if (session.HasValue)
            {
                return(new Configuration {
                    AccessToken = session.Value.AccessToken
                });
            }

            var email = _httpContextAccessor.HttpContext.GetAuthEmail();
            var user  = await _databaseContext.UserAccounts.AsNoTracking()
                        .FirstOrDefaultAsync(x => x.Email == email, cancellationToken);

            var finApiSession = await Login(user.Id.ToString(), user.Password, cancellationToken);

            var newSession = new FinApiSession(finApiSession._AccessToken, finApiSession.RefreshToken);
            await _cachingProvider.SetAsync(user.Id.ToString(), newSession,
                                            TimeSpan.FromHours(finApiSession.ExpiresIn));

            return(new Configuration {
                AccessToken = finApiSession._AccessToken
            });
        }
Exemplo n.º 2
0
        public override async Task <ActionResult <LoginAccountResponse> > HandleAsync(
            [FromBody] LoginAccountRequest request,
            CancellationToken cancellationToken = default)
        {
            var account = await _databaseContext.UserAccounts.SingleOrDefaultAsync(x =>
                                                                                   request.Email.ToLower() == x.Email.ToLower() &&
                                                                                   x.Password == request.Password, cancellationToken);

            if (account == null)
            {
                return(NotFound("Account not found"));
            }

            var finApiSession = await _finApiService.Login(account.Id.ToString(), request.Password, cancellationToken);

            var accessToken  = _tokenService.GenerateToken(account, finApiSession.RefreshToken);
            var refreshToken = _tokenService.GenerateRefreshToken();

            var session = new FinApiSession(finApiSession._AccessToken, finApiSession.RefreshToken);
            await _cachingService.SaveUserSession(account.Id, session, finApiSession.ExpiresIn);

            return(Ok(new LoginAccountResponse(accessToken, refreshToken)));
        }