Ejemplo n.º 1
0
        public static RestRequest DelegateWith(RestClient client, RestRequest request)
        {
            if (request == null)
            {
                throw new ArgumentNullException("request");
            }

            if (!request.Method.HasValue)
            {
                throw new ArgumentException("Request must specify a web method.");
            }

            var method      = request.Method.Value;
            var credentials = (OAuthCredentials)request.Credentials;
            var url         = request.BuildEndpoint(client).ToString();
            var workflow    = new OAuthWorkflow(credentials);
            var uri         = new Uri(client.Authority);
            var realm       = uri.Host;
            var enableTrace = client.TraceEnabled || request.TraceEnabled;

            var info  = workflow.BuildProtectedResourceInfo(method, request.GetAllHeaders(), url);
            var query = credentials.GetQueryFor(url, request, info, method, enableTrace);

            ((OAuthWebQuery)query).Realm = realm;
            var auth = query.GetAuthorizationContent();

            var echo = new RestRequest();

            echo.AddHeader("X-Auth-Service-Provider", url);
            echo.AddHeader("X-Verify-Credentials-Authorization", auth);
            return(echo);
        }
Ejemplo n.º 2
0
        public static RestRequest DelegateWith(RestClient client, RestRequest request)
        {
            if(request == null)
            {
                throw new ArgumentNullException("request");
            }

            if(!request.Method.HasValue)
            {
                throw new ArgumentException("Request must specify a web method.");
            }

            var method = request.Method.Value;
            var credentials = (OAuthCredentials)request.Credentials;
            var url = request.BuildEndpoint(client).ToString();
            var workflow = new OAuthWorkflow(credentials);
            var uri = new Uri(client.Authority);
            var realm = uri.Host;
            var enableTrace = client.TraceEnabled || request.TraceEnabled;

            var info = workflow.BuildProtectedResourceInfo(method, request.GetAllHeaders(), url);
            var query = credentials.GetQueryFor(url, request, info, method, enableTrace);
            ((OAuthWebQuery) query).Realm = realm;
            var auth = query.GetAuthorizationContent();

            var echo = new RestRequest();
            echo.AddHeader("X-Auth-Service-Provider", url);
            echo.AddHeader("X-Verify-Credentials-Authorization", auth);
            return echo;
        }
