public async Task <HttpResponseMessage> ProcessCallback() { var requestParams = Request.GetQueryNameValuePairs(); var oauthToken = requestParams.Where(p => p.Key.Equals(TwitterOauthUtils.OAuthTokenKey)).FirstOrDefault(); var oauthTokenVerifier = requestParams.Where(p => p.Key.Equals(TwitterOauthUtils.OAuthVerifierKey)).FirstOrDefault(); // exchange the oauth token and oauth token verifier for a user access token var userAccessInfo = await AccessTokenExchange(oauthToken.Value, oauthTokenVerifier.Value); // compute a user access cookie and send the user back to the home page. var cookieValue = TwitterOauthUtils.ConstructUserAccessCookieValue(userAccessInfo); UserAuthInfo userAuthInfo; UserInfo userInfo; TwitterOauthUtils.ParseUserAccessCookie(cookieValue, out userInfo, out userAuthInfo); Program.SetUserAuthInfo(userAuthInfo); CookieHeaderValue userAccessCookie = new CookieHeaderValue(UserAccessCookieName, cookieValue); userAccessCookie.Path = "/"; var response = Request.CreateResponse(HttpStatusCode.Moved); response.Headers.AddCookies(new CookieHeaderValue[] { userAccessCookie }); response.Headers.Location = new System.Uri(AppHomeRoute); return(response); }
public void TestMethod2() { var requestParams = new Dictionary <string, string>() { { "status", "hello world" } }; var postParams = new Dictionary <string, string>(); var oauthParams = new Dictionary <string, string>() { { TwitterOauthUtils.OAuthConsumerKeyKey, "IPR1vxhyueAMP5pmnLfWhpmC1" }, { TwitterOauthUtils.OAuthTokenKey, "4326182834-ipjXPMLhihl567i9ytVxPdK9Ke82MPYAiIrE4tp" }, { TwitterOauthUtils.OAuthNonceKey, "42539c9ff380a4042312cd1a10725d3c" }, { TwitterOauthUtils.OAuthSignatureMethodKey, TwitterOauthUtils.OAuthSignatureMethod }, { TwitterOauthUtils.OAuthTimestampKey, "1448755907" }, { TwitterOauthUtils.OAuthVersionKey, TwitterOauthUtils.OAuthVersion } }; var pe4 = TwitterOauthUtils.GenerateParameterString(requestParams, postParams, oauthParams); var signature = TwitterOauthUtils.CreateSignature("POST", "https://api.twitter.com/1.1/statuses/update.json", requestParams, postParams, oauthParams, "bGCTVpz3olFyjoOJP72vEVael345U6LOVBfQAqKQPoEZOIlJre", "IcMDfPnZJBcfCipr139RzlmXWxlWkTXJmA8i9Ezg7JDu2"); Assert.AreEqual(TwitterOauthUtils.PercentEncode(signature), "vQgryM6FeUwMrdc4xCzCGlZYLHQ%3D"); }
public void TestMethod1() { var timeStamp = TwitterOauthUtils.UnixTimeStamp(); var nonce = TwitterOauthUtils.GenerateNonce(); var noEncode = "0123ABCabc.-_~"; var pe1 = TwitterOauthUtils.PercentEncode(noEncode); Assert.AreEqual(noEncode, pe1); var isEncode = "0123 abcd"; var pe2 = TwitterOauthUtils.PercentEncode(isEncode); Assert.AreEqual(pe2, "0123%20abcd"); var hexEncode = "/0123 abcd/"; var pe3 = TwitterOauthUtils.PercentEncode(hexEncode); Assert.AreEqual(pe3, "%2F0123%20abcd%2F"); // using test parameters from https://dev.twitter.com/oauth/overview/creating-signatures var requestParams = new Dictionary <string, string>() { { "include_entities", "true" } }; var postParams = new Dictionary <string, string>() { { "status", "Hello Ladies + Gentlemen, a signed OAuth request!" } }; var oauthParams = new Dictionary <string, string>() { { TwitterOauthUtils.OAuthConsumerKeyKey, "xvz1evFS4wEEPTGEFPHBog" }, { TwitterOauthUtils.OAuthTokenKey, "370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb" }, { TwitterOauthUtils.OAuthNonceKey, "kYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg" }, { TwitterOauthUtils.OAuthSignatureMethodKey, TwitterOauthUtils.OAuthSignatureMethod }, { TwitterOauthUtils.OAuthTimestampKey, "1318622958" }, { TwitterOauthUtils.OAuthVersionKey, TwitterOauthUtils.OAuthVersion } }; var pe4 = TwitterOauthUtils.GenerateParameterString(requestParams, postParams, oauthParams); Assert.AreEqual(pe4, "include_entities=true&oauth_consumer_key=xvz1evFS4wEEPTGEFPHBog&oauth_nonce=kYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1318622958&oauth_token=370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb&oauth_version=1.0&status=Hello%20Ladies%20%2B%20Gentlemen%2C%20a%20signed%20OAuth%20request%21"); var signature = TwitterOauthUtils.CreateSignature("POST", "https://api.twitter.com/1/statuses/update.json", requestParams, postParams, oauthParams, "kAcSOqF21Fu85e7zjz7ZN2U4ZRhfV3WpwPAoE3Z7kBw", "LswwdoUaIvS8ltyTt5jkRh4J50vUPVVHtR2YPi5kE"); Assert.AreEqual(signature, "tnnArxj06cWHq44gCs1OSKk/jLY="); }
public Task <HttpResponseMessage> Get() { UserInfo userInfo = null; UserAuthInfo userAuthInfo = null; var cookie = Request.Headers.GetCookies(TwitterSignInController.UserAccessCookieName).FirstOrDefault(); if (cookie != null) { TwitterOauthUtils.ParseUserAccessCookie(cookie[TwitterSignInController.UserAccessCookieName].Value, out userInfo, out userAuthInfo); } var response = Request.CreateResponse(HttpStatusCode.OK); if (userInfo != null) { response.Content = new StringContent( JsonConvert.SerializeObject(userInfo), Encoding.UTF8, "application/json"); } return(Task.FromResult(response)); }
public async Task <string> AccessTokenExchange(string oauthToken, string oauthTokenVerifier) { var httpMethod = "POST"; var baseUrl = AccessTokenUrl; var twitterOauthParams = new Dictionary <string, string>() { { TwitterOauthUtils.OAuthConsumerKeyKey, consumer_key }, { TwitterOauthUtils.OAuthNonceKey, TwitterOauthUtils.GenerateNonce() }, { TwitterOauthUtils.OAuthSignatureMethodKey, TwitterOauthUtils.OAuthSignatureMethod }, { TwitterOauthUtils.OAuthTimestampKey, TwitterOauthUtils.UnixTimeStamp() }, { TwitterOauthUtils.OAuthTokenKey, oauthToken }, { TwitterOauthUtils.OAuthVersionKey, TwitterOauthUtils.OAuthVersion } }; var twitterQueryParams = new Dictionary <string, string>(); var twitterPostParams = new Dictionary <string, string>(); twitterPostParams.Add(TwitterOauthUtils.OAuthVerifierKey, oauthTokenVerifier); var oauthSignature = TwitterOauthUtils.CreateSignature(httpMethod, baseUrl, twitterQueryParams, twitterPostParams, twitterOauthParams, consumer_secret, null); HttpRequestMessage message = new HttpRequestMessage(HttpMethod.Post, baseUrl); message.Headers.Add("Accept", "*/*"); message.Headers.Add("User-Agent", "weatherama-client-1.0"); message.Headers.Add("Host", "api.twitter.com"); var oauthParamsList = new List <string>(); foreach (var kvp in twitterOauthParams) { oauthParamsList.Add(string.Format("{0}=\"{1}\"", kvp.Key, TwitterOauthUtils.PercentEncode(kvp.Value))); } oauthParamsList.Add(string.Format("{0}=\"{1}\"", TwitterOauthUtils.OAuthSignatureKey, TwitterOauthUtils.PercentEncode(oauthSignature))); var oauthHeader = string.Format("OAuth {0}", string.Join(",", oauthParamsList)); message.Headers.Add("Authorization", oauthHeader); var postBodyParamsList = new List <string>(); foreach (var kvp in twitterPostParams) { postBodyParamsList.Add(string.Format("{0}={1}", kvp.Key, TwitterOauthUtils.PercentEncode(kvp.Value))); } var postBody = string.Join(",", postBodyParamsList); message.Content = new StringContent(postBody, Encoding.UTF8, "application/x-www-form-urlencoded"); HttpClient httpClient = new HttpClient(); var responseMessage = await httpClient.SendAsync(message); string responseContent = string.Empty; if (responseMessage.StatusCode == HttpStatusCode.OK && responseMessage.Content != null) { responseContent = await responseMessage.Content.ReadAsStringAsync(); } return(responseContent); }
public async Task <HttpResponseMessage> InitiateSignIn() { var httpMethod = "POST"; var baseUrl = RequestTokenUrl; var callbackUrl = AppCallbackUrl; var twitterOauthParams = new Dictionary <string, string>() { { TwitterOauthUtils.OAuthCallbackKey, callbackUrl }, { TwitterOauthUtils.OAuthConsumerKeyKey, consumer_key }, { TwitterOauthUtils.OAuthNonceKey, TwitterOauthUtils.GenerateNonce() }, { TwitterOauthUtils.OAuthSignatureMethodKey, TwitterOauthUtils.OAuthSignatureMethod }, { TwitterOauthUtils.OAuthTimestampKey, TwitterOauthUtils.UnixTimeStamp() }, { TwitterOauthUtils.OAuthVersionKey, TwitterOauthUtils.OAuthVersion } }; var twitterQueryParams = new Dictionary <string, string>(); var twitterPostParams = new Dictionary <string, string>(); var oauthSignature = TwitterOauthUtils.CreateSignature(httpMethod, baseUrl, twitterQueryParams, twitterPostParams, twitterOauthParams, consumer_secret, null); HttpRequestMessage message = new HttpRequestMessage(HttpMethod.Post, baseUrl); message.Headers.Add("Accept", "*/*"); message.Headers.Add("User-Agent", "weatherama-client-1.0"); message.Headers.Add("Host", "api.twitter.com"); var oauthParamsList = new List <string>(); foreach (var kvp in twitterOauthParams) { oauthParamsList.Add(string.Format("{0}=\"{1}\"", kvp.Key, TwitterOauthUtils.PercentEncode(kvp.Value))); } oauthParamsList.Add(string.Format("{0}=\"{1}\"", TwitterOauthUtils.OAuthSignatureKey, TwitterOauthUtils.PercentEncode(oauthSignature))); var oauthHeader = string.Format("OAuth {0}", string.Join(",", oauthParamsList)); message.Headers.Add("Authorization", oauthHeader); HttpClient httpClient = new HttpClient(); var responseMessage = await httpClient.SendAsync(message); string responseContent = string.Empty; if (responseMessage.Content != null) { responseContent = await responseMessage.Content.ReadAsStringAsync(); } if (responseMessage.StatusCode == HttpStatusCode.OK) { var responseTokens = TwitterOauthUtils.SplitOauthResponse(responseContent); // next leg of the journey var response = Request.CreateResponse(HttpStatusCode.Moved); response.Headers.Location = new System.Uri(string.Format("{0}?{1}={2}", OauthAuthenticateUrl, TwitterOauthUtils.OAuthTokenKey, responseTokens[TwitterOauthUtils.OAuthTokenKey])); return(response); } return(Request.CreateResponse(HttpStatusCode.Unauthorized)); }
public async Task <HttpResponseMessage> Post([FromBody] UserTweet tweet) { var userAuthInfo = Program.GetUserAuthInfo(tweet.screenName); if (userAuthInfo == null) { return(Request.CreateResponse(HttpStatusCode.OK)); } var httpMethod = "POST"; var baseUrl = "https://api.twitter.com/1.1/statuses/update.json"; var twitterOauthParams = new Dictionary <string, string>() { { TwitterOauthUtils.OAuthConsumerKeyKey, TwitterSignInController.consumer_key }, { TwitterOauthUtils.OAuthNonceKey, TwitterOauthUtils.GenerateNonce() }, { TwitterOauthUtils.OAuthSignatureMethodKey, TwitterOauthUtils.OAuthSignatureMethod }, { TwitterOauthUtils.OAuthTimestampKey, TwitterOauthUtils.UnixTimeStamp() }, { TwitterOauthUtils.OAuthVersionKey, TwitterOauthUtils.OAuthVersion }, { TwitterOauthUtils.OAuthTokenKey, userAuthInfo.OAuthToken } }; var twitterQueryParams = new Dictionary <string, string>(); twitterQueryParams.Add("status", tweet.message); var twitterPostParams = new Dictionary <string, string>(); var oauthSignature = TwitterOauthUtils.CreateSignature(httpMethod, baseUrl, twitterQueryParams, twitterPostParams, twitterOauthParams, TwitterSignInController.consumer_secret, userAuthInfo.OAuthTokenSecret); List <string> queryParamsList = new List <string>(); foreach (var kvp in twitterQueryParams) { queryParamsList.Add(string.Format("{0}={1}", kvp.Key, kvp.Value)); } var url = string.Format("{0}?{1}", baseUrl, string.Join("&", queryParamsList)); HttpRequestMessage message = new HttpRequestMessage(HttpMethod.Post, url); message.Headers.Add("Accept", "*/*"); message.Headers.Add("User-Agent", "weatherama-client-1.0"); message.Headers.Add("Host", "api.twitter.com"); var oauthParamsList = new List <string>(); foreach (var kvp in twitterOauthParams) { oauthParamsList.Add(string.Format("{0}=\"{1}\"", kvp.Key, TwitterOauthUtils.PercentEncode(kvp.Value))); } oauthParamsList.Add(string.Format("{0}=\"{1}\"", TwitterOauthUtils.OAuthSignatureKey, TwitterOauthUtils.PercentEncode(oauthSignature))); var oauthHeader = string.Format("OAuth {0}", string.Join(",", oauthParamsList)); message.Headers.Add("Authorization", oauthHeader); HttpClient httpClient = new HttpClient(); var responseMessage = await httpClient.SendAsync(message); string responseContent = string.Empty; if (responseMessage.Content != null) { responseContent = await responseMessage.Content.ReadAsStringAsync(); } if (responseMessage.StatusCode == HttpStatusCode.OK) { System.Diagnostics.Debug.WriteLine(responseContent); } return(Request.CreateResponse(HttpStatusCode.OK)); }