コード例 #1
0
ファイル: Consumer.cs プロジェクト: chteam/T-Sina-.NET-Client
        /// <summary>
        /// Access protected resource with access token
        /// </summary>
        /// <param name="accessToken">Access token</param>
        /// <param name="urlString">URL string for accessing protected resource</param>
        /// <param name="method">HTTP method to access</param>
        /// <param name="authorizationRealm">realm for accessing protected resource</param>
        /// <param name="queryParameters">Query parameter to be sent</param>
        /// <param name="additionalParameters">Parameters added to Authorization header</param>
        /// <param name="createRequest" >Factory method to create request object</param>
        /// <returns>HttpWebResponse from protected resource</returns>
        public HttpWebResponse  AccessProtectedResource(
            AccessToken accessToken,
            String urlString,
            String method,
            String authorizationRealm,
            Parameter[] queryParameters,
            Parameter[] additionalParameters,
            RequestFactoryMethod createRequest)
        {
            HttpWebRequest req    = null;
            IAsyncResult   result =
                BeginAccessProtectedResource(accessToken,
                                             urlString,
                                             method,
                                             authorizationRealm,
                                             queryParameters,
                                             additionalParameters,
                                             out req,
                                             null,
                                             null,
                                             createRequest
                                             );

            return((HttpWebResponse)req.EndGetResponse(result));
        }
コード例 #2
0
ファイル: Consumer.cs プロジェクト: chteam/T-Sina-.NET-Client
        /// <summary>
        /// Begins an asynchronous access to protected resource with access token
        /// </summary>
        /// <param name="accessToken">Access token</param>
        /// <param name="urlString">URL string for accessing protected resource</param>
        /// <param name="method">HTTP method to access</param>
        /// <param name="authorizationRealm">realm for accessing protected resource</param>
        /// <param name="queryParameters">Query parameter to be sent</param>
        /// <param name="additionalParameters">Parameters added to Authorization header</param>
        /// <param name="request">Request that starts asynchronous access </param>
        /// <param name="callback">callback to pass request object</param>
        /// <param name="state">state to pass request object </param>
        /// <param name="createRequest" >Factory method to create request object</param>
        /// <returns>An IAsyncResult that references the asynchronous request for a response. </returns>
        public IAsyncResult BeginAccessProtectedResource(
            AccessToken accessToken,
            String urlString,
            String method,
            String authorizationRealm,
            Parameter[] queryParameters,
            Parameter[] additionalParameters,
            out HttpWebRequest request,
            AsyncCallback callback,
            Object state,
            RequestFactoryMethod createRequest)
        {
            if (additionalParameters == null)
            {
                additionalParameters = new Parameter[0];
            }

            if (!(method.Equals("GET") || method.Equals("POST")))
            {
                throw new ArgumentException(
                          "Method must be GET or POST"
                          );
            }

            Uri uri = new Uri(urlString);

            if (uri.Query.Length > 0)
            {
                throw new ArgumentException(
                          "Query parameter must not be passed included in url.\r\n" +
                          "Pass them via queryParameters parameter of this method."
                          );
            }

            if (queryParameters == null)
            {
                queryParameters = new Parameter[0];
            }

            String oauth_consumer_key     = _consumerKey;
            String oauth_token            = accessToken.TokenValue;
            String oauth_signature_method = "HMAC-SHA1";
            String oauth_timestamp        =
                ((DateTime.UtcNow.Ticks - new DateTime(1970, 1, 1).Ticks) / (1000 * 10000)).ToString();
            String oauth_nonce =
                Guid.NewGuid().ToString();


            request =
                createRequest(
                    urlString +
                    (
                        method.Equals("GET") &&
                        queryParameters.Length > 0 ?
                        "?" + Parameter.ConCat(queryParameters) :
                        ""
                    )
                    );

            if (_webProxy != null)
            {
                request.Proxy = _webProxy;
            }

            //Twitter service does not accept expect100continue
            request.ServicePoint.Expect100Continue = false;

            request.Method = method;


            String oauth_signature =
                CreateHMACSHA1Signature(
                    request.Method,
                    urlString,
                    Parameter.ConCatAsArray(
                        new Parameter[] {
                new Parameter("oauth_consumer_key", oauth_consumer_key),
                new Parameter("oauth_token", oauth_token),
                new Parameter("oauth_signature_method", oauth_signature_method),
                new Parameter("oauth_timestamp", oauth_timestamp),
                new Parameter("oauth_nonce", oauth_nonce)
            },
                        additionalParameters,
                        queryParameters
                        ),
                    _consumerSecret,
                    accessToken.TokenSecret
                    );

            request.Headers.Add(
                "Authorization: OAuth " +
                "realm=\"" + authorizationRealm + "\"," +
                "oauth_consumer_key=\"" + Parameter.EncodeParameterString(oauth_consumer_key) + "\"," +
                "oauth_token=\"" + Parameter.EncodeParameterString(oauth_token) + "\"," +
                "oauth_signature_method=\"" + Parameter.EncodeParameterString(oauth_signature_method) + "\"," +
                "oauth_signature=\"" + Parameter.EncodeParameterString(oauth_signature) + "\"," +
                "oauth_timestamp=\"" + Parameter.EncodeParameterString(oauth_timestamp) + "\"," +
                "oauth_nonce=\"" + Parameter.EncodeParameterString(oauth_nonce) + "\"" +
                (additionalParameters.Length > 0 ?
                 "," + Parameter.ConCat(additionalParameters, "\"") :
                 ""
                )
                );

            if (method.Equals("POST"))
            {
                String contents = Parameter.ConCat(queryParameters);
                request.ContentLength = contents.Length;

                Stream       s  = null;
                StreamWriter sw = null;

                try
                {
                    s  = request.GetRequestStream();
                    sw = new StreamWriter(s, Encoding.ASCII);

                    sw.Write(contents);
                    sw.Flush();
                }
                finally
                {
                    if (sw != null)
                    {
                        sw.Close();
                    }
                    if (s != null)
                    {
                        s.Close();
                    }
                }
            }

            return(request.BeginGetResponse(callback, state));
        }
