Пример #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);
        }
Пример #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;
        }
Пример #3
0
    internal static OAuthWebQuery RefreshAccessTokenQuery()
    {
        var oauth = new OAuthWorkflow
        {
            AccessTokenUrl = AppSettings.AccessTokenUri,
            ConsumerKey = AppSettings.consumerKey,
            ConsumerSecret = AppSettings.consumerKeySecret,
            ParameterHandling = OAuthParameterHandling.HttpAuthorizationHeader,
            SignatureMethod = OAuthSignatureMethod.HmacSha1,
            Token = MainUtil.GetKeyValue<string>("AccessToken"),
            TokenSecret = MainUtil.GetKeyValue<string>("AccessTokenSecret"),
            SessionHandle = MainUtil.GetKeyValue<string>("SessionHandle"),
            Version = AppSettings.oAuthVersion //
        };

        var info = oauth.BuildAccessTokenInfo(WebMethod.Post);

        ////replace signature
        //info.Signature = AppSettings.consumerKeySecret + "&" + oauth.TokenSecret;
        //info.Signature = HttpUtility.UrlEncode(info.Signature);
        ////replace signature

        info.Token = HttpUtility.UrlEncode(info.Token);
    
        var sessionParameter = new WebPair("oauth_session_handle", MainUtil.GetKeyValue<string>("SessionHandle"));
        var objOAuthWebQuery = new OAuthWebQuery(info, false);
        objOAuthWebQuery.HasElevatedPermissions = true;
        objOAuthWebQuery.SilverlightUserAgentHeader = "Hammock";
        objOAuthWebQuery.Parameters.Add(sessionParameter);
        return objOAuthWebQuery;
    }
Пример #4
0
    internal static OAuthWebQuery GetAccessTokenQuery(string requestToken, string RequestTokenSecret, string oAuthVerificationPin)
    {
        var oauth = new OAuthWorkflow
        {
            AccessTokenUrl = AppSettings.AccessTokenUri,
            ConsumerKey = AppSettings.consumerKey,
            ConsumerSecret = AppSettings.consumerKeySecret,
            ParameterHandling = OAuthParameterHandling.HttpAuthorizationHeader,
            SignatureMethod = OAuthSignatureMethod.HmacSha1,
            Token = HttpUtility.UrlEncode(requestToken),
            TokenSecret = RequestTokenSecret,
            Verifier = oAuthVerificationPin,
            Version = AppSettings.oAuthVersion //
        };

        var info = oauth.BuildAccessTokenInfo(WebMethod.Post);
     
        ////replace signature
        //info.Signature = AppSettings.consumerKeySecret + "&" + oauth.TokenSecret;
        //info.Signature = HttpUtility.UrlEncode(info.Signature);
        ////replace signature
        
        var objOAuthWebQuery = new OAuthWebQuery(info, false);
        objOAuthWebQuery.HasElevatedPermissions = true;
        objOAuthWebQuery.SilverlightUserAgentHeader = "Hammock";
        return objOAuthWebQuery;
    }
Пример #5
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));
        }
Пример #6
0
        internal static OAuthWebQuery GetRequestTokenQuery()
        {
            var oauth = new OAuthWorkflow
            {
                ConsumerKey = AppSettings.consumerKey,
                ConsumerSecret = AppSettings.consumerKeySecret,
                SignatureMethod = OAuthSignatureMethod.HmacSha1,
                ParameterHandling = OAuthParameterHandling.HttpAuthorizationHeader,
                RequestTokenUrl = AppSettings.RequestTokenUri,
                Version = AppSettings.oAuthVersion,
                CallbackUrl = AppSettings.CallbackUri
            };

            var info = oauth.BuildRequestTokenInfo(WebMethod.Get);
            var objOAuthWebQuery = new OAuthWebQuery(info, false);
            objOAuthWebQuery.HasElevatedPermissions = true;
            objOAuthWebQuery.SilverlightUserAgentHeader = "Hammock";
            return objOAuthWebQuery;
        }
