示例#1
0
        /// <summary>
        /// Refreshes the token asynchronous.
        /// </summary>
        /// <param name="clientSettings">ApiClientSettings needed for creating a proper refresh token HTTP post call.</param>
        /// <returns>Returns OAuth2AccessToken</returns>
        public static async Task <OAuth2AccessToken> RefreshTokenAsync(ApiClientSettings clientSettings)
        {
            var postUrl = DigiKeyUriConstants.TokenEndpoint;

            var content = new FormUrlEncodedContent(new[]
            {
                new KeyValuePair <string, string>(OAuth2Constants.GrantType, OAuth2Constants.GrantTypes.RefreshToken),
                new KeyValuePair <string, string>(OAuth2Constants.ClientId, clientSettings.ClientId),
                new KeyValuePair <string, string>(OAuth2Constants.ClientSecret, clientSettings.ClientSecret),
                new KeyValuePair <string, string>(OAuth2Constants.GrantTypes.RefreshToken, clientSettings.RefreshToken),
            });

            var httpClient = new HttpClient();

            var response = await httpClient.PostAsync(postUrl, content);

            var responseString = await response.Content.ReadAsStringAsync();

            var oAuth2AccessTokenResponse = OAuth2Helpers.ParseOAuth2AccessTokenResponse(responseString);

            _log.DebugFormat("RefreshToken: " + oAuth2AccessTokenResponse);

            clientSettings.UpdateAndSave(oAuth2AccessTokenResponse);

            return(oAuth2AccessTokenResponse);
        }
示例#2
0
        /// <summary>
        /// Refreshes the token asynchronous.
        /// </summary>
        /// <param name="clientSettings">ApiClientSettings needed for creating a proper refresh token HTTP post call.</param>
        /// <returns>Returns OAuth2AccessToken</returns>
        public static async Task <OAuth2AccessToken> RefreshTokenAsync(ApiClientSettings clientSettings)
        {
            var postUrl = DigiKeyUriConstants.TokenEndpoint;

            var content = new FormUrlEncodedContent(new[]
            {
                new KeyValuePair <string, string>(OAuth2Constants.GrantType, OAuth2Constants.GrantTypes.RefreshToken),
                new KeyValuePair <string, string>(OAuth2Constants.GrantTypes.RefreshToken, clientSettings.RefreshToken),
            });

            var httpClient = new HttpClient();

            var clientIdConcatSecret = OAuth2Helpers.Base64Encode(clientSettings.ClientId + ":" + clientSettings.ClientSecret);

            httpClient.DefaultRequestHeaders.Authorization =
                new AuthenticationHeaderValue("Basic", clientIdConcatSecret);

            var response = await httpClient.PostAsync(postUrl, content);

            var responseString = await response.Content.ReadAsStringAsync();

            var oAuth2AccessTokenResponse = OAuth2Helpers.ParseOAuth2AccessTokenResponse(responseString);



            clientSettings.UpdateAndSave(oAuth2AccessTokenResponse);

            return(oAuth2AccessTokenResponse);
        }
