예제 #1
0
        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);
        }
예제 #2
0
        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");
        }
예제 #3
0
        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=");
        }
예제 #4
0
        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));
        }
예제 #5
0
        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);
        }
예제 #6
0
        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));
        }
예제 #7
0
        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));
        }