示例#1
0
        public async Task <AuthorizationTokenDTO> GenerateOAuthToken(ExternalAuthenticationDTO externalAuthDTO)
        {
            try
            {
                var    query = HttpUtility.ParseQueryString(externalAuthDTO.RequestQueryString);
                string code  = query["code"];
                string state = query["state"];

                if (string.IsNullOrEmpty(code) || string.IsNullOrEmpty(state))
                {
                    throw new ApplicationException("Code or State is empty.");
                }

                var oauthTokenData = await _asanaOAuth.GetOAuthTokenDataAsync(code);

                var userInfo            = oauthTokenData.Value <JObject>("data");
                var secondsToExpiration = oauthTokenData.Value <int>("expires_in");
                var expirationDate      = _asanaOAuth.CalculateExpirationTime(secondsToExpiration);

                return(new AuthorizationTokenDTO
                {
                    Token = oauthTokenData.ToString(),
                    ExternalAccountId = userInfo.Value <string>("id"),
                    ExternalAccountName = userInfo.Value <string>("name"),
                    ExternalStateToken = state,
                    ExpiresAt = expirationDate,
                    AdditionalAttributes = expirationDate.ToString("O")
                });
            }
            catch (Exception ex)
            {
                await _loggerService.ReportTerminalError(ex, externalAuthDTO.Fr8UserId);

                return(new AuthorizationTokenDTO()
                {
                    Error = "An error occurred while trying to authorize, please try again later."
                });
            }
        }