Exemple #1
0
        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>());
                }
            }
        }
Exemple #2
0
        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);
 }
Exemple #4
0
        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);
        }