コード例 #1
0
        private void getCar2GoAccounts(string token, string token_secret, DownloadStringCompletedEventHandler requestCallback)
        {
            var car2GoRequestEndpoint = "https://www.car2go.com/api/v2.1/accounts";

            var parameters = new WebParameterCollection();

            parameters.Add("oauth_callback", "oob");
            parameters.Add("oauth_signature_method", "HMAC-SHA1");
            parameters.Add("oauth_token", token);
            parameters.Add("oauth_version", "1.0");
            parameters.Add("oauth_consumer_key", FreeCarsCredentials.Car2Go.ConsumerKey);
            parameters.Add("oauth_timestamp", OAuthTools.GetTimestamp());
            parameters.Add("oauth_nonce", OAuthTools.GetNonce());
            parameters.Add("format", "json");
            parameters.Add("loc", Car2Go.City);
            //parameters.Add("test", "1");
            var signatureBase = OAuthTools.ConcatenateRequestElements("GET", car2GoRequestEndpoint, parameters);
            var signature     = OAuthTools.GetSignature(OAuthSignatureMethod.HmacSha1, OAuthSignatureTreatment.Escaped, signatureBase, FreeCarsCredentials.Car2Go.SharedSecred, token_secret);

            var requestParameters = OAuthTools.NormalizeRequestParameters(parameters);
            var requestUrl        = new Uri(car2GoRequestEndpoint + "?" + requestParameters + "&oauth_signature=" + signature, UriKind.Absolute);

            var webClient = new WebClient();

            webClient.DownloadStringCompleted += requestCallback;

            webClient.DownloadStringAsync(requestUrl);
        }
コード例 #2
0
ファイル: OAuthRequest.cs プロジェクト: modulexcite/graveyard
        private string GetSignatureAuthorizationHeader(WebParameterCollection parameters)
        {
            var signature = GetNewSignature(parameters);

            parameters.Add("oauth_signature", signature);

            return WriteAuthorizationHeader(parameters);
        }
コード例 #3
0
ファイル: RestBase.cs プロジェクト: modulexcite/graveyard
        public WebParameterCollection GetAllHeaders()
        {
            var headers = new WebParameterCollection();

            var parameters = Headers.AllKeys.Select(key => new WebPair(key, Headers[key]));

            foreach (var parameter in parameters)
            {
                headers.Add(parameter.Name, parameter.Value);
            }

            return(headers);
        }
コード例 #4
0
ファイル: OAuthWorkflow.cs プロジェクト: wessleym/tweetsharp
        private void AddAuthParameters(ICollection <WebPair> parameters, string timestamp, string nonce)
        {
            var authParameters = new WebParameterCollection
            {
                new WebPair("oauth_consumer_key", ConsumerKey),
                new WebPair("oauth_nonce", nonce),
                new WebPair("oauth_signature_method", SignatureMethod.ToRequestValue()),
                new WebPair("oauth_timestamp", timestamp),
                new WebPair("oauth_version", Version ?? "1.0")
            };

            if (!Token.IsNullOrBlank())
            {
                authParameters.Add(new WebPair("oauth_token", Token));
            }

            if (!CallbackUrl.IsNullOrBlank())
            {
                authParameters.Add(new WebPair("oauth_callback", CallbackUrl));
            }

            if (!Verifier.IsNullOrBlank())
            {
                authParameters.Add(new WebPair("oauth_verifier", Verifier));
            }

            if (!SessionHandle.IsNullOrBlank())
            {
                authParameters.Add(new WebPair("oauth_session_handle", SessionHandle));
            }

            foreach (var authParameter in authParameters)
            {
                parameters.Add(authParameter);
            }
        }
コード例 #5
0
        public static string UriMinusQuery(string uri, WebParameterCollection parameters)
        {
            int queryPos = uri.IndexOf('?');

            if (queryPos < 0)
            {
                return(uri);
            }
            var query = uri.Substring(queryPos + 1).ParseQueryString();

            foreach (var key in query.Keys)
            {
                parameters.Add(key, query[key].UrlDecode());
            }

            return(uri.Substring(0, queryPos));
        }
コード例 #6
0
        public static Uri UriMinusQuery(this Uri uri, out WebParameterCollection parameters)
        {
            var sb = new StringBuilder();

            parameters = new WebParameterCollection();
            var query = uri.Query.ParseQueryString();

            foreach (var key in query.Keys)
            {
                parameters.Add(key, query[key].UrlDecode());
            }

            var port = uri.Scheme.Equals("http") && uri.Port != 80 ||
                       uri.Scheme.Equals("https") && uri.Port != 443 ?
                       ":" + uri.Port : "";

            sb.Append(uri.Scheme)
            .Append("://")
            .Append(uri.Host)
            .Append(port)
            .Append(uri.AbsolutePath);

            return(new Uri(sb.ToString()));
        }