コード例 #3
0
ファイル: Consumer.cs プロジェクト: chteam/T-Sina-.NET-Client
        /// <summary>
        /// Request access token responding to authenticated request token.
        /// </summary>
        /// <param name="verifier">Verifier string for authenticaed request token</param>
        /// <param name="requestToken">Authenticated request token</param>
        /// <param name="accessTokenUrl">Access token URL</param>
        /// <param name="realm">Realm for requesting access token</param>
        /// <param name="additionalParameters">Parameters added to Authorization header</param>
        /// <param name="responseParameters" >Parameters returned in response</param>
        /// <param name="createRequest" >Factory method to create request object</param>
        /// <returns>Responding access token</returns>
        public AccessToken RequestAccessToken(
            String verifier,
            RequestToken requestToken,
            String accessTokenUrl,
            String realm,
            Parameter[] additionalParameters,
            ref Parameter [] responseParameters,
            RequestFactoryMethod createRequest)
        {
            if (additionalParameters == null)
            {
                additionalParameters = new Parameter[0];
            }

            String oauth_consumer_key     = _consumerKey;
            String oauth_token            = requestToken.TokenValue;
            String oauth_signature_method = "HMAC-SHA1";
            String oauth_timestamp        =
                ((DateTime.UtcNow.Ticks - new DateTime(1970, 1, 1).Ticks) / (1000 * 10000)).ToString();
            String oauth_nonce =
                Guid.NewGuid().ToString();

            HttpWebRequest req = createRequest(accessTokenUrl);

            if (_webProxy != null)
            {
                req.Proxy = _webProxy;
            }

            req.Method = "POST";

            String oauth_signature =
                CreateHMACSHA1Signature(
                    req.Method,
                    accessTokenUrl,
                    Parameter.ConCatAsArray(
                        new Parameter[] {
                new Parameter("oauth_consumer_key", oauth_consumer_key),
                new Parameter("oauth_token", oauth_token),
                new Parameter("oauth_signature_method", oauth_signature_method),
                new Parameter("oauth_timestamp", oauth_timestamp),
                new Parameter("oauth_nonce", oauth_nonce),
                new Parameter("oauth_verifier", verifier),
            },
                        additionalParameters
                        ),
                    _consumerSecret,
                    requestToken.TokenSecret
                    );

            req.Headers.Add(
                "Authorization: OAuth " +
                "realm=\"" + realm + "\"," +
                "oauth_consumer_key=\"" + Parameter.EncodeParameterString(oauth_consumer_key) + "\"," +
                "oauth_token=\"" + Parameter.EncodeParameterString(oauth_token) + "\"," +
                "oauth_signature_method=\"" + Parameter.EncodeParameterString(oauth_signature_method) + "\"," +
                "oauth_signature=\"" + Parameter.EncodeParameterString(oauth_signature) + "\"," +
                "oauth_timestamp=\"" + Parameter.EncodeParameterString(oauth_timestamp) + "\"," +
                "oauth_nonce=\"" + Parameter.EncodeParameterString(oauth_nonce) + "\"," +
                "oauth_verifier=\"" + Parameter.EncodeParameterString(verifier) + "\"" +
                (additionalParameters.Length > 0 ?
                 "," + Parameter.ConCat(additionalParameters, "\"") :
                 ""
                )
                );

            HttpWebResponse resp = null;

            try
            {
                resp = (HttpWebResponse)req.GetResponse();
                StreamReader sr = new StreamReader(resp.GetResponseStream());

                responseParameters =
                    Parameter.Parse(sr.ReadToEnd());

                String accessToken       = null;
                String accessTokenSecret = null;
                foreach (Parameter param in responseParameters)
                {
                    if (param.Name == "oauth_token")
                    {
                        accessToken = param.Value;
                    }

                    if (param.Name == "oauth_token_secret")
                    {
                        accessTokenSecret = param.Value;
                    }
                }

                if (accessToken == null || accessTokenSecret == null)
                {
                    throw new InvalidOperationException();
                }

                return(new AccessToken(accessToken, accessTokenSecret));
            }
            finally
            {
                if (resp != null)
                {
                    resp.Close();
                }
            }
        }