예제 #1
0
        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        public OAuth1AuthorizeInfo GetAuthorizeInfo()
        {
            String             url      = this.RequestTokenUrl;
            var                cm       = new GetRequestTokenCommand(this.ConsumerKey, this.ConsumerSecret, "", "", HttpMethodName.Post);
            SignatureInfo      si       = OAuth1Client.GenerateSignature(new Uri(url), cm, OAuthSignatureTypes.HMACSHA1);
            HttpRequestCommand command  = this.CreateHttpRequestCommand(HttpMethodName.Post, url, "", "");
            String             bodyText = this.GetBodyText(command);

            //正規表現でoauth_token,oauth_token_secret取得
            return(OAuth1AuthorizeInfo.Create(this.AuthorizeUrl, bodyText));
        }
예제 #2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="authorizeInfo"></param>
        /// <param name="oauthVerifier"></param>
        /// <returns></returns>
        public OAuth1AccessToken GetAccessToken(OAuth1AuthorizeInfo authorizeInfo, String oauthVerifier)
        {
            var ai = authorizeInfo;
            var cm = new GetRequestTokenCommand(this.ConsumerKey, this.ConsumerSecret
                                                , ai.RequestToken, ai.RequestTokenSecret, HttpMethodName.Post);
            var si = OAuth1Client.GenerateSignature(new Uri(this.AccessTokenUrl), cm, OAuthSignatureTypes.HMACSHA1);
            HttpRequestCommand command = new HttpRequestCommand(String.Format("{0}?{1}&oauth_verifier={2}&oauth_signature={3}"
                                                                              , this.AccessTokenUrl, si.NormalizedRequestParameters, oauthVerifier, si.Signature), HttpMethodName.Post);
            var res = this.GetResponse(command);

            return(OAuth1AccessToken.Create(res.BodyText));
        }
예제 #3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="requestToken"></param>
        /// <param name="requestTokenSecret"></param>
        /// <returns></returns>
        public OAuth1AccessToken GetAccessToken(String requestToken, String requestTokenSecret)
        {
            String url = this.AccessTokenUrl;
            GetRequestTokenCommand cm = new GetRequestTokenCommand(this.ConsumerKey, this.ConsumerSecret
                                                                   , requestToken, requestTokenSecret, HttpMethodName.Post);
            SignatureInfo      si      = OAuth1Client.GenerateSignature(new Uri(url), cm, OAuthSignatureTypes.HMACSHA1);
            HttpRequestCommand command =
                new HttpRequestCommand(String.Format("{0}?{1}&oauth_signature={2}", url, si.NormalizedRequestParameters, si.Signature), HttpMethodName.Post);
            var res = this.GetResponse(command);

            return(OAuth1AccessToken.Create(res.BodyText));
        }
예제 #4
0
        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        public OAuth1AuthorizeInfo GetAuthorizeInfo()
        {
            String             url     = this.RequestTokenUrl;
            var                cm      = new GetRequestTokenCommand(this.ConsumerKey, this.ConsumerSecret, "", "", HttpMethodName.Post);
            SignatureInfo      si      = OAuth1Client.GenerateSignature(new Uri(url), cm, OAuthSignatureTypes.HMACSHA1);
            HttpRequestCommand command =
                new HttpRequestCommand(String.Format("{0}?{1}&oauth_signature={2}", url, si.NormalizedRequestParameters, si.Signature), HttpMethodName.Post);
            String bodyText = this.GetBodyText(command);

            //正規表現でoauth_token,oauth_token_secret取得
            return(OAuth1AuthorizeInfo.Create(this.AuthorizeUrl, bodyText));
        }
예제 #5
0
        private HttpRequestCommand CreateHttpClientRequestHeaderMode(HttpMethodName methodName, String url, String token, String tokenSecret, IDictionary <String, String> queryString)
        {
            var cm = new GetRequestTokenCommand(this.ConsumerKey, this.ConsumerSecret, token, tokenSecret, methodName);
            Dictionary <String, String> pp = OAuth1Client.GenerateParameters(cm);
            var           u  = new Uri(HttpClient.CreateQueryString(url, queryString, OAuth1Client.UrlEncode));
            SignatureInfo si = GenerateSignature(u, cm);

            pp.Add("oauth_signature", OAuth1Client.UrlEncode(si.Signature));
            HttpRequestCommand cl = new HttpRequestCommand(HttpClient.CreateQueryString(url, queryString, HttpClient.UrlEncode));

            cl.MethodName = methodName;
            cl.Headers[HttpRequestHeader.Authorization] = this.CreateOAuthHeader(pp);
            return(cl);
        }
