Example #1
0
        public async Task <IActionResult> Refresh([FromBody] vmRefreshTokenRequest refreshTokenRequest)
        {
            var refreshTokenResponse = new SingleResponse <vmRefreshTokenResponse>();

            try
            {
                #region Get Principal Info from Token
                var principal = _tokenService.GetPrincipalFromExpiredToken(refreshTokenRequest.JwtToken,
                                                                           Encoding.UTF8.GetBytes(_configuration["JwtIssuerOptions:ServerSigningPassword"]));
                var userEmail = principal.Identity.Name; //this is mapped to the Name claim by default
                #endregion

                #region Get Claims Info from token principal
                //var name = principal.Claims.Where(c => c.Type == ClaimTypes.Name)
                //   .Select(c => c.Value).SingleOrDefault();
                //var role = principal.Claims.Where(c => c.Type == ClaimTypes.Role)
                //   .Select(c => c.Value).SingleOrDefault();
                //var email = principal.Claims.Where(c => c.Type == ClaimTypes.Email)
                //   .Select(c => c.Value).SingleOrDefault();
                #endregion

                var existedUserResponse = await _commonService.GetSingleUserForUpdateAsync(userEmail);

                if (existedUserResponse.Model == null || existedUserResponse.Model.RefreshToken != refreshTokenRequest.RefreshToken)
                {
                    throw new FamilyHubException(string.Format(CommonMessageDisplays.UserNotFoundMessage, userEmail));
                }

                refreshTokenResponse.Model = await _tokenService.AssignRefreshTokenAsync(existedUserResponse.Model);

                refreshTokenResponse.Message = ResponseMessageDisplay.Success;
            }
            catch (Exception ex)
            {
                refreshTokenResponse.SetError(ex);
            }

            return(refreshTokenResponse.ToHttpResponse());
        }