示例#3
0
        /// <summary>
        ///     OAuth2 code flow authorization with apiclient.config values
        /// </summary>
        private async void Authorize()
        {
            // read clientSettings values from apiclient.config
            _clientSettings = ApiClientSettings.CreateFromConfigFile();
            Console.WriteLine(_clientSettings.ToString());

            // start up a HttpListener for the callback(RedirectUri) from the OAuth2 server
            var httpListener = new HttpListener();

            httpListener.Prefixes.Add(_clientSettings.RedirectUri.EnsureTrailingSlash());
            Console.WriteLine($"listening to {_clientSettings.RedirectUri}");
            httpListener.Start();

            // Initialize our OAuth2 service
            var oAuth2Service = new ApiClient.OAuth2.OAuth2Service(_clientSettings);
            var scopes        = "";

            // create Authorize url and send call it thru Process.Start
            var authUrl = oAuth2Service.GenerateAuthUrl(scopes);

            Process.Start(authUrl);

            // get the URL returned from the callback(RedirectUri)
            var context = await httpListener.GetContextAsync();

            // Done with the callback, so stop the HttpListener
            httpListener.Stop();

            // exact the query parameters from the returned URL
            var queryString = context.Request.Url.Query;
            var queryColl   = HttpUtility.ParseQueryString(queryString);

            // Grab the needed query parameter code from the query collection
            var code = queryColl["code"];

            Console.WriteLine($"Using code {code}");

            // Pass the returned code value to finish the OAuth2 authorization
            var result = await oAuth2Service.FinishAuthorization(code);

            // Check if you got an error during finishing the OAuth2 authorization
            if (result.IsError)
            {
                Console.WriteLine("\n\nError            : {0}", result.Error);
                Console.WriteLine("\n\nError.Description: {0}", result.ErrorDescription);
            }
            else
            {
                // Display the Access Token and Refresh Token to the Console.
                Console.WriteLine();
                Console.WriteLine("Access token : {0}", result.AccessToken);
                Console.WriteLine("Refresh token: {0}", result.RefreshToken);
                Console.WriteLine("Expires in   : {0}", result.ExpiresIn);

                _clientSettings.UpdateAndSave(result);
                Console.WriteLine("After a good refresh");
                Console.WriteLine(_clientSettings.ToString());
            }
        }
 public static SettingsViewModel Create(ApiClientSettings settings)
 {
     return(new SettingsViewModel()
     {
         ClientId = settings.ClientId,
         ClientSecret = settings.ClientSecret,
         RedirectUri = settings.RedirectUri,
     });
 }
 public void SetUp()
 {
     _settings = new ApiClientSettings
     {
         BaseUrl = "http://someurl.com"
     };
     _httpClientFactory  = Substitute.For <IHttpClientFactory>();
     _httpMessageHandler = new StubHttpMessageHandler();
     _httpClientFactory.CreateClient(Arg.Any <string>())
     .Returns(new HttpClient(_httpMessageHandler));
     _target = new ApiClient(_settings, _httpClientFactory);
 }
示例#6
0
        static void Main(string[] args)

        {
            var settings = ApiClientSettings.CreateFromConfigFile();
            //UsingDigiKeyApiClient.Models.DigiKeyRoot Digikey = null;
            //using (StreamReader sr = new StreamReader("DigiKeyData.json"))
            //{
            //    string json = sr.ReadToEnd();
            //    Digikey = JsonConvert.DeserializeObject<Models.DigiKeyRoot>(json);
            //}
            //UsingDigiKeyApiClient.Models.MouserRoot mouser = null;
            //using (StreamReader sr = new StreamReader("MouserData.json"))
            //{
            //    string json = sr.ReadToEnd();
            //    mouser = JsonConvert.DeserializeObject<Models.MouserRoot>(json);
            //}
        }
示例#7
0
        private async Task CallKeywordSearch()
        {
            var settings = ApiClientSettings.CreateFromConfigFile();

            _log.DebugFormat(settings.ToString());
            Console.WriteLine(settings.ToString());
            try
            {
                if (settings.ExpirationDateTime < DateTime.Now)
                {
                    // Let's refresh the token
                    var oAuth2Service     = new OAuth2Service(settings);
                    var oAuth2AccessToken = await oAuth2Service.RefreshTokenAsync();

                    if (oAuth2AccessToken.IsError)
                    {
                        // Current Refresh token is invalid or expired
                        _log.DebugFormat("Current Refresh token is invalid or expired ");
                        Console.WriteLine("Current Refresh token is invalid or expired ");
                        return;
                    }

                    settings.UpdateAndSave(oAuth2AccessToken);

                    _log.DebugFormat("After call to refresh");
                    _log.DebugFormat(settings.ToString());

                    Console.WriteLine("After call to refresh");
                    Console.WriteLine(settings.ToString());
                }

                var client   = new ApiClientService(settings);
                var response = await client.KeywordSearch("P5555-ND");

                // In order to pretty print the json object we need to do the following
                var jsonFormatted = JToken.Parse(response).ToString(Formatting.Indented);

                Console.WriteLine($"Reponse is {jsonFormatted} ");
            }
            catch (System.Exception e)
            {
                Console.WriteLine(e);
                throw;
            }
        }
示例#8
0
 public AppApiClient(HttpClient httpClient, ApiClientSettings apiClientSettings, IMemoryCache memoryCache = null, ILogger <AppApiClient> logger = null)
     : base(httpClient, apiClientSettings, memoryCache, logger)
 {
 }
示例#9
0
 public ApiClientBase(HttpClient client, ApiClientSettings apiClientSettings, IMemoryCache memoryCache = null, ILogger logger = null)
     : base(client, apiClientSettings, memoryCache, logger)
 {
     InitializeRepositories(client);
 }