Пример #7
0
        //internal static OAuthWebQuery GetAccessTokenQuery(string requestToken, string RequestTokenSecret, string oAuthVerificationPin)
        internal static OAuthWebQuery GetAccessTokenQuery(string requestToken, string RequestTokenSecret)
        {
            var oauth = new OAuthWorkflow
           {
               AccessTokenUrl = DailyBurnSettings.AccessTokenUri,
               ConsumerKey = DailyBurnSettings.consumerKey,
               ConsumerSecret = DailyBurnSettings.consumerKeySecret,
               ParameterHandling = OAuthParameterHandling.HttpAuthorizationHeader,
               SignatureMethod = OAuthSignatureMethod.HmacSha1,
               Token = requestToken,
               Version = DailyBurnSettings.oAuthVersion
           };

            var info = oauth.BuildAccessTokenInfo(WebMethod.Get);
            var objOAuthWebQuery = new OAuthWebQuery(info);
            objOAuthWebQuery.HasElevatedPermissions = true;
            objOAuthWebQuery.SilverlightUserAgentHeader = "Hammock";
            objOAuthWebQuery.SilverlightMethodHeader = "GET";
            return objOAuthWebQuery;
        }
Пример #8
0
        internal static OAuthWebQuery GetAccessTokenQuery(string requestToken, string RequestTokenSecret, string oAuthVerificationPin)
        {
            var oauth = new OAuthWorkflow
            {
                AccessTokenUrl = AppSettings.TwitterAccessTokenUri,
                ConsumerKey = AppSettings.TwitterConsumerKey,
                ConsumerSecret = AppSettings.TwitterConsumerKeySecret,
                ParameterHandling = OAuthParameterHandling.HttpAuthorizationHeader,
                SignatureMethod = OAuthSignatureMethod.HmacSha1,
                Token = requestToken,
                Verifier = oAuthVerificationPin,
                Version = AppSettings.TwitterOAuthVersion
            };

            var info = oauth.BuildAccessTokenInfo(WebMethod.Post);
            var objOAuthWebQuery = new OAuthWebQuery(info, AppSettings.InDebug);
            objOAuthWebQuery.HasElevatedPermissions = true;
            objOAuthWebQuery.SilverlightUserAgentHeader = "Hammock";
            objOAuthWebQuery.Method = WebMethod.Get;
            //objOAuthWebQuery.SilverlightMethodHeader = "GET";
            return objOAuthWebQuery;
        }
Пример #9
0
        public static void Authenticate(WebBrowser wb)
        {
            m_browser = wb;
            var oauth = new OAuthWorkflow
            {
                ConsumerKey = TwitterSettings.ConsumerKey,
                ConsumerSecret = TwitterSettings.ConsumerKeySecret,
                SignatureMethod = OAuthSignatureMethod.HmacSha1,
                ParameterHandling = OAuthParameterHandling.HttpAuthorizationHeader,
                RequestTokenUrl = TwitterSettings.RequestTokenUri,
                Version = TwitterSettings.OAuthVersion,
                CallbackUrl = TwitterSettings.CallbackUri
            };

            var info = oauth.BuildRequestTokenInfo(WebMethod.Get);
            var objOAuthWebQuery = new OAuthWebQuery(info);
            objOAuthWebQuery.HasElevatedPermissions = true;
            objOAuthWebQuery.SilverlightUserAgentHeader = "Hammock";
            objOAuthWebQuery.SilverlightMethodHeader = "GET";

            objOAuthWebQuery.QueryResponse += new EventHandler<WebQueryResponseEventArgs>(objOAuthWebQuery_QueryResponse);
            objOAuthWebQuery.RequestAsync(TwitterSettings.RequestTokenUri, null);
            
        }
Пример #10
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;
        }
Пример #11
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);
        }
Пример #12
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);
        }