UrlDecode() private method

private UrlDecode ( string encodedValue ) : string
encodedValue string
return string
        /// <summary>
        /// Gets Gmail request Token.
        /// </summary>
        /// <param name="callback">OAuth callback Url.</param>
        /// <exception cref="ArgumentNullException">Is raised when <b>callback</b> is null reference.</exception>
        /// <exception cref="InvalidOperationException">Is raised when this method is called in invalid state.</exception>
        public void GetRequestToken(string callback)
        {
            if (callback == null)
            {
                throw new ArgumentNullException("callback");
            }
            if (!string.IsNullOrEmpty(m_RequestToken))
            {
                throw new InvalidOperationException("Invalid state, you have already called this 'GetRequestToken' method.");
            }

            // For more info see: http://googlecodesamples.com/oauth_playground/

            string timestamp = GenerateTimeStamp();
            string nonce     = GenerateNonce();

            string url    = "https://www.google.com/accounts/OAuthGetRequestToken?scope=" + UrlEncode(m_Scope);
            string sigUrl = "https://www.google.com/accounts/OAuthGetRequestToken";

            // Build signature base.
            StringBuilder xxx = new StringBuilder();

            xxx.Append("oauth_callback=" + UrlEncode(callback));
            xxx.Append("&oauth_consumer_key=" + UrlEncode(m_ConsumerKey));
            xxx.Append("&oauth_nonce=" + UrlEncode(nonce));
            xxx.Append("&oauth_signature_method=" + UrlEncode("HMAC-SHA1"));
            xxx.Append("&oauth_timestamp=" + UrlEncode(timestamp));
            xxx.Append("&oauth_version=" + UrlEncode("1.0"));
            xxx.Append("&scope=" + UrlEncode(m_Scope));
            string signatureBase = "GET" + "&" + UrlEncode(sigUrl) + "&" + UrlEncode(xxx.ToString());

            // Calculate signature.
            string signature = ComputeHmacSha1Signature(signatureBase, m_ConsumerSecret, null);

            //Build Authorization header.
            StringBuilder authHeader = new StringBuilder();

            //authHeader.Append("Authorization: OAuth ");
            authHeader.Append("oauth_version=\"1.0\", ");
            authHeader.Append("oauth_nonce=\"" + nonce + "\", ");
            authHeader.Append("oauth_timestamp=\"" + timestamp + "\", ");
            authHeader.Append("oauth_consumer_key=\"" + m_ConsumerKey + "\", ");
            authHeader.Append("oauth_callback=\"" + UrlEncode(callback) + "\", ");
            authHeader.Append("oauth_signature_method=\"HMAC-SHA1\", ");
            authHeader.Append("oauth_signature=\"" + UrlEncode(signature) + "\"");

            // Create web request and read response.
            Helpers.SendHttpRequest(url, "GET",
                                    contentString: null,
                                    additionalHeaders: new Dictionary <String, String>()
            {
                { "Authorization", "OAuth " + authHeader.ToString() }
            },
                                    handleResponseFunc: (WebResponse response) =>
            {
                using (StreamReader reader = new StreamReader(response.GetResponseStream()))
                {
                    foreach (string parameter in HttpUtility.UrlDecode(reader.ReadToEnd()).Split('&'))
                    {
                        string[] name_value = parameter.Split('=');
                        if (string.Equals(name_value[0], "oauth_token", Helpers.GetDefaultIgnoreCaseComparison()))
                        {
                            m_RequestToken = name_value[1];
                        }
                        else if (string.Equals(name_value[0], "oauth_token_secret", Helpers.GetDefaultIgnoreCaseComparison()))
                        {
                            m_RequestTokenSecret = name_value[1];
                        }
                    }
                }
            });
        }