Ejemplo n.º 3
0
        public virtual WebQuery GetQueryFor(string url,
                                            WebParameterCollection parameters,
                                            IWebQueryInfo info,
                                            WebMethod method,
                                            bool enableTrace)
        {
            OAuthWebQueryInfo oauth;

            var workflow = new OAuthWorkflow
            {
                ConsumerKey        = ConsumerKey,
                ConsumerSecret     = ConsumerSecret,
                ParameterHandling  = ParameterHandling,
                SignatureMethod    = SignatureMethod,
                SignatureTreatment = SignatureTreatment,
                CallbackUrl        = CallbackUrl,
                ClientPassword     = ClientPassword,
                ClientUsername     = ClientUsername,
                Verifier           = Verifier,
                Token         = Token,
                TokenSecret   = TokenSecret,
                Version       = Version ?? "1.0",
                SessionHandle = SessionHandle
            };

            switch (Type)
            {
            case OAuthType.RequestToken:
                workflow.RequestTokenUrl = url;
                oauth = workflow.BuildRequestTokenInfo(method, parameters);
                break;

            case OAuthType.AccessToken:
                workflow.AccessTokenUrl = url;
                oauth = workflow.BuildAccessTokenInfo(method, parameters);
                break;

            case OAuthType.ClientAuthentication:
                method = WebMethod.Post;
                workflow.AccessTokenUrl = url;
                oauth = workflow.BuildClientAuthAccessTokenInfo(method, parameters);
                break;

            case OAuthType.ProtectedResource:
                oauth          = workflow.BuildProtectedResourceInfo(method, parameters, url);
                oauth.FirstUse = true;
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            return(new OAuthWebQuery(oauth, enableTrace));
        }
Ejemplo n.º 4
0
        public virtual RestRequest PrepareEchoRequest(string realm = "http://api.twitter.com")
        {
            var args = new FunctionArguments
            {
                ConsumerKey = _consumerKey,
                ConsumerSecret = _consumerSecret,
                Token = _token,
                TokenSecret = _tokenSecret
            };

            var request = _protectedResourceQuery.Invoke(args);
            request.Method = WebMethod.Get;
            request.Path = string.Concat("account/verify_credentials", FormatAsString);

            var credentials = (OAuthCredentials)request.Credentials;
            var url = request.BuildEndpoint(_client);
            var workflow = new OAuthWorkflow(credentials);

            var method = request.Method.HasValue ? request.Method.Value : WebMethod.Get;
            var info = workflow.BuildProtectedResourceInfo(method, request.GetAllHeaders(), url);
            var query = credentials.GetQueryFor(url, request, info, method, TraceEnabled);

            ((OAuthWebQuery)query).Realm = realm;
            var auth = query.GetAuthorizationContent();

            var echo = new RestRequest();
            echo.AddHeader("X-Auth-Service-Provider", url);
            echo.AddHeader("X-Verify-Credentials-Authorization", auth);
            return echo;
        }
Ejemplo n.º 5
0
        private void RecalculateProtectedResourceSignature(string url)
        {
            if(!_recalculate)
            {
                _recalculate = true;
                return; // <-- More efficient for unrecycled queries
            }

            var info = (OAuthWebQueryInfo) Info;

            if(!info.ClientUsername.IsNullOrBlank() || !info.ClientPassword.IsNullOrBlank())
            {
                // Not a protected resource request
                return;
            }

            if(!string.IsNullOrEmpty(info.Verifier))
            {
                // This is an access token request
                return;
            }

            var oauth = new OAuthWorkflow
                            {
                                ConsumerKey = info.ConsumerKey,
                                ConsumerSecret = info.ConsumerSecret,
                                Token = info.Token,
                                TokenSecret = info.TokenSecret,
                                ClientUsername = info.ClientUsername,
                                ClientPassword = info.ClientPassword,
                                SignatureMethod = info.SignatureMethod.FromRequestValue(),
                                ParameterHandling = ParameterHandling,
                                CallbackUrl = info.Callback,
                                Verifier = info.Verifier
                            };

            // [DC]: Add any non-oauth parameters back into the signature hash
            var parameters = new WebParameterCollection();
            var nonAuthParameters = Parameters.Where(p => !p.Name.StartsWith("oauth_"));
            parameters.AddRange(nonAuthParameters);
            
            // [DC]: Don't escape parameters again when calcing the signature
            Info = oauth.BuildProtectedResourceInfo(Method, parameters, url);

            // [DC]: Add any non-oauth parameters back into parameter bag
            Parameters = ParseInfoParameters();
            Parameters.AddRange(nonAuthParameters);
        }
Ejemplo n.º 6
0
        public virtual WebQuery GetQueryFor(string url, 
                                            WebParameterCollection parameters, 
                                            IWebQueryInfo info, 
                                            WebMethod method,
                                            bool enableTrace)
        {
            OAuthWebQueryInfo oauth;

            var workflow = new OAuthWorkflow
            {
                ConsumerKey = ConsumerKey,
                ConsumerSecret = ConsumerSecret,
                ParameterHandling = ParameterHandling,
                SignatureMethod = SignatureMethod,
                SignatureTreatment = SignatureTreatment,
                CallbackUrl = CallbackUrl,
                ClientPassword = ClientPassword,
                ClientUsername = ClientUsername,
                Verifier = Verifier,
                Token = Token,
                TokenSecret = TokenSecret,
                Version = Version ?? "1.0",
                SessionHandle = SessionHandle
            };

            switch (Type)
            {
                case OAuthType.RequestToken:
                    workflow.RequestTokenUrl = url;
                    oauth = workflow.BuildRequestTokenInfo(method, parameters);
                    break;
                case OAuthType.AccessToken:
                    workflow.AccessTokenUrl = url;
                    oauth = workflow.BuildAccessTokenInfo(method, parameters);
                    break;
                case OAuthType.ClientAuthentication:
                    method = WebMethod.Post;
                    workflow.AccessTokenUrl = url;
                    oauth = workflow.BuildClientAuthAccessTokenInfo(method, parameters);
                    break;
                case OAuthType.ProtectedResource:
                    oauth = workflow.BuildProtectedResourceInfo(method, parameters, url);
                    oauth.FirstUse = true;
                    break;
                default:
                    throw new ArgumentOutOfRangeException();
            }

            return new OAuthWebQuery(oauth, enableTrace);
        }