예제 #1
0
        public async Task <string> GetAccessToken(string refreshToken)
        {
            string token = string.Empty;

            Models.OAuthResponse.RootObject oAuthResponse = null;

            if (!string.IsNullOrEmpty(refreshToken))
            {
                //Console.WriteLine($"Refreshing Token {refreshToken}");
                // Try refreshing the old token
                oAuthResponse = await OAuthToken(refreshToken);

                //Console.WriteLine($"OAuthToken ---> {oAuthResponse.data.access_token} {oAuthResponse.data.expires_in} {oAuthResponse.data.refresh_token} {oAuthResponse.data.token_type}");
            }

            if (oAuthResponse == null || oAuthResponse.data == null || string.IsNullOrEmpty(oAuthResponse.data.access_token))
            {
                //Console.WriteLine("Getting Token");
                // Get a new token
                oAuthResponse = await OAuthLogin();

                //Console.WriteLine($"OAuthLogin ---> {oAuthResponse.data.access_token} {oAuthResponse.data.expires_in} {oAuthResponse.data.refresh_token} {oAuthResponse.data.token_type}");
            }

            if (oAuthResponse != null && oAuthResponse.data != null && !string.IsNullOrEmpty(oAuthResponse.data.access_token))
            {
                token = $"{oAuthResponse.data.token_type} {oAuthResponse.data.access_token}";
                //Console.WriteLine($"GetAccessToken Success. {oAuthResponse.data.token_type} {oAuthResponse.data.expires_in}");
                FlowFinanceToken flowFinanceToken = new FlowFinanceToken
                {
                    AccessToken  = token,
                    ExpiresAt    = DateTime.Now.AddSeconds(oAuthResponse.data.expires_in),
                    RefreshToken = oAuthResponse.data.refresh_token
                };

                await _paymentRequestRepository.SaveToken(flowFinanceToken);
            }
            else
            {
                Console.WriteLine("GetAccessToken Failure.");
                //throw new Exception("GetAccessToken Failure.");
            }

            return(token);
        }
예제 #2
0
        /// <summary>
        /// Refresh an expired access-token with a refresh-token.
        /// Optionally, you may include the header param account-id in which case account-specific tokens will be generated.
        /// Note that refresh-token are NOT re-generated.
        /// POST /api/v1/oauth/token
        /// </summary>
        /// <returns></returns>
        public async Task <Models.OAuthResponse.RootObject> OAuthToken(string refreshToken)
        {
            //Console.WriteLine("--] OAuthToken [--");

            Models.OAuthResponse.RootObject oAuthResponse = null;
            Models.OAuthRequest.RootObject  oAuthRequest  = new Models.OAuthRequest.RootObject
            {
                refresh_token = refreshToken
            };

            string jsonSerializedOAuthRequest = JsonConvert.SerializeObject(oAuthRequest);

            try
            {
                var request = new HttpRequestMessage
                {
                    Method     = HttpMethod.Post,
                    RequestUri = new Uri($"{flowFinaceApiUrl}{FlowFinanceConstants.OAuthToken}"),
                    Content    = new StringContent(jsonSerializedOAuthRequest, Encoding.UTF8, FlowFinanceConstants.APPLICATION_JSON)
                };

                // Vtex headers
                request.Headers.Add(FlowFinanceConstants.USE_HTTPS_HEADER_NAME, "true");
                //request.Headers.Add(PROXY_TO_HEADER_NAME, flowFinaceApiUrlSecure);
                request.Headers.Add(FlowFinanceConstants.PROXY_AUTHORIZATION_HEADER_NAME, _httpContextAccessor.HttpContext.Request.Headers[FlowFinanceConstants.HEADER_VTEX_CREDENTIAL].ToString());

                HttpClient          client          = _clientFactory.CreateClient();
                HttpResponseMessage responseMessage = await client.SendAsync(request);

                string responseContent = await responseMessage.Content.ReadAsStringAsync();

                //Console.WriteLine($"OAuthLogin Response Content {responseContent}");
                oAuthResponse = JsonConvert.DeserializeObject <Models.OAuthResponse.RootObject>(responseContent);
            }
            catch (Exception ex)
            {
                Console.WriteLine($"OAuthLogin Error: {ex.Message} InnerException: {ex.InnerException} StackTrace: {ex.StackTrace}");
            }

            return(oAuthResponse);
        }
예제 #3
0
        /// <summary>
        /// Generate token pair given username and password in the 'Authorization' header
        /// POST /api/v1/oauth/login
        /// </summary>
        /// <returns></returns>
        public async Task <Models.OAuthResponse.RootObject> OAuthLogin()
        {
            //Console.WriteLine("--] OAuthLogin [--");

            Models.OAuthResponse.RootObject oAuthResponse = null;

            try
            {
                var request = new HttpRequestMessage
                {
                    Method     = HttpMethod.Post,
                    RequestUri = new Uri($"{flowFinaceApiUrl}{FlowFinanceConstants.OAuthLogin}"),
                };

                // Flow Headers
                request.Headers.Add(FlowFinanceConstants.AUTHORIZATION_HEADER_NAME, "Basic " + Convert.ToBase64String(Encoding.ASCII.GetBytes($"{client_id}:{client_secret}")));

                // Vtex headers
                request.Headers.Add(FlowFinanceConstants.USE_HTTPS_HEADER_NAME, "true");
                //request.Headers.Add(PROXY_TO_HEADER_NAME, flowFinaceApiUrlSecure);
                request.Headers.Add(FlowFinanceConstants.PROXY_AUTHORIZATION_HEADER_NAME, _httpContextAccessor.HttpContext.Request.Headers[FlowFinanceConstants.HEADER_VTEX_CREDENTIAL].ToString());

                HttpClient          client          = _clientFactory.CreateClient();
                HttpResponseMessage responseMessage = await client.SendAsync(request);

                string responseContent = await responseMessage.Content.ReadAsStringAsync();

                //Console.WriteLine($"OAuthLogin Response Content {responseContent}");
                oAuthResponse = JsonConvert.DeserializeObject <Models.OAuthResponse.RootObject>(responseContent);
            }
            catch (Exception ex)
            {
                Console.WriteLine($"OAuthLogin Error: {ex.Message} InnerException: {ex.InnerException} StackTrace: {ex.StackTrace}");
            }

            return(oAuthResponse);
        }