public async Task <UcExchangeRefreshTokenResponse> Handle(UcExchangeRefreshTokenRequest message)
        {
            var claimsPrincipal = this.jwtTokenValidator.GetPrincipalFromToken(message.AccessToken, message.SigningKey);
            var response        = new UcExchangeRefreshTokenResponse();

            if (claimsPrincipal != null)
            {
                var id   = claimsPrincipal.Claims.First(x => x.Type == "id");
                var user = await this.userRepository.GetSingleBySpec(x => x.IdentityId == id.Value);

                if (user.HasValidRefreshToken(message.RefreshToken))
                {
                    var jwtToken = await this.jwtFactory.GenerateEncodedToken(user.IdentityId, user.UserName);

                    var refreshToken = this.tokenFactory.GenerateToken();
                    user.RemoveRefreshToken(message.RefreshToken);
                    user.AddRefreshToken(refreshToken, user.Id);
                    await this.userRepository.Update(user);

                    response = new UcExchangeRefreshTokenResponse(jwtToken, refreshToken, true);
                    return(response);
                }
            }

            response.Message = "Invalid token";
            return(response);
        }
        public async Task <ActionResult> RefreshToken([FromBody] RefreshTokenRequest request)
        {
            if (!this.ModelState.IsValid)
            {
                return(this.BadRequest(this.ModelState));
            }

            var useCaseRequest = new UcExchangeRefreshTokenRequest(request.AccessToken, request.RefreshToken,
                                                                   this.authSettings.SecretKey);
            var result = await this.exchangeRefreshTokenUseCase.Handle(useCaseRequest);

            var contentResult = new JsonContentResult
            {
                StatusCode = (int)(result.Success ? HttpStatusCode.OK : HttpStatusCode.BadRequest),
                Content    = result.Success
                    ? JsonSerializer.SerializeObject(new TokensResponse(result.AccessToken, result.RefreshToken, null))
                    : JsonSerializer.SerializeObject(result.Message)
            };

            return(contentResult);
        }