예제 #6
0
        private HttpRequestCommand CreateHttpClientQueryStringMode(HttpMethodName methodName, String url, String token, String tokenSecret, IDictionary <String, String> queryString)
        {
            var cm = new GetRequestTokenCommand(this.ConsumerKey, this.ConsumerSecret, token, tokenSecret, methodName);
            Dictionary <String, String> pp = OAuth1Client.GenerateParameters(cm);

            foreach (var p in queryString)
            {
                pp.Add(p.Key, p.Value);
            }
            var           u  = new Uri(HttpClient.CreateQueryString(url, pp, OAuth1Client.UrlEncode));
            SignatureInfo si = GenerateSignature(u, cm);

            pp.Add("oauth_signature", OAuth1Client.UrlEncode(si.Signature));
            HttpRequestCommand cl = new HttpRequestCommand(HttpClient.CreateQueryString(url, pp, HttpClient.UrlEncode));

            cl.MethodName = methodName;
            return(cl);
        }
예제 #7
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="consumerKey"></param>
 /// <param name="consumerKeySecret"></param>
 /// <param name="token"></param>
 /// <param name="tokenSecret"></param>
 /// <param name="methodName"></param>
 public GetRequestTokenCommand(String consumerKey, String consumerKeySecret, String token, String tokenSecret
                               , HttpMethodName methodName)
 {
     if (String.IsNullOrEmpty(consumerKey) == true)
     {
         throw new ArgumentNullException("consumerKey");
     }
     this.ConsumerKey       = consumerKey;
     this.ConsumerKeySecret = consumerKeySecret;
     this.Token             = token;
     this.TokenSecret       = tokenSecret;
     this.MethodName        = methodName;
     this.Nonce             = OAuth1Client.GenerateNonce();
     this.TimeStamp         = OAuth1Client.GenerateTimeStamp();
     if (this.Token == null)
     {
         this.Token = String.Empty;
     }
 }
예제 #8
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="url"></param>
        /// <param name="command"></param>
        /// <param name="signatureType"></param>
        /// <returns></returns>
        public static SignatureInfo GenerateSignatureBase(Uri url, GetRequestTokenCommand command, String signatureType)
        {
            SignatureInfo si = new SignatureInfo();
            var           cm = command;

            if (String.IsNullOrEmpty(signatureType))
            {
                throw new ArgumentNullException("signatureType");
            }

            List <KeyValuePair <String, String> > parameters = OAuth1Client.GetQueryParameters(url.Query);

            parameters.Add(new KeyValuePair <String, String>(Key.OAuthVersion, Key.OAuthVersionNo));
            parameters.Add(new KeyValuePair <String, String>(Key.OAuthNonce, cm.Nonce));
            parameters.Add(new KeyValuePair <String, String>(Key.OAuthTimestamp, cm.TimeStamp));
            parameters.Add(new KeyValuePair <String, String>(Key.OAuthSignatureMethod, signatureType));
            parameters.Add(new KeyValuePair <String, String>(Key.OAuthConsumerKey, cm.ConsumerKey));

            if (!String.IsNullOrEmpty(cm.Token))
            {
                parameters.Add(new KeyValuePair <String, String>(Key.OAuthToken, cm.Token));
            }

            parameters.Sort(CompareQueryString);

            si.NormalizedUrl = String.Format("{0}://{1}", url.Scheme, url.Host);
            if (!((url.Scheme == "http" && url.Port == 80) || (url.Scheme == "https" && url.Port == 443)))
            {
                si.NormalizedUrl += ":" + url.Port;
            }
            si.NormalizedUrl += url.AbsolutePath;
            si.NormalizedRequestParameters = NormalizeRequestParameters(parameters);

            StringBuilder sb = new StringBuilder(1000);

            sb.AppendFormat("{0}&", cm.MethodName.ToString().ToUpper());
            sb.AppendFormat("{0}&", OAuth1Client.UrlEncode(si.NormalizedUrl));
            sb.AppendFormat("{0}", OAuth1Client.UrlEncode(si.NormalizedRequestParameters));
            si.Signature = sb.ToString();
            return(si);
        }
예제 #9
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="url"></param>
        /// <param name="command"></param>
        /// <param name="signatureType"></param>
        /// <returns></returns>
        public static SignatureInfo GenerateSignature(Uri url, GetRequestTokenCommand command, OAuthSignatureTypes signatureType)
        {
            var           cm = command;
            SignatureInfo si = new SignatureInfo();

            switch (signatureType)
            {
            case OAuthSignatureTypes.PLAINTEXT:
                si.Signature = OAuth1Client.UrlEncode(String.Format("{0}&{1}", cm.ConsumerKeySecret, cm.TokenSecret));
                return(si);

            case OAuthSignatureTypes.HMACSHA1:
                si = GenerateSignatureBase(url, cm, Key.HMACSHA1SignatureType);
                String key = String.Format("{0}&{1}"
                                           , OAuth1Client.UrlEncode(cm.ConsumerKeySecret), String.IsNullOrEmpty(cm.TokenSecret) ? "" : OAuth1Client.UrlEncode(cm.TokenSecret));
                si.Signature = GenerateSignatureUsingHash(key, si.Signature);
                return(si);

            case OAuthSignatureTypes.RSASHA1: throw new NotImplementedException();
            }
            throw new ArgumentException("Unknown signature type", "signatureType");
        }