public async Task <List <Icon> > SearchForIcons(string term) { OAuth.OAuthRequest request = new OAuth.OAuthRequest(); request.ConsumerKey = _settings.Value.TheNounProject_ConsumerKey; request.ConsumerSecret = _settings.Value.TheNounProject_ConsumerKeySecret; request.Method = "GET"; request.SignatureMethod = OAuth.OAuthSignatureMethod.HmacSha1; request.Version = "1.0"; request.RequestUrl = _apiBaseUrl + term; string authHeader = request.GetAuthorizationHeader(); using (var http = new HttpClient()) { http.DefaultRequestHeaders.Add("Authorization", authHeader); var httpResponse = await http.GetAsync(request.RequestUrl); if (httpResponse.IsSuccessStatusCode) { var jsonString = await httpResponse.Content.ReadAsStringAsync(); var result = JsonConvert.DeserializeObject <NounProjectIconSearchResult>(jsonString); return(result.Icons.Select(i => i.ToIcon()).ToList()); } else { return(new List <Icon>()); } } }
protected override void AddAuthentication(HttpRequestMessage message, string url, string method = "GET") { var request = new OAuth.OAuthRequest { ConsumerKey = ConsumerKey, ConsumerSecret = ConsumerSecret, Token = Token, TokenSecret = TokenSecret, Type = OAuth.OAuthRequestType.ProtectedResource, SignatureMethod = OAuth.OAuthSignatureMethod.HmacSha1, RequestUrl = url, Version = "1.0", Method = method }; var auth = request.GetAuthorizationHeader().Replace("OAuth ", ""); message.Headers.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("OAuth", auth); }
/** * Format and sign an OAuth / API request */ public string oAuthRequest(string url, List<OAuth.QueryParameter> args, string method) { OAuth.OAuthRequest oar = new OAuth.OAuthRequest(this.consumer, this.token, method, url, args); oar.sign_request("HMAC-SHA1", this.consumer, this.token); if (method == "GET") return http(oar.to_url(), "", method); else return http(oar.NormalizedUrl, oar.to_postdata(), method); }
private async Task <string> GetJSON(string route, Config.APITypes apiType) { var apiRoot = ""; switch (apiType) { case Config.APITypes.Version1: apiRoot = "gravityformsapi/"; break; case Config.APITypes.Version2Basic: apiRoot = ""; route = "wp-json/gf/v2/" + route; break; case Config.APITypes.Version2OAuth1: apiRoot = ""; route = "wp-json/gf/v2/" + route; break; case Config.APITypes.Version2OAuth2c: apiRoot = ""; route = "wp-json/gf/v2/" + route; break; } var requestUrl = config.RootURL + apiRoot + route; Log("Preparing web request"); var httpClient = new HttpClient(); httpClient.DefaultRequestHeaders.Accept.Clear(); httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); if (config.IgnoreCertificateErrors) { ServicePointManager.ServerCertificateValidationCallback += (sn, cert, chain, sslPolicyErrors) => true; } var req = new HttpRequestMessage(); req.Method = HttpMethod.Get; if (false) { req.Method = HttpMethod.Put; req.Content = new StringContent("{ 'is_read':1 }"); req.Content.Headers.Remove("Content-Type"); req.Content.Headers.Add("Content-Type", "application/json"); } switch (apiType) { case Config.APITypes.Version1: Log("Preparing v1 credentials:"); string publicKey = config.ConsumerKey; string privateKey = config.ConsumerSecret; string method = "GET"; string expires = GravityFormsV1Signer.UtcTimestamp(new TimeSpan(0, 1, 0)).ToString(); string stringToSign = string.Format("{0}:{1}:{2}:{3}", publicKey, method, route, expires); var sig = GravityFormsV1Signer.Sign(stringToSign, privateKey); Log("Signature:" + sig); var signedURL = requestUrl + "?api_key=" + publicKey + "&signature=" + sig + "&expires=" + expires; Log("URL:" + signedURL); req.RequestUri = new Uri(signedURL); break; case Config.APITypes.Version2Basic: Log("Preparing Basic credentials"); // The below didn't work on the first try but the below does, so stick with the below.. req.Headers.Remove("Authorization"); //var authHeader = c.GetAuthorizationHeader(); var authBasic = Convert.ToBase64String(Encoding.UTF8.GetBytes(config.ConsumerKey + ":" + config.ConsumerSecret)); req.Headers.Add("Authorization", "Basic " + authBasic); req.RequestUri = new Uri(requestUrl); break; case Config.APITypes.Version2OAuth1: Log("Preparing OAuth credentials"); OAuth.OAuthRequest c = OAuth.OAuthRequest.ForRequestToken(config.ConsumerKey, config.ConsumerSecret); c.RequestUrl = requestUrl; var oAuthParams = c.GetAuthorizationQuery(); Log("OAuth parameters:"); Log(oAuthParams); Log("Final URL:"); var authenticatedURL = requestUrl + "?" + oAuthParams; Log(authenticatedURL); req.RequestUri = new Uri(authenticatedURL); break; } //try { Log("Downloading " + route); var result = await httpClient.SendAsync(req); if (!result.IsSuccessStatusCode) { if (result.StatusCode == HttpStatusCode.NotFound) { // This is okay, it is likely just an entry that isn't there yet throw new PageNotFoundException(); } throw new Exception("HTTP error: " + result.StatusCode.ToString() + " : " + result.ReasonPhrase + "\n" + result.ToString()); } var jsonData = await result.Content.ReadAsStringAsync(); if (apiType == Config.APITypes.Version1) { // For V1 compatibility remove the envelope: jsonData = System.Text.RegularExpressions.Regex.Replace(jsonData, "^\\{\"status\":200,\"response\":", ""); jsonData = System.Text.RegularExpressions.Regex.Replace(jsonData, "\\}$", ""); } return(jsonData); Log("Downloaded"); Log(jsonData); } /*catch (Exception ex) * { * Log("Exception occurred:"); * Log(ex.Message); * Log(ex.StackTrace); * }*/ Log("Done"); return(null); }