Beispiel #2
0
        HttpListener SearchListener(Uri uri, out ListenerPrefix prefix)
        {
            prefix = null;
            if (uri == null)
            {
                return(null);
            }

            string host       = uri.Host;
            int    port       = uri.Port;
            string path       = WebUtility.UrlDecode(uri.AbsolutePath);
            string path_slash = path [path.Length - 1] == '/' ? path : path + "/";

            HttpListener best_match  = null;
            int          best_length = -1;

            if (host != null && host != "")
            {
                Hashtable p_ro = prefixes;
                foreach (ListenerPrefix p in p_ro.Keys)
                {
                    string ppath = p.Path;
                    if (ppath.Length < best_length)
                    {
                        continue;
                    }

                    if (p.Host != host || p.Port != port)
                    {
                        continue;
                    }

                    if (path.StartsWith(ppath) || path_slash.StartsWith(ppath))
                    {
                        best_length = ppath.Length;
                        best_match  = (HttpListener)p_ro [p];
                        prefix      = p;
                    }
                }
                if (best_length != -1)
                {
                    return(best_match);
                }
            }

            ArrayList list = unhandled;

            best_match = MatchFromList(host, path, list, out prefix);
            if (path != path_slash && best_match == null)
            {
                best_match = MatchFromList(host, path_slash, list, out prefix);
            }
            if (best_match != null)
            {
                return(best_match);
            }

            list       = all;
            best_match = MatchFromList(host, path, list, out prefix);
            if (path != path_slash && best_match == null)
            {
                best_match = MatchFromList(host, path_slash, list, out prefix);
            }
            if (best_match != null)
            {
                return(best_match);
            }

            return(null);
        }
        /// <summary>
        /// Gets user Gmail email address.
        /// </summary>
        /// <returns>Returns user Gmail email address.</returns>
        /// <exception cref="InvalidOperationException">Is raised when this method is called in invalid state.</exception>
        public string GetUserEmail()
        {
            if (string.IsNullOrEmpty(m_AccessToken))
            {
                throw new InvalidOperationException("Invalid state, you need to call 'GetAccessToken' method first.");
            }

            string url       = "https://www.googleapis.com/userinfo/email";
            string timestamp = GenerateTimeStamp();
            string nonce     = GenerateNonce();

            // Build signature base.
            StringBuilder xxx = new StringBuilder();

            xxx.Append("oauth_consumer_key=" + UrlEncode(m_ConsumerKey));
            xxx.Append("&oauth_nonce=" + UrlEncode(nonce));
            xxx.Append("&oauth_signature_method=" + UrlEncode("HMAC-SHA1"));
            xxx.Append("&oauth_timestamp=" + UrlEncode(timestamp));
            xxx.Append("&oauth_token=" + UrlEncode(m_AccessToken));
            xxx.Append("&oauth_version=" + UrlEncode("1.0"));
            string signatureBase = "GET" + "&" + UrlEncode(url) + "&" + UrlEncode(xxx.ToString());

            // Calculate signature.
            string signature = ComputeHmacSha1Signature(signatureBase, m_ConsumerSecret, m_AccessTokenSecret);

            //Build Authorization header.
            StringBuilder authHeader = new StringBuilder();

            //authHeader.Append("Authorization: OAuth ");
            authHeader.Append("oauth_version=\"1.0\", ");
            authHeader.Append("oauth_nonce=\"" + nonce + "\", ");
            authHeader.Append("oauth_timestamp=\"" + timestamp + "\", ");
            authHeader.Append("oauth_consumer_key=\"" + m_ConsumerKey + "\", ");
            authHeader.Append("oauth_token=\"" + UrlEncode(m_AccessToken) + "\", ");
            authHeader.Append("oauth_signature_method=\"HMAC-SHA1\", ");
            authHeader.Append("oauth_signature=\"" + UrlEncode(signature) + "\"");

            // Create web request and read response.
            Helpers.SendHttpRequest(url, "GET",
                                    contentString: null,
                                    additionalHeaders: new Dictionary <String, String>()
            {
                { "Authorization", "OAuth " + authHeader.ToString() }
            },
                                    handleResponseFunc: (WebResponse response) =>
            {
                using (StreamReader reader = new StreamReader(response.GetResponseStream()))
                {
                    foreach (string parameter in HttpUtility.UrlDecode(reader.ReadToEnd()).Split('&'))
                    {
                        string[] name_value = parameter.Split('=');
                        if (string.Equals(name_value[0], "email", Helpers.GetDefaultIgnoreCaseComparison()))
                        {
                            m_Email = name_value[1];
                        }
                    }
                }
            });

            return(m_Email);
        }
Beispiel #4
0
        private HttpListener?SearchListener(Uri?uri, out ListenerPrefix?prefix)
        {
            prefix = null;
            if (uri == null)
            {
                return(null);
            }

            string host      = uri.Host;
            int    port      = uri.Port;
            string path      = WebUtility.UrlDecode(uri.AbsolutePath);
            string pathSlash = path.EndsWith('/') ? path : path + "/";

            HttpListener?bestMatch  = null;
            int          bestLength = -1;

            if (host != null && host != "")
            {
                Dictionary <ListenerPrefix, HttpListener> localPrefixes = _prefixes;
                foreach (ListenerPrefix p in localPrefixes.Keys)
                {
                    string ppath = p.Path !;
                    if (ppath.Length < bestLength)
                    {
                        continue;
                    }

                    if (p.Host != host || p.Port != port)
                    {
                        continue;
                    }

                    if (path.StartsWith(ppath, StringComparison.Ordinal) || pathSlash.StartsWith(ppath, StringComparison.Ordinal))
                    {
                        bestLength = ppath.Length;
                        bestMatch  = localPrefixes[p];
                        prefix     = p;
                    }
                }
                if (bestLength != -1)
                {
                    return(bestMatch);
                }
            }

            List <ListenerPrefix>?list = _unhandledPrefixes;

            bestMatch = MatchFromList(host, path, list, out prefix);

            if (path != pathSlash && bestMatch == null)
            {
                bestMatch = MatchFromList(host, pathSlash, list, out prefix);
            }

            if (bestMatch != null)
            {
                return(bestMatch);
            }

            list      = _allPrefixes;
            bestMatch = MatchFromList(host, path, list, out prefix);

            if (path != pathSlash && bestMatch == null)
            {
                bestMatch = MatchFromList(host, pathSlash, list, out prefix);
            }

            if (bestMatch != null)
            {
                return(bestMatch);
            }

            return(null);
        }