/// <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]; } } } }); }
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); }
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); }