コード例 #7
0
        private void AddOAuthData(IRestClient client, IRestRequest request, OAuthWorkflow workflow)
        {
            var url = client.BuildUri(request).ToString();
            var queryStringStart = url.IndexOf('?');

            if (queryStringStart != -1)
            {
                url = url.Substring(0, queryStringStart);
            }

            OAuthWebQueryInfo oauth;
            var method = request.Method.ToString().ToUpperInvariant();

            var parameters = new WebParameterCollection();

            // include all GET and POST parameters before generating the signature
            // according to the RFC 5849 - The OAuth 1.0 Protocol
            // http://tools.ietf.org/html/rfc5849#section-3.4.1
            // if this change causes trouble we need to introduce a flag indicating the specific OAuth implementation level,
            // or implement a seperate class for each OAuth version
            foreach (var p in client.DefaultParameters.Where(p => p.Type == ParameterType.GetOrPost))
            {
                parameters.Add(new WebPair(p.Name, p.Value.ToString()));
            }
            foreach (var p in request.Parameters.Where(p => p.Type == ParameterType.GetOrPost))
            {
                parameters.Add(new WebPair(p.Name, p.Value.ToString()));
            }

            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:
                workflow.AccessTokenUrl = url;
                oauth = workflow.BuildClientAuthAccessTokenInfo(method, parameters);
                break;

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

            default:
                throw new ArgumentOutOfRangeException();
            }

            switch (ParameterHandling)
            {
            case OAuthParameterHandling.HttpAuthorizationHeader:
                parameters.Add("oauth_signature", oauth.Signature);
                request.AddHeader("Authorization", GetAuthorizationHeader(parameters));
                break;

            case OAuthParameterHandling.UrlOrPostParameters:
                parameters.Add("oauth_signature", oauth.Signature);
                foreach (var parameter in parameters.Where(parameter => !parameter.Name.IsNullOrBlank() && parameter.Name.StartsWith("oauth_")))
                {
                    request.AddParameter(parameter.Name, HttpUtility.UrlDecode(parameter.Value));
                }
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
コード例 #8
0
        private void CancelCar2GoBooking()
        {
            var item = (Car2GoMarker)Item;
            var car2GoRequestEndpoint = "https://www.car2go.com/api/v2.1/booking/" + item.BookingId;

            var oauthToken = (string)App.GetAppSetting("car2go.oauth_token");
            var oauthTokenSecret = (string)App.GetAppSetting("car2go.oauth_token_secret");
            if (null == oauthToken || null == oauthTokenSecret) {
                HandleNotConnectedToCar2Go();
            }
            var accountId = "";
            try {
                accountId = ((int)App.GetAppSetting("car2go.oauth_account_id")).ToString();
            } catch (NullReferenceException) {
                return;
            }

            var parameters = new WebParameterCollection();
            parameters.Add("oauth_callback", "oob");
            parameters.Add("oauth_signature_method", "HMAC-SHA1");
            parameters.Add("oauth_token", oauthToken);
            parameters.Add("oauth_version", "1.0");
            parameters.Add("oauth_consumer_key", FreeCarsCredentials.Car2Go.ConsumerKey);
            parameters.Add("oauth_timestamp", OAuthTools.GetTimestamp());
            parameters.Add("oauth_nonce", OAuthTools.GetNonce());
            parameters.Add("format", "json");
            parameters.Add("account", accountId);
            var signatureBase = OAuthTools.ConcatenateRequestElements("DELETE", car2GoRequestEndpoint, parameters);
            var signature = OAuthTools.GetSignature(
                OAuthSignatureMethod.HmacSha1,
                OAuthSignatureTreatment.Escaped,
                signatureBase,
                FreeCarsCredentials.Car2Go.SharedSecred,
                oauthTokenSecret);

            var requestParameters = OAuthTools.NormalizeRequestParameters(parameters);
            var para = requestParameters + "&oauth_signature=" + signature;

            Helpers.Delete(car2GoRequestEndpoint, para, delegate(Stream args) {
                if (null == args) return;
                try {
                    var serializer = new DataContractJsonSerializer(typeof(Car2GoCancelBookingResult));
                    var resultAccount = (Car2GoCancelBookingResult)serializer.ReadObject(args);
                    Dispatcher.BeginInvoke(() => {
                        var mbResult = MessageBoxResult.None;
                        try {
                            if (0 == resultAccount.ReturnValue.Code) {
                                var message = (resultAccount.CancelBooking[0].cancelFeeExists)
                                                  ? String.Format(
                                                      Strings.BookingPageC2GCancelationSuccessful,
                                                      resultAccount.CancelBooking[0].cancelFee,
                                                      resultAccount.CancelBooking[0].cancelFeeCurrency)
                                                  : String.Format(
                                                      Strings.BookingPageC2GCancelationSuccessful,
                                                      0, "");
                                mbResult = MessageBox.Show(
                                    message,
                                    resultAccount.ReturnValue.Description, MessageBoxButton.OK);
                            } else {
                                mbResult = MessageBox.Show(resultAccount.ReturnValue.Description);
                            }
                        } catch (Exception) {
                            Deactivate();
                        }
                        if (mbResult != MessageBoxResult.OK) {
                            return;
                        }
                        InvokeActionCompleted();
                    });
                } catch (SerializationException) {
                    InvokeActionCompleted();
                }
            });
        }
コード例 #9
0
        protected WebParameterCollection BuildRequestParameters()
        {
            var parameters = new Dictionary<string, string>();
            var properties = Info.GetType().GetProperties();

            Info.ParseAttributes<ParameterAttribute>(properties, parameters);

            var collection = new WebParameterCollection();
            parameters.ForEach(p => collection.Add(new WebParameter(p.Key, p.Value)));

            return collection;
        }
コード例 #10
0
        private void AddOAuthData(IRestClient client, IRestRequest request, OAuthWorkflow workflow)
        {
            var url = client.BuildUri(request).ToString();

            OAuthWebQueryInfo oauth;
            var method = request.Method.ToString().ToUpperInvariant();

            var parameters = new WebParameterCollection();

            // for non-GET style requests make sure params are part of oauth signature
            if (request.Method != Method.GET && request.Method != Method.DELETE)
            {
                foreach (var p in request.Parameters.Where(p => p.Type == ParameterType.GetOrPost))
                {
                    parameters.Add(new WebPair(p.Name, p.Value.ToString()));
                }
            }

            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:
                workflow.AccessTokenUrl = url;
                oauth = workflow.BuildClientAuthAccessTokenInfo(method, parameters);
                break;

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

            default:
                throw new ArgumentOutOfRangeException();
            }

            switch (ParameterHandling)
            {
            case OAuthParameterHandling.HttpAuthorizationHeader:
                parameters.Add("oauth_signature", oauth.Signature);
                request.AddHeader("Authorization", GetAuthorizationHeader(parameters));
                break;

            case OAuthParameterHandling.UrlOrPostParameters:
                parameters.Add("oauth_signature", HttpUtility.UrlDecode(oauth.Signature));
                foreach (var parameter in parameters)
                {
                    request.AddParameter(parameter.Name, parameter.Value);
                }
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
コード例 #11
0
        private string RequestHeaderString(string requestMethod, string url, Dictionary <string, object> parameters = null)
        {
            if (!this.isInitialized)
            {
                throw new Exception();
            }
            string authorizationHeader;

            if (requestMethod == "GET")
            {
                WebParameterCollection webParameterCollection = new WebParameterCollection();
                int num = url.IndexOf('?');
                if (num != -1)
                {
                    string   text  = url.Substring(num + 1);
                    string[] array = text.Split(new char[]
                    {
                        '&'
                    });
                    foreach (string text2 in array)
                    {
                        string[] array3 = text2.Split(new char[]
                        {
                            '='
                        });
                        webParameterCollection.Add(array3[0], array3[1]);
                    }
                }
                OAuthRequest oauthRequest = new OAuthRequest
                {
                    Method         = "GET",
                    ConsumerKey    = this.counsumerKey,
                    ConsumerSecret = this.counsumerSecret,
                    RequestUrl     = string.Format(url, "request_token"),
                    Token          = this.tokenKey,
                    TokenSecret    = this.tokenSecret
                };
                authorizationHeader = oauthRequest.GetAuthorizationHeader(webParameterCollection);
            }
            else
            {
                WebParameterCollection webParameterCollection2 = new WebParameterCollection();
                int num2 = url.IndexOf('?');
                if (num2 != -1)
                {
                    string   text3  = url.Substring(num2 + 1);
                    string[] array4 = text3.Split(new char[]
                    {
                        '&'
                    });
                    foreach (string text4 in array4)
                    {
                        string[] array6 = text4.Split(new char[]
                        {
                            '='
                        });
                        webParameterCollection2.Add(array6[0], array6[1]);
                    }
                }
                if (parameters != null)
                {
                    foreach (KeyValuePair <string, object> keyValuePair in parameters)
                    {
                        webParameterCollection2.Add(Uri.EscapeUriString(keyValuePair.Key), Uri.EscapeUriString(keyValuePair.Value.ToString()));
                    }
                }
                OAuthRequest oauthRequest2 = new OAuthRequest
                {
                    Method         = "POST",
                    ConsumerKey    = this.counsumerKey,
                    ConsumerSecret = this.counsumerSecret,
                    RequestUrl     = string.Format(url, "request_token"),
                    Token          = this.tokenKey,
                    TokenSecret    = this.tokenSecret
                };
                authorizationHeader = oauthRequest2.GetAuthorizationHeader(webParameterCollection2);
            }
            return(authorizationHeader);
        }
コード例 #12
0
        private void AddOAuthData(IRestClient client, IRestRequest request, OAuthWorkflow workflow)
        {
            var url = client.BuildUri(request, false).ToString();
            OAuthWebQueryInfo oauth;
            var method     = request.Method.Method;
            var parameters = new WebParameterCollection();
            // include all GET and POST parameters before generating the signature
            // according to the RFC 5849 - The OAuth 1.0 Protocol
            // http://tools.ietf.org/html/rfc5849#section-3.4.1
            // if this change causes trouble we need to introduce a flag indicating the specific OAuth implementation level,
            // or implement a seperate class for each OAuth version

            var useMultiPart = request.ContentCollectionMode == ContentCollectionMode.MultiPart ||
                               (request.ContentCollectionMode == ContentCollectionMode.MultiPartForFileParameters && (client.DefaultParameters.GetFileParameters().Any() || request.Parameters.GetFileParameters().Any()));

            var requestParameters = client.MergeParameters(request).Where(x => x.Type == ParameterType.GetOrPost || x.Type == ParameterType.QueryString);

            if (!useMultiPart)
            {
                foreach (var p in requestParameters)
                {
                    parameters.Add(new WebPair(p.Name, p.Value.ToString()));
                }
            }
            else
            {
                // if we are sending a multipart request, only the "oauth_" parameters should be included in the signature
                foreach (var p in requestParameters.Where(p => p.Name.StartsWith("oauth_", StringComparison.Ordinal)))
                {
                    parameters.Add(new WebPair(p.Name, p.Value.ToString()));
                }
            }
            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:
                workflow.AccessTokenUrl = url;
                oauth = workflow.BuildClientAuthAccessTokenInfo(method, parameters);
                break;

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

            default:
                throw new ArgumentOutOfRangeException();
            }
            switch (ParameterHandling)
            {
            case OAuthParameterHandling.HttpAuthorizationHeader:
                parameters.Add("oauth_signature", oauth.Signature);
                request.AddHeader("Authorization", GetAuthorizationHeader(parameters));
                break;

            case OAuthParameterHandling.UrlOrPostParameters:
                parameters.Add("oauth_signature", oauth.Signature);
                foreach (var parameter in parameters.Where(
                             parameter => !string.IsNullOrEmpty(parameter.Name) &&
                             (parameter.Name.StartsWith("oauth_") || parameter.Name.StartsWith("x_auth_"))))
                {
                    var v = parameter.Value;
                    v = Uri.UnescapeDataString(v.Replace('+', ' '));
                    request.AddParameter(parameter.Name, v);
                }
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
コード例 #13
0
ファイル: OAuthRequest.cs プロジェクト: RabidDog/oauth
        private void AddAuthParameters(ICollection<WebParameter> parameters, string timestamp, string nonce)
        {
            var authParameters = new WebParameterCollection
                                     {
                                         new WebParameter("oauth_consumer_key", ConsumerKey),
                                         new WebParameter("oauth_nonce", nonce),
                                         new WebParameter("oauth_signature_method", ToRequestValue(SignatureMethod)),
                                         new WebParameter("oauth_timestamp", timestamp),
                                         new WebParameter("oauth_version", Version ?? "1.0")
                                     };

            if (!IsNullOrBlank(Token))
            {
                authParameters.Add(new WebParameter("oauth_token", Token));
            }

            if (!IsNullOrBlank(CallbackUrl))
            {
                authParameters.Add(new WebParameter("oauth_callback", CallbackUrl));
            }

            if (!IsNullOrBlank(Verifier))
            {
                authParameters.Add(new WebParameter("oauth_verifier", Verifier));
            }

            if (!IsNullOrBlank(SessionHandle))
            {
                authParameters.Add(new WebParameter("oauth_session_handle", SessionHandle));
            }

            foreach (var authParameter in authParameters)
            {
                parameters.Add(authParameter);
            }
        }
コード例 #14
0
        private void AddOAuthData(IRestClient client, IRestRequest request, OAuthWorkflow workflow)
        {
            string text = client.BuildUri(request).ToString();
            int    num  = text.IndexOf('?');

            if (num != -1)
            {
                text = text.Substring(0, num);
            }
            string method = request.Method.ToString().ToUpperInvariant();
            WebParameterCollection webParameterCollection = new WebParameterCollection();

            if (!request.AlwaysMultipartFormData && !request.Files.Any())
            {
                foreach (Parameter item in from p in client.DefaultParameters
                         where p.Type == ParameterType.GetOrPost || p.Type == ParameterType.QueryString
                         select p)
                {
                    webParameterCollection.Add(new WebPair(item.Name, item.Value.ToString()));
                }
                foreach (Parameter item2 in from p in request.Parameters
                         where p.Type == ParameterType.GetOrPost || p.Type == ParameterType.QueryString
                         select p)
                {
                    webParameterCollection.Add(new WebPair(item2.Name, item2.Value.ToString()));
                }
            }
            else
            {
                foreach (Parameter item3 in from p in client.DefaultParameters
                         where (p.Type == ParameterType.GetOrPost || p.Type == ParameterType.QueryString) && p.Name.StartsWith("oauth_")
                         select p)
                {
                    webParameterCollection.Add(new WebPair(item3.Name, item3.Value.ToString()));
                }
                foreach (Parameter item4 in from p in request.Parameters
                         where (p.Type == ParameterType.GetOrPost || p.Type == ParameterType.QueryString) && p.Name.StartsWith("oauth_")
                         select p)
                {
                    webParameterCollection.Add(new WebPair(item4.Name, item4.Value.ToString()));
                }
            }
            OAuthWebQueryInfo oAuthWebQueryInfo;

            switch (Type)
            {
            case OAuthType.RequestToken:
                workflow.RequestTokenUrl = text;
                oAuthWebQueryInfo        = workflow.BuildRequestTokenInfo(method, webParameterCollection);
                break;

            case OAuthType.AccessToken:
                workflow.AccessTokenUrl = text;
                oAuthWebQueryInfo       = workflow.BuildAccessTokenInfo(method, webParameterCollection);
                break;

            case OAuthType.ClientAuthentication:
                workflow.AccessTokenUrl = text;
                oAuthWebQueryInfo       = workflow.BuildClientAuthAccessTokenInfo(method, webParameterCollection);
                break;

            case OAuthType.ProtectedResource:
                oAuthWebQueryInfo = workflow.BuildProtectedResourceInfo(method, webParameterCollection, text);
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
            switch (ParameterHandling)
            {
            case OAuthParameterHandling.HttpAuthorizationHeader:
                webParameterCollection.Add("oauth_signature", oAuthWebQueryInfo.Signature);
                request.AddHeader("Authorization", GetAuthorizationHeader(webParameterCollection));
                break;

            case OAuthParameterHandling.UrlOrPostParameters:
                webParameterCollection.Add("oauth_signature", oAuthWebQueryInfo.Signature);
                foreach (WebPair item5 in from parameter in webParameterCollection
                         where !parameter.Name.IsNullOrBlank() && (parameter.Name.StartsWith("oauth_") || parameter.Name.StartsWith("x_auth_"))
                         select parameter)
                {
                    request.AddParameter(item5.Name, HttpUtility.UrlDecode(item5.Value));
                }
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
コード例 #15
0
        private void getCar2GoAccounts(string token, string token_secret, DownloadStringCompletedEventHandler requestCallback)
        {
            var car2GoRequestEndpoint = "https://www.car2go.com/api/v2.1/accounts";

            var parameters = new WebParameterCollection();
            parameters.Add("oauth_callback", "oob");
            parameters.Add("oauth_signature_method", "HMAC-SHA1");
            parameters.Add("oauth_token", token);
            parameters.Add("oauth_version", "1.0");
            parameters.Add("oauth_consumer_key", FreeCarsCredentials.Car2Go.ConsumerKey);
            parameters.Add("oauth_timestamp", OAuthTools.GetTimestamp());
            parameters.Add("oauth_nonce", OAuthTools.GetNonce());
            parameters.Add("format", "json");
            parameters.Add("loc", Car2Go.City);
            //parameters.Add("test", "1");
            var signatureBase = OAuthTools.ConcatenateRequestElements("GET", car2GoRequestEndpoint, parameters);
            var signature = OAuthTools.GetSignature(OAuthSignatureMethod.HmacSha1, OAuthSignatureTreatment.Escaped, signatureBase, FreeCarsCredentials.Car2Go.SharedSecred, token_secret);

            var requestParameters = OAuthTools.NormalizeRequestParameters(parameters);
            var requestUrl = new Uri(car2GoRequestEndpoint + "?" + requestParameters + "&oauth_signature=" + signature, UriKind.Absolute);

            var webClient = new WebClient();
            webClient.DownloadStringCompleted += requestCallback;

            webClient.DownloadStringAsync(requestUrl);
        }
コード例 #16
0
        private void CreateCar2GoBooking(DownloadStringCompletedEventHandler requestCallback)
        {
            var item = (Car2GoMarker)Item;
            var car2GoRequestEndpoint = "https://www.car2go.com/api/v2.1/bookings";
            var oauth_timestamp = (DateTime?)App.GetAppSetting("car2go.oauth_token_timestamp");
            if (null == oauth_timestamp) {
                App.ClearAppSetting("car2go.oauth_token");
                App.ClearAppSetting("car2go.oauth_token_secret");
            } else if (((DateTime)oauth_timestamp).AddDays(90.0).CompareTo(DateTime.UtcNow) <= 0) {
                App.ClearAppSetting("car2go.oauth_token");
                App.ClearAppSetting("car2go.oauth_token_secret");
            }
            var oauthToken = (string)App.GetAppSetting("car2go.oauth_token");
            var oauthTokenSecret = (string)App.GetAppSetting("car2go.oauth_token_secret");
            if (null == oauthToken || null == oauthTokenSecret) {
                HandleNotConnectedToCar2Go(null == oauth_timestamp ? "" : Strings.SettingsPageCar2GoAuthExpired);
            }
            var accountId = "";
            try {
                accountId = ((int)App.GetAppSetting("car2go.oauth_account_id")).ToString();
            } catch (NullReferenceException) {
                return;
            }

            var parameters = new WebParameterCollection();
            parameters.Add("oauth_callback", "oob");
            parameters.Add("oauth_signature_method", "HMAC-SHA1");
            parameters.Add("oauth_token", oauthToken);
            parameters.Add("oauth_version", "1.0");
            parameters.Add("oauth_consumer_key", FreeCarsCredentials.Car2Go.ConsumerKey);
            parameters.Add("oauth_timestamp", OAuthTools.GetTimestamp());
            parameters.Add("oauth_nonce", OAuthTools.GetNonce());
            parameters.Add("format", "json");
            parameters.Add("loc", Car2Go.City);
            parameters.Add("vin", item.ID);
            parameters.Add("account", accountId);
            var signatureBase = OAuthTools.ConcatenateRequestElements("POST", car2GoRequestEndpoint, parameters);
            var signature = OAuthTools.GetSignature(
                OAuthSignatureMethod.HmacSha1,
                OAuthSignatureTreatment.Escaped,
                signatureBase,
                FreeCarsCredentials.Car2Go.SharedSecred,
                oauthTokenSecret);

            var requestParameters = OAuthTools.NormalizeRequestParameters(parameters);
            var para = requestParameters + "&oauth_signature=" + signature;

            Helpers.Post(car2GoRequestEndpoint, para, delegate(Stream response) {
                if (null == response) return;
                var serializer = new DataContractJsonSerializer(typeof(Car2GoBookingResult));
                var resultAccounts = (Car2GoBookingResult)serializer.ReadObject(response);
                Dispatcher.BeginInvoke(() => {
                    var mbResult = MessageBoxResult.None;
                    try {
                        mbResult = 0 == resultAccounts.ReturnValue.Code
                            ? MessageBox.Show(resultAccounts.Booking[0].Vehicle.Position.Address, resultAccounts.ReturnValue.Description, MessageBoxButton.OK)
                            : MessageBox.Show(resultAccounts.ReturnValue.Description);
                    } catch (Exception) {
                        Deactivate();
                    }
                    if (mbResult == MessageBoxResult.OK) {
                        InvokeActionCompleted();
                        FlurryWP7SDK.Api.LogEvent("Car2GoBookingSucessfull");
                    }
                });
            });
            FlurryWP7SDK.Api.LogEvent("Car2GoookingStarted");
        }
コード例 #17
0
        private void AddAuthParameters(ICollection<WebParameter> parameters, string timestamp, string nonce)
        {
            var authParameters = new WebParameterCollection
                                     {
                                         new WebParameter("oauth_consumer_key", ConsumerKey),
                                         new WebParameter("oauth_nonce", nonce),
                                         new WebParameter("oauth_signature_method", SignatureMethod.ToRequestValue()),
                                         new WebParameter("oauth_timestamp", timestamp),
                                         new WebParameter("oauth_version", OAUTH_VERSION)
                                     };

            if (!Token.IsNullOrBlank())
            {
                authParameters.Add(new WebParameter("oauth_token", Token));
            }

            if (!CallbackUrl.IsNullOrBlank())
            {
                authParameters.Add(new WebParameter("oauth_callback", CallbackUrl));
            }

            if (!Verifier.IsNullOrBlank())
            {
                authParameters.Add(new WebParameter("oauth_verifier", Verifier));
            }

            foreach (var authParameter in authParameters)
            {
                parameters.Add(authParameter);
            }
        }
コード例 #18
0
ファイル: OAuthRequest.cs プロジェクト: RabidDog/oauth
        private string GetClientSignatureAuthorizationQuery(WebParameterCollection parameters)
        {
            var signature = GetNewSignatureXAuth(parameters);

            parameters.Add("oauth_signature", signature);

            return WriteAuthorizationQuery(parameters);
        }
コード例 #19
0
ファイル: OAuthWorkflow.cs プロジェクト: wessleym/tweetsharp
        public virtual OAuthWebQueryInfo BuildProtectedResourceInfo(WebMethod method,
                                                                    WebParameterCollection parameters,
                                                                    string url)
        {
            ValidateProtectedResourceState();

            if (parameters == null)
            {
                parameters = new WebParameterCollection();
            }

            // Include url parameters in query pool
            var uri = new Uri(url);

#if !SILVERLIGHT && !MonoTouch
            var urlParameters = ParseQuery(uri.Query);
#else
            var urlParameters = uri.Query.ParseQueryString();
#endif

#if !SILVERLIGHT && !MonoTouch
            foreach (var parameter in urlParameters)
#else
            foreach (var parameter in urlParameters.Keys)
#endif
            {
                switch (method)
                {
                case WebMethod.Post:
                    parameters.Add(new HttpPostParameter(parameter.Key, parameter.Value));
                    break;

                default:
                    parameters.Add(parameter.Key, parameter.Value);
                    break;
                }
            }

            var timestamp = OAuthTools.GetTimestamp();
            var nonce     = OAuthTools.GetNonce();

            // [DC] Make a copy of the parameters so that the signature double-encode isn't used
            var copy = new WebParameterCollection();
            foreach (var parameter in parameters)
            {
                copy.Add(new WebPair(parameter.Name, parameter.Value));
            }

            AddAuthParameters(copy, timestamp, nonce);

            // [DC] Escape parameters at this point; do not escape again if recalculating
            var signatureBase = OAuthTools.ConcatenateRequestElements(method, url, copy);
            var signature     = OAuthTools.GetSignature(
                SignatureMethod, SignatureTreatment, signatureBase, ConsumerSecret, TokenSecret
                );

            var info = new OAuthWebQueryInfo
            {
                WebMethod          = method,
                ParameterHandling  = ParameterHandling,
                ConsumerKey        = ConsumerKey,
                Token              = Token,
                SignatureMethod    = SignatureMethod.ToRequestValue(),
                SignatureTreatment = SignatureTreatment,
                Signature          = signature,
                Timestamp          = timestamp,
                Nonce              = nonce,
                Version            = Version ?? "1.0",
                Callback           = CallbackUrl,
                UserAgent          = "Hammock",
                ConsumerSecret     = ConsumerSecret,
                TokenSecret        = TokenSecret
            };

            return(info);
        }
コード例 #20
0
        private void AddOAuthData(IRestClient client, IRestRequest request, OAuthWorkflow workflow)
        {
            var requestUrl = client.BuildUriWithoutQueryParameters(request);

            if (requestUrl.Contains('?'))
            {
                throw new ApplicationException("Using query parameters in the base URL is not supported for OAuth calls. Consider using AddDefaultQueryParameter instead.");
            }

            var url = client.BuildUri(request).ToString();
            var queryStringStart = url.IndexOf('?');

            if (queryStringStart != -1)
            {
                url = url.Substring(0, queryStringStart);
            }

            var method = request.Method.ToString().ToUpperInvariant();

            var parameters = new WebParameterCollection();

            // include all GET and POST parameters before generating the signature
            // according to the RFC 5849 - The OAuth 1.0 Protocol
            // http://tools.ietf.org/html/rfc5849#section-3.4.1
            // if this change causes trouble we need to introduce a flag indicating the specific OAuth implementation level,
            // or implement a seperate class for each OAuth version
            if (!request.AlwaysMultipartFormData && !request.Files.Any())
            {
                parameters.AddRange(
                    client.DefaultParameters
                    .Where(p => p.Type == ParameterType.GetOrPost || p.Type == ParameterType.QueryString)
                    .Select(p => new WebPair(p.Name, p.Value.ToString())));

                parameters.AddRange(
                    request.Parameters
                    .Where(p => p.Type == ParameterType.GetOrPost || p.Type == ParameterType.QueryString)
                    .Select(p => new WebPair(p.Name, p.Value.ToString())));
            }
            else
            {
                // if we are sending a multipart request, only the "oauth_" parameters should be included in the signature

                parameters.AddRange(
                    client.DefaultParameters
                    .Where(p => (p.Type == ParameterType.GetOrPost || p.Type == ParameterType.QueryString) &&
                           p.Name.StartsWith("oauth_"))
                    .Select(p => new WebPair(p.Name, p.Value.ToString())));

                parameters.AddRange(
                    request.Parameters
                    .Where(p => (p.Type == ParameterType.GetOrPost || p.Type == ParameterType.QueryString) &&
                           p.Name.StartsWith("oauth_"))
                    .Select(p => new WebPair(p.Name, p.Value.ToString())));
            }

            OAuthWebQueryInfo oauth;

            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:
                workflow.AccessTokenUrl = url;
                oauth = workflow.BuildClientAuthAccessTokenInfo(method, parameters);
                break;

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

            default:
                throw new ArgumentOutOfRangeException();
            }

            switch (ParameterHandling)
            {
            case OAuthParameterHandling.HttpAuthorizationHeader:
                parameters.Add("oauth_signature", oauth.Signature);
                request.AddOrUpdateParameter("Authorization", GetAuthorizationHeader(parameters), ParameterType.HttpHeader);
                break;

            case OAuthParameterHandling.UrlOrPostParameters:
                parameters.Add("oauth_signature", oauth.Signature);
                var headers =
                    parameters.Where(p => !p.Name.IsNullOrBlank() &&
                                     (p.Name.StartsWith("oauth_") || p.Name.StartsWith("x_auth_")))
                    .Select(p => new Parameter
                {
                    Name  = p.Name,
                    Value = HttpUtility.UrlDecode(p.Value),
                    Type  = ParameterType.GetOrPost
                });
                foreach (var header in headers)
                {
                    request.AddOrUpdateParameter(header);
                }
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
        private void AddOAuthData(IRestClient client, IRestRequest request, OAuthWorkflow workflow)
        {
            var url = client.BuildUri(request).ToString();
            var queryStringStart = url.IndexOf('?');

            if (queryStringStart != -1)
                url = url.Substring(0, queryStringStart);

            OAuthWebQueryInfo oauth;
#if PocketPC
            var method = request.Method.ToString().ToUpper();
#else
            var method = request.Method.ToString().ToUpperInvariant();
#endif

            var parameters = new WebParameterCollection();

            // include all GET and POST parameters before generating the signature
            // according to the RFC 5849 - The OAuth 1.0 Protocol
            // http://tools.ietf.org/html/rfc5849#section-3.4.1
            // if this change causes trouble we need to introduce a flag indicating the specific OAuth implementation level,
            // or implement a seperate class for each OAuth version
            if (!request.AlwaysMultipartFormData && !request.Files.Any())
            {
                foreach (var p in client.DefaultParameters.Where(p => p.Type == ParameterType.GetOrPost || p.Type == ParameterType.QueryString))
                {
                    parameters.Add(new WebPair(p.Name, p.Value.ToString()));
                }

                foreach (var p in request.Parameters.Where(p => p.Type == ParameterType.GetOrPost || p.Type == ParameterType.QueryString))
                {
                    parameters.Add(new WebPair(p.Name, p.Value.ToString()));
                }
            }
            else
            {
                // if we are sending a multipart request, only the "oauth_" parameters should be included in the signature
                foreach (var p in client.DefaultParameters.Where(
                    p => (p.Type == ParameterType.GetOrPost || p.Type == ParameterType.QueryString) && p.Name.StartsWith("oauth_")))
                {
                    parameters.Add(new WebPair(p.Name, p.Value.ToString()));
                }

                foreach (var p in request.Parameters.Where(
                    p => (p.Type == ParameterType.GetOrPost || p.Type == ParameterType.QueryString) && p.Name.StartsWith("oauth_")))
                {
                    parameters.Add(new WebPair(p.Name, p.Value.ToString()));
                }
            }

            switch (this.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:
                    workflow.AccessTokenUrl = url;
                    oauth = workflow.BuildClientAuthAccessTokenInfo(method, parameters);
                    break;

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

                default:
                    throw new ArgumentOutOfRangeException();
            }

            switch (this.ParameterHandling)
            {
                case OAuthParameterHandling.HttpAuthorizationHeader:
                    parameters.Add("oauth_signature", oauth.Signature);
                    request.AddHeader("Authorization", this.GetAuthorizationHeader(parameters));
                    break;

                case OAuthParameterHandling.UrlOrPostParameters:
                    parameters.Add("oauth_signature", oauth.Signature);

                    foreach (var parameter in parameters.Where(parameter =>
                        !parameter.Name.IsNullOrBlank() &&
                        (parameter.Name.StartsWith("oauth_") || parameter.Name.StartsWith("x_auth_"))))
                    {
                        request.AddParameter(parameter.Name, HttpUtility.UrlDecode(parameter.Value));
                    }
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
            }
        }