示例#10
0
        public async Task <string> Get([FromQuery] string partId, [FromQuery] string quantity, [FromQuery] string currency)
        {
            // string apiToken = "41c44903-fdc0-417c-abb9-6c79bbad03f1";
            //partId =string.IsNullOrEmpty(partId)? "GRM21BR71C225KA12L" : partId;
            // string mouserUrl = "https://api.mouser.com/api/v1/search/partnumber";
            // MouserRoot restResponse = new MouserRoot();
            // HttpClient client = new HttpClient();
            // Models.ValueRow pResponse = new Models.ValueRow();
            //// client.DefaultRequestHeaders.Add("Content-Type", "application/json");
            // try
            // {
            //     pResponse.PartNumber = partId;
            //     pResponse.Quantity =Convert.ToInt32( string.IsNullOrEmpty(quantity) ? "1" : quantity);
            //     Models.Rootobject bodyParam = new Models.Rootobject() { SearchByPartRequest = new Models.Searchbypartrequest() { mouserPartNumber = partId } };
            //     string json = JsonConvert.SerializeObject(bodyParam);
            //     mouserUrl += "?apiKey=";
            //     mouserUrl += apiToken;
            //     HttpRequestMessage mouserRequest = new HttpRequestMessage()
            //     {
            //         Method = HttpMethod.Post,
            //         RequestUri = new Uri(mouserUrl),
            //         Content = new StringContent(json, Encoding.UTF8, "application/json")

            //     };

            //     HttpResponseMessage response = await client.SendAsync(mouserRequest).ConfigureAwait(false);
            //     response.EnsureSuccessStatusCode();
            //     string responseBody = await response.Content.ReadAsStringAsync();

            //     restResponse = JsonConvert.DeserializeObject<MouserRoot>(responseBody);
            //     if (restResponse.SearchResults.Parts.Count() > 0)
            //     {

            //         pResponse.Manufacturer = restResponse.SearchResults.Parts[0].Manufacturer;
            //         pResponse.Mouser = new Models.Mouser() { LeadTime = restResponse.SearchResults.Parts[0].LeadTime, AvailableQuantity = restResponse.SearchResults.Parts[0].Availability ,PriceBreakups = new List<Models.PriceBreakUp>()};
            //         if (restResponse.SearchResults.Parts[0].PriceBreaks.Count() > 0)
            //         {
            //             for (int i = 0; i < restResponse.SearchResults.Parts[0].PriceBreaks.Count(); i++)
            //             {
            //                 pResponse.Mouser.PriceBreakups.Add(new Models.PriceBreakUp() { Price = restResponse.SearchResults.Parts[0].PriceBreaks[i].Price, Quantity = restResponse.SearchResults.Parts[0].PriceBreaks[i].Quantity.ToString() });
            //             }
            //         }
            //     }
            // }
            // catch (HttpRequestException e)
            // {
            //     throw;
            // }

            // return pResponse;



            var    settings      = ApiClientSettings.CreateFromConfigFile();
            string jsonFormatted = "";

            try
            {
                if (settings.ExpirationDateTime < DateTime.Now)
                {
                    // Let's refresh the token
                    var oAuth2Service     = new OAuth2Service(settings);
                    var oAuth2AccessToken = oAuth2Service.RefreshTokenAsync().Result;
                    if (oAuth2AccessToken.IsError)
                    {
                        // Current Refresh token is invalid or expired

                        return(null);
                    }

                    settings.UpdateAndSave(oAuth2AccessToken);


                    Console.WriteLine("After call to refresh");
                    Console.WriteLine(settings.ToString());
                }

                var client   = new ApiClientService(settings);
                var response = client.KeywordSearch("LM2904M").Result;

                // In order to pretty print the json object we need to do the following
                jsonFormatted = JToken.Parse(response).ToString(Formatting.Indented);
            }
            catch (System.Exception e)
            {
                Console.WriteLine(e);
                throw;
            }

            return(jsonFormatted);
        }
示例#11
0
 public static void UpdateOAuth2Service(ApiClientSettings clientSettings)
 {
     _oAuth2Service = new OAuth2Service(clientSettings);
 }
示例#12
0
 public HomeController()
 {
     // Load OAuth2 settings from config file apiclient.config
     ClientSettings = ApiClientSettings.CreateFromConfigFile();
 }
示例#13
0
 public OAuth2Service(ApiClientSettings clientSettings)
 {
     ClientSettings = clientSettings;
 }
示例#14
0
 public QDotAPIClient(IOptions <ApiClientSettings> optionsAccessor)
 {
     _apiClientSettings = optionsAccessor.Value;
 }