Пример #1
0
        public IConsumerResponse Run(IConsumerRequest consumerRequest)
        {
            HttpWebRequest    webRequest       = consumerRequest.ToWebRequest();
            IConsumerResponse consumerResponse = null;

            var stopwatch = Stopwatch.StartNew();

            try
            {
                var httpWebResponse = webRequest.GetResponse() as HttpWebResponse;
                consumerResponse = new ConsumerResponse(httpWebResponse, GetElapsedTimespan(stopwatch));
            }
            catch (WebException webEx)
            {
                // I *think* it's safe to assume that the response will always be a HttpWebResponse...
                HttpWebResponse httpWebResponse = (HttpWebResponse)(webEx.Response);

                if (httpWebResponse == null)
                {
                    throw new ApplicationException("An HttpWebResponse could not be obtained from the WebException. Status was " + webEx.Status, webEx);
                }

                consumerResponse = new ConsumerResponse(httpWebResponse, webEx, GetElapsedTimespan(stopwatch));
            }

            return(consumerResponse);
        }
Пример #2
0
        /// <summary>
        /// Tests the connection to xero API.
        /// </summary>
        /// <param name="accessTokenRepository">The access token repository.</param>
        /// <returns>
        /// Returns true if the Xero API succesfully returns a valid response
        /// </returns>
        /// <remarks>
        /// The simplest test is to call the 'GET Organisation' endpoint. This should always return the authenticated organisation details.
        /// </remarks>
        public bool TestConnectionToXeroApi(ITokenRepository <AccessToken> accessTokenRepository)
        {
            Trace.WriteLine("Entering ApiRepository.TestConnectionToXeroApi(..)");

            AccessToken accessToken = accessTokenRepository.GetToken("");

            if (accessToken == null)
            {
                return(false);
            }

            IConsumerRequest consumerRequest = GetOAuthSession()
                                               .Request()
                                               .ForMethod("GET")
                                               .ForUri(GenerateFullEndpointUri(ConfigurationManager.AppSettings["XeroApiBaseUrl"], new ApiGetRequest <Organisation>()));

            try
            {
                Response response = CallXeroApiInternal(consumerRequest, accessTokenRepository);
                return(response != null && response.Organisations != null && response.Organisations.Count > 0);
            }
            catch (Exception ex)
            {
                Trace.WriteLine(ex.ToString());
                return(false);
            }
        }
        public IConsumerResponse Run(IConsumerRequest consumerRequest)
        {
            HttpWebRequest webRequest = consumerRequest.ToWebRequest();
            IConsumerResponse consumerResponse = null;

            var stopwatch = Stopwatch.StartNew();

            try
            {
                var httpWebResponse = webRequest.GetResponse() as HttpWebResponse;
                consumerResponse = new ConsumerResponse(httpWebResponse, GetElapsedTimespan(stopwatch));
            }
            catch (WebException webEx)
            {
                // I *think* it's safe to assume that the response will always be a HttpWebResponse...
                HttpWebResponse httpWebResponse = (HttpWebResponse)(webEx.Response);

                if (httpWebResponse == null)
                {
                    throw new ApplicationException("An HttpWebResponse could not be obtained from the WebException. Status was " + webEx.Status, webEx);
                }

                consumerResponse = new ConsumerResponse(httpWebResponse, webEx, GetElapsedTimespan(stopwatch));
            }

            return consumerResponse;
        }
Пример #4
0
        public IConsumerResponse RunConsumerRequest(IConsumerRequest consumerRequest)
        {
            int retryCounter = 2;

            while (retryCounter-- > 0)
            {
                IConsumerResponse consumerResponse = ConsumerRequestRunner.Run(consumerRequest);
                LogMessage(consumerRequest, consumerResponse);

                if (consumerResponse.IsForbiddenResponse)
                {
                    // Catch http 403 errors generated by IIS that are actually html pages warning about certificate issues..
                    throw new AuthenticationException(string.Format("The API server returned http {0} with content type {1}. See the inner exception for more details.", (int)consumerResponse.ResponseCode, consumerResponse.ContentType), consumerResponse.WebException);
                }

                if (consumerResponse.IsTokenExpiredResponse && !string.IsNullOrEmpty(consumerRequest.Context.SessionHandle))
                {
                    // Refresh the access token and try again..
                    AccessToken newAccessToken = RenewAccessToken();
                    consumerRequest.SignWithToken(newAccessToken, false);
                    continue;
                }

                if (consumerResponse.IsOAuthProblemResponse)
                {
                    // A usable response wasn't returned..
                    throw new OAuthException(consumerResponse, consumerRequest.Context, consumerResponse.ToProblemReport());
                }

                return(consumerResponse);
            }

            throw new ApplicationException("The consumer request could not be executed into a valid consumer response");
        }
Пример #5
0
        public RequestToken GetRequestToken(Uri callbackUri)
        {
            IConsumerRequest request = Request()
                                       .ForMethod("GET")
                                       .AlterContext(context => context.CallbackUrl = (callbackUri == null) ? "oob" : callbackUri.ToString())
                                       .AlterContext(context => context.Token       = null)
                                       .ForUri(ConsumerContext.RequestTokenUri)
                                       .SignWithoutToken();

            var results = request.Select(collection =>
                                         new
            {
                ConsumerContext.ConsumerKey,
                Token            = ParseResponseParameter(collection, Parameters.OAuth_Token),
                TokenSecret      = ParseResponseParameter(collection, Parameters.OAuth_Token_Secret),
                CallackConfirmed = WasCallbackConfimed(collection)
            });

            if (!results.CallackConfirmed && CallbackMustBeConfirmed)
            {
                throw Error.CallbackWasNotConfirmed();
            }

            var requestToken = new RequestToken
            {
                ConsumerKey = results.ConsumerKey,
                Token       = results.Token,
                TokenSecret = results.TokenSecret
            };

            TokenRepository.SaveRequestToken(requestToken);

            return(requestToken);
        }
Пример #6
0
 public void ApplyModifiedSinceDate(IConsumerRequest consumerRequest)
 {
     // Set the If-Modified-Since http header - if specified
     if (ModifiedSinceDate != null)
     {
         string modifiedSinceString = ModifiedSinceDate.Value.ToString("u");
         consumerRequest.Context.Headers.Add("If-Modified-Since", modifiedSinceString);
     }
 }
Пример #7
0
    public IConsumerResponse LogMessage(IConsumerRequest request, IConsumerResponse response)
    {
        if (MessageLogger != null)
        {
            MessageLogger.LogMessage(request, response);
        }

        return response;
    }
Пример #8
0
        public IConsumerResponse LogMessage(IConsumerRequest request, IConsumerResponse response)
        {
            if (MessageLogger != null)
            {
                MessageLogger.LogMessage(request, response);
            }

            return(response);
        }
Пример #9
0
        /// <summary>
        /// Creates a HttpRequest with oAuthSession (OAuth Token) and gets the response with invalidating user
        /// from QuickBooks for this app
        /// For Authorization: The request header must include the OAuth parameters defined by OAuth Core 1.0 Revision A.
        ///
        /// If the disconnect is successful, then the HTTP status code is 200 and
        /// the XML response includes the <ErrorCode> element with a 0 value.
        /// If an HTTP error is detected, then the HTTP status code is not 200.
        /// If an HTTP error is not detected but the disconnect is unsuccessful,
        /// then the HTTP status code is 200 and the response XML includes the <ErrorCode> element with a non-zero value.
        /// For example,  if the OAuth access token expires or is invalid for some other reason, then the value of <ErrorCode> is 270.
        /// </summary>
        /// <param name="sender">Sender of the event.</param>
        /// <param name="e">Event args.</param>
        protected void Page_Load(object sender, EventArgs e)
        {
            OAuthConsumerContext consumerContext = new OAuthConsumerContext
            {
                ConsumerKey     = ConfigurationManager.AppSettings["consumerKey"].ToString(),
                SignatureMethod = SignatureMethod.HmacSha1,
                ConsumerSecret  = ConfigurationManager.AppSettings["consumerSecret"].ToString()
            };

            OAuthSession oSession = new OAuthSession(consumerContext, Constants.OauthEndPoints.IdFedOAuthBaseUrl + Constants.OauthEndPoints.UrlRequestToken,
                                                     Constants.OauthEndPoints.AuthorizeUrl,
                                                     Constants.OauthEndPoints.IdFedOAuthBaseUrl + Constants.OauthEndPoints.UrlAccessToken);

            oSession.ConsumerContext.UseHeaderForOAuthParameters = true;
            if ((Session["accessToken"] + "").Length > 0)
            {
                oSession.AccessToken = new TokenBase
                {
                    Token       = HttpContext.Current.Session["accessToken"].ToString(),
                    ConsumerKey = ConfigurationManager.AppSettings["consumerKey"].ToString(),
                    TokenSecret = HttpContext.Current.Session["accessTokenSecret"].ToString()
                };

                IConsumerRequest conReq = oSession.Request();
                conReq = conReq.Get();
                conReq = conReq.ForUrl(Constants.IaEndPoints.DisconnectUrl);
                try
                {
                    conReq = conReq.SignWithToken();
                }
                catch (Exception ex)
                {
                    throw ex;
                }

                //Used just see the what header contains
                string header = conReq.Context.GenerateOAuthParametersForHeader();

                //This method will clean up the OAuth Token
                txtServiceResponse = conReq.ReadBody();

                //Reset All the Session Variables
                HttpContext.Current.Session.Remove("oauthToken");

                // Add the invalid access token into session for the display of the Disconnect btn
                HttpContext.Current.Session["InvalidAccessToken"] = HttpContext.Current.Session["accessToken"];

                // Dont remove the access token since this is required for Reconnect btn in the Blue dot menu
                // HttpContext.Current.Session.Remove("accessToken");

                // Dont Remove flag since we need to display the blue dot menu for Reconnect btn in the Blue dot menu
                // HttpContext.Current.Session.Remove("Flag");
                DisconnectFlg = "User is Disconnected from QuickBooks!";
                //Remove the Oauth access token from the OauthAccessTokenStorage.xml
                OauthAccessTokenStorageHelper.RemoveInvalidOauthAccessToken(Session["FriendlyEmail"].ToString(), Page);
            }
        }
Пример #10
0
        private static void GetHistoricalMatchupData()
        {
            StreamWriter sw = new StreamWriter(@"Data\AllMatchupScores" + DateTime.Now.ToString("yy-MM-dd.hh.mm.ss") + ".tab",
                                               false);
            List <string> weeks = new List <string>
            {
                "1",
                "2",
                "3",
                "4",
                "5",
                "6",
                "7",
                "8",
                "9",
                "10",
                "11",
                "12",
                "13",
                "14",
                "15",
                "16"
            };

            try
            {
                Dictionary <string, List <string> > seasonIds = GetAllSeasonIds();

                //write header line
                sw.WriteLine(
                    "Week\tWeekStart\tWeekEnd\tIsPlayoffs\tTeam1\tTeam2\tTeam1Points\tTeam2Points\tTeam1ExpPoints\tTeam2ExpPoints");

                foreach (string season in seasonIds.Keys)
                {
                    List <string> seasonKeys = seasonIds[season];

                    foreach (string week in weeks)
                    {
                        string scoreBoardQuery = "league/" + seasonKeys[0] + ".l." + seasonKeys[1] + "/scoreboard;week=" +
                                                 week;

                        IConsumerRequest responseRequest = session.Request().Get().ForUrl(ApiUrl + scoreBoardQuery);

                        List <Matchup> matchupData = new List <Matchup>();
                        //WriteOutScoreboardData(responseRequest, sw, week, ref matchupData, currentRosters);
                    }
                }
            }
            catch (Exception e)
            {
                LogError(e);
            }

            sw.Close();
        }
        public void LogMessage(IConsumerRequest request, IConsumerResponse response)
        {
            System.Diagnostics.Debug.WriteLine(string.Format("{0} {1}", request.Context.RequestMethod, request.Context.GenerateUrl()));
            System.Diagnostics.Debug.WriteLine(string.Format("HTTP {0} {1} Content-Type:{2} Content-Length:{3} Time-Taken:{4:F2}s",
                                                             (int)response.ResponseCode, response.ResponseCode, response.ContentType, response.ContentLength, response.TimeTaken.TotalSeconds));

            if (!string.IsNullOrEmpty(response.Content))
            {
                System.Diagnostics.Debug.WriteLine(string.Concat("Response body starts:", (response.Content.Length > 100) ? response.Content.Substring(0, 100) : response.Content));
            }
        }
Пример #12
0
 public static T Select <T>(this IConsumerRequest request, Func <NameValueCollection, T> selectFunc)
 {
     try
     {
         return(selectFunc(request.ToBodyParameters()));
     }
     catch (ArgumentNullException)
     {
         throw Error.FailedToParseResponse(request.ToString());
     }
 }
Пример #13
0
        public void LogMessage(IConsumerRequest request, IConsumerResponse response)
        {
            System.Diagnostics.Debug.WriteLine(string.Format("{0} {1}", request.Context.RequestMethod, request.Context.GenerateUrl()));
            System.Diagnostics.Debug.WriteLine(string.Format("HTTP {0} {1} Content-Type:{2} Content-Length:{3} Time-Taken:{4:F2}s",
                (int)response.ResponseCode, response.ResponseCode, response.ContentType, response.ContentLength, response.TimeTaken.TotalSeconds));

            if (!string.IsNullOrEmpty(response.Content))
            {
                System.Diagnostics.Debug.WriteLine(string.Concat("Response body starts:", (response.Content.Length > 100) ? response.Content.Substring(0, 100) : response.Content));
            }
        }
Пример #14
0
        public String AccessProtectedResource(HMEntities.UserProfiles.User currentUser, String parameters)
        {
            String       URL          = Chpp.ResourcesURL + "?" + parameters;
            OAuthSession oAuthSession = GetOAuthSession(Chpp.ConsumerKey, Chpp.ConsumerSecret);

            oAuthSession.AccessToken = new TokenBase()
            {
                ConsumerKey = Chpp.ConsumerKey, Token = currentUser.accessToken, TokenSecret = currentUser.accessTokenSecret
            };

            IConsumerRequest request = oAuthSession.Request().Get().ForUrl(URL);

            return(request.ToString());
        }
Пример #15
0
        /// <summary>
        /// Makes a GET request to the API
        /// </summary>
        /// <remarks>
        /// This method can GET-one or GET-many items
        /// </remarks>
        /// <typeparam name="TModel">The type of the model.</typeparam>
        /// <param name="accessTokenRepository">The access token repository.</param>
        /// <param name="getRequest">The get request.</param>
        /// <returns></returns>
        public Response Get <TModel>(ITokenRepository <AccessToken> accessTokenRepository, ApiGetRequest <TModel> getRequest)
            where TModel : ModelBase, new()
        {
            string xeroApiBaseUri = ConfigurationManager.AppSettings["XeroApiBaseUrl"];

            IConsumerRequest consumerRequest = GetOAuthSession()
                                               .Request()
                                               .ForMethod("GET")
                                               .ForUri(GenerateFullEndpointUri(xeroApiBaseUri, getRequest));

            // Set the If-Modified-Since http header - if specified
            getRequest.ApplyModifiedSinceDate(consumerRequest);

            return(CallXeroApiInternal(consumerRequest, accessTokenRepository));
        }
Пример #16
0
        /// <summary>
        ///
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="request"></param>
        /// <param name="selectFunc"></param>
        /// <returns></returns>
        public static T Select <T>(this IConsumerRequest request, Func <NameValueCollection, T> selectFunc)
        {
            try
            {
                return(selectFunc(request.ToBodyParameters()));
            }
            catch (ArgumentNullException argumentException)
            {
                if (argumentException.Message.Contains("Value cannot be null.\r\nParameter name: str"))
                {
                    throw Error.ExperiencingIssueWithCreatingUriDueToMissingAppConfig(argumentException);
                }

                throw Error.FailedToParseResponse(request.ToString());
            }
        }
        public void MakeAuthenticatedCallForTokenRsaSha1WithPostAndHeaders()
        {
            IOAuthSession session = CreateConsumer(SignatureMethod.RsaSha1);

            session.AccessToken = new TokenBase {
                ConsumerKey = "key", Token = "accesskey", TokenSecret = "accesssecret"
            };
            session.ConsumerContext.UseHeaderForOAuthParameters = true;

            IConsumerRequest context = session.Request().Post().ForUrl("http://term.ie/oauth/example/echo_api.php")
                                       .WithFormParameters(new { success = "true" })
                                       .SignWithToken();

            string contents = context.ToString();

            Assert.Equal("success=true", contents);
        }
Пример #18
0
        private static String GetConsumerResponseBody(IConsumerRequest request)
        {
            var body = String.Empty;

            using (var response = request.ToWebResponse())
            {
                using (var stream = response.GetResponseStream())
                {
                    if (stream != null)
                    {
                        var reader = new StreamReader(stream, Encoding.UTF8);
                        body = reader.ReadToEnd();
                    }
                }
            }

            return(body);
        }
Пример #19
0
        public void TestContactCanBePosted()
        {
            string contactName  = "Steve Jobs " + DateTime.Now.ToString("yyyy-MM-dd-hh-mm-ss");
            string contactEmail = contactName.Replace(' ', '-');

            string postContactRequestBody = string.Format("<Contacts><Contact><Name>{0}</Name><EmailAddress>{1}@nowhere.com</EmailAddress></Contact></Contacts>", contactName, contactEmail);

            IConsumerRequest postContactRequest = ConsumerSessionFactory.CreatePrivateConsumerSession()
                                                  .Request()
                                                  .ForMethod("POST")
                                                  .ForUri(new Uri(apiEndpointUrl))
                                                  .WithFormParameters(new { xml = postContactRequestBody })
                                                  .SignWithToken(ConsumerSessionFactory.CreatePrivateAccessToken());

            string postContactResponse = postContactRequest.ToString();

            Assert.IsNotEmpty(postContactResponse);
        }
Пример #20
0
        public string CreateAttachment(string endpointName, string itemId, Attachment attachment)
        {
            Uri uri = ConstructChildResourceUri(_oauthSession.ConsumerContext.BaseEndpointUri, endpointName, itemId, "Attachments", attachment.FileName);

            IConsumerRequest oauthRequest = _oauthSession.Request()
                                            .ForMethod("PUT")
                                            .ForUri(uri)
                                            .WithRequestStream(attachment.ContentStream)
                                            .SignWithToken();

            var consumerResponse = oauthRequest.ToConsumerResponse();

            if (consumerResponse.IsGoodResponse || consumerResponse.IsClientError)
            {
                return(consumerResponse.Content);
            }

            throw new ApiResponseException(consumerResponse);
        }
Пример #21
0
        public IConsumerRequest Request()
        {
            var context = new OAuthContext
            {
                UseAuthorizationHeader = ConsumerContext.UseHeaderForOAuthParameters
            };

            context.Cookies.Add(_cookies);
            context.FormEncodedParameters.Add(_formParameters);
            context.Headers.Add(_headers);
            context.QueryParameters.Add(_queryParameters);

            IConsumerRequest consumerRequest = _consumerRequestFactory.CreateConsumerRequest(context, ConsumerContext, AccessToken);

            consumerRequest.ProxyServerUri     = ProxyServerUri;
            consumerRequest.ResponseBodyAction = ResponseBodyAction;

            return(consumerRequest);
        }
Пример #22
0
        public string FindAttachments(string endpointName, string itemId)
        {
            Uri uri = ConstructChildResourceUri(_oauthSession.ConsumerContext.BaseEndpointUri, endpointName, itemId, "Attachments", null);

            IConsumerRequest oauthRequest = _oauthSession.Request()
                                            .ForMethod("GET")
                                            .WithAcceptHeader(MimeTypes.TextXml)
                                            .ForUri(uri)
                                            .SignWithToken();

            var consumerResponse = oauthRequest.ToConsumerResponse();

            if (consumerResponse.IsGoodResponse || consumerResponse.IsClientError)
            {
                return(consumerResponse.Content);
            }

            throw new ApiResponseException(consumerResponse);
        }
Пример #23
0
        /// <summary>
        /// Gets the OAuth header for request.
        /// </summary>
        /// <param name="oauthSession">The OAuth session.</param>
        /// <param name="webRequest">The web request.</param>
        /// <returns>
        /// Returns the OAuth header
        /// </returns>
        private string GetOAuthHeaderForRequest(IOAuthSession oauthSession, WebRequest webRequest)
        {
            IConsumerRequest consumerRequest = oauthSession.Request();

            consumerRequest = ConsumerRequestExtensions.ForMethod(consumerRequest, webRequest.Method);
            consumerRequest = ConsumerRequestExtensions.ForUri(consumerRequest, webRequest.RequestUri);
            if (webRequest.Headers.Count > 0)
            {
                ConsumerRequestExtensions.AlterContext(consumerRequest, context => context.Headers = webRequest.Headers);
            }

            if (this.AdditionalParameters != null)
            {
                consumerRequest.Context.AuthorizationHeaderParameters.Add(this.AdditionalParameters);
            }

            consumerRequest = consumerRequest.SignWithToken();
            return(consumerRequest.Context.GenerateOAuthParametersForHeader());
        }
Пример #24
0
        public Stream FindOneAttachment(string endpointName, string itemId, string attachmentIdOrFileName)
        {
            Uri uri = ConstructChildResourceUri(_oauthSession.ConsumerContext.BaseEndpointUri, endpointName, itemId, "Attachments", attachmentIdOrFileName);

            IConsumerRequest oauthRequest = _oauthSession.Request()
                                            .ForMethod("GET")
                                            .WithAcceptHeader(MimeTypes.Unknown)
                                            .ForUri(uri)
                                            .SignWithToken();

            var consumerResponse = oauthRequest.ToConsumerResponse();

            if (consumerResponse.IsGoodResponse || consumerResponse.IsClientError)
            {
                return(consumerResponse.Stream);
            }

            throw new ApiResponseException(consumerResponse);
        }
Пример #25
0
        public string GetResource(string parameters)
        {
            System.Console.Out.WriteLine("Requesting: {0}", parameters);

            string           url     = OAuthProtectedResourceUrl + "?" + parameters;
            IConsumerRequest request = _oAuthSession.Request().Get().ForUrl(url);

            string result = request.ToString();

            if (result.Contains(@"chpperror.xml")) // <FileName>chpperror.xml</FileName>
            {
                int    errorCode        = -1;
                string errorDescription = "unknown CHPP error";

                try
                {
                    XDocument doc    = XDocument.Load(new StringReader(result));
                    XElement  elRoot = doc.Root;

                    if (elRoot != null)
                    {
                        XElement elErrorCode = elRoot.Element("ErrorCode");
                        if (elErrorCode != null)
                        {
                            int.TryParse(elErrorCode.Value, out errorCode);
                        }

                        XElement elErrorDescription = elRoot.Element("Error");
                        if (elErrorDescription != null && !string.IsNullOrEmpty(elErrorDescription.Value))
                        {
                            errorDescription = elErrorDescription.Value;
                        }
                    }
                }
                finally
                {
                    throw new ChppException(errorCode, errorDescription);
                }
            }

            return(result);
        }
Пример #26
0
        public void TestEmptyContactNameReturnsHttp400Error()
        {
            string contactName  = "Steve Jobs " + DateTime.Now.ToString("yyyy-MM-dd-hh-mm-ss");
            string contactEmail = contactName.Replace(' ', '-');

            string postContactRequestBody  = string.Format("<Contacts><Contact><Name></Name><EmailAddress>{0}@nowhere.com</EmailAddress></Contact></Contacts>", contactEmail);
            string postContactResponseBody = string.Empty;

            IConsumerRequest postContactRequest = ConsumerSessionFactory.CreatePrivateConsumerSession()
                                                  .Request()
                                                  .ForMethod("POST")
                                                  .ForUri(new Uri(apiEndpointUrl))
                                                  .WithFormParameters(new { xml = postContactRequestBody })
                                                  .SignWithToken(ConsumerSessionFactory.CreatePrivateAccessToken());

            try
            {
                postContactResponseBody = postContactRequest.ToString();
            }
            catch (OAuthException ex)
            {
                Assert.Fail(string.Format("An OAuth Exception occurred: {0}", ex.Report));
            }
            catch (WebException ex)
            {
                postContactResponseBody = ex.Response.GetResponseStream().ReadToEnd();
            }

            // Even if an error occurs, the response body should have been captured
            Assert.IsNotEmpty(postContactResponseBody);

            Console.WriteLine("Error Number : " + postContactResponseBody.ReadSingleNode(@"/ApiException/ErrorNumber"));
            Console.WriteLine("Error Message : " + postContactResponseBody.ReadSingleNode(@"/ApiException/Message"));

            foreach (string validationError in postContactResponseBody.ReadNodes(@"/ApiException/Elements/DataContractBase/ValidationErrors/ValidationError"))
            {
                Console.WriteLine("Validation Error : " + validationError);
            }
        }
Пример #27
0
        public string ApplyAllocation(CreditNote creditNote, string body)
        {
            Uri uri = ConstructChildResourceUri(_oauthSession.ConsumerContext.BaseEndpointUri, "CreditNotes", creditNote.CreditNoteID.ToString(), "Allocations", null);

            IConsumerRequest oauthRequest = _oauthSession.Request()
                                            .ForMethod("PUT")
                                            .WithAcceptHeader(MimeTypes.TextXml)
                                            .ForUri(uri)
                                            .SignWithToken()
                                            .WithBody(body);

            var consumerResponse = oauthRequest.ToConsumerResponse();

            // Check for <ApiException> response message
            if (consumerResponse.Content.StartsWith("<ApiException"))
            {
                ApiExceptionDetails details = ModelSerializer.DeserializeTo <ApiExceptionDetails>(consumerResponse.Content);
                throw new ApiException(details);
            }

            return(consumerResponse.Content);
        }
Пример #28
0
		public void generate_request_with_raw_body_includes_body_hash()
		{
			var session = new OAuthSession(new OAuthConsumerContext {ConsumerKey = "consumer", UseHeaderForOAuthParameters = true}, "http://localhost/request", "http://localhost/userauth",
			                               "http://localhost/access");

			var accessToken = new TokenBase {ConsumerKey = "consumer", Token = "token", TokenSecret = "secret"};

			byte[] rawContents = Encoding.UTF8.GetBytes("Hello World!");

			IConsumerRequest content = session
				.EnableOAuthRequestBodyHashes()
				.Request(accessToken)
				.Post()
				.ForUrl("http://localhost/resource")
				.WithRawContent(rawContents);

			RequestDescription description = content.GetRequestDescription();

			Assert.Equal(rawContents, description.RawBody);

			Assert.Contains("oauth_body_hash=\"Lve95gjOVATpfV8EL5X4nxwjKHE%3D\"", description.Headers[Parameters.OAuth_Authorization_Header]);
		}
        public static string callPlatform(RestProfile profile, string url)
        {
            OAuthConsumerContext consumerContext = new OAuthConsumerContext
            {
                ConsumerKey     = ConfigurationManager.AppSettings["consumerKey"].ToString(),
                SignatureMethod = SignatureMethod.HmacSha1,
                ConsumerSecret  = ConfigurationManager.AppSettings["consumerSecret"].ToString()
            };

            OAuthSession oSession = new OAuthSession(consumerContext, Constants.OauthEndPoints.IdFedOAuthBaseUrl + Constants.OauthEndPoints.UrlRequestToken,
                                                     Constants.OauthEndPoints.AuthorizeUrl,
                                                     Constants.OauthEndPoints.IdFedOAuthBaseUrl + Constants.OauthEndPoints.UrlAccessToken);

            oSession.ConsumerContext.UseHeaderForOAuthParameters = true;
            if (profile.OAuthAccessToken.Length > 0)
            {
                oSession.AccessToken = new TokenBase
                {
                    Token       = profile.OAuthAccessToken,
                    ConsumerKey = ConfigurationManager.AppSettings["consumerKey"].ToString(),
                    TokenSecret = profile.OAuthAccessTokenSecret
                };

                IConsumerRequest conReq = oSession.Request();
                conReq = conReq.Get();
                conReq = conReq.ForUrl(url);
                try
                {
                    conReq = conReq.SignWithToken();
                    return(conReq.ReadBody());
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
            return("");
        }
        private string GetDevDefinedOAuthHeader(string consumerKey, string consumerSecret, string accessToken, string accessTokenSecret, HttpWebRequest webRequest, string requestBody)
        {
            OAuthConsumerContext consumerContext = new OAuthConsumerContext
            {
                ConsumerKey                 = consumerKey,
                SignatureMethod             = SignatureMethod.HmacSha1,
                ConsumerSecret              = consumerSecret,
                UseHeaderForOAuthParameters = true
            };

            //We already have OAuth tokens, so OAuth URIs below are not used - set to example.com
            OAuthSession oSession = new OAuthSession(consumerContext, "https://www.example.com",
                                                     "https://www.example.com",
                                                     "https://www.example.com");

            oSession.AccessToken = new TokenBase
            {
                Token       = accessToken,
                ConsumerKey = consumerKey,
                TokenSecret = accessTokenSecret
            };

            IConsumerRequest consumerRequest = oSession.Request();

            consumerRequest = ConsumerRequestExtensions.ForMethod(consumerRequest, webRequest.Method);
            if (!string.IsNullOrEmpty(requestBody))
            {
                consumerRequest = consumerRequest.Post().WithRawContentType(webRequest.ContentType).WithRawContent(System.Text.Encoding.ASCII.GetBytes(requestBody));
            }
            else
            {
                consumerRequest = consumerRequest.Get();
            }

            consumerRequest = ConsumerRequestExtensions.ForUri(consumerRequest, webRequest.RequestUri);
            consumerRequest = consumerRequest.SignWithToken();
            return(consumerRequest.Context.GenerateOAuthParametersForHeader());
        }
Пример #31
0
        public bool doDisconnect()
        {
            OAuthSession oas = getOAuthSession();

            oas.ConsumerContext.UseHeaderForOAuthParameters = true;
            oas.AccessToken = getAccessToken();

            IConsumerRequest icr = oas.Request();

            icr = icr.Get();
            icr = icr.ForUrl(QB_DISCONNECT);
            icr = icr.SignWithToken();
            var ret = icr.ToWebResponse();

            if (ret.StatusCode.ToInt() == 200)
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
        public IConsumerResponse Run(IConsumerRequest consumerRequest)
        {
            HttpWebRequest webRequest = consumerRequest.ToWebRequest();
            IConsumerResponse consumerResponse = null;

            try
            {
                consumerResponse = new ConsumerResponse(webRequest.GetResponse() as HttpWebResponse);
            }
            catch (WebException webEx)
            {
                // I *think* it's safe to assume that the response will always be a HttpWebResponse...
                HttpWebResponse httpWebResponse = (HttpWebResponse)(webEx.Response);

                if (httpWebResponse == null)
                {
                    throw new ApplicationException("An HttpWebResponse could not be obtained from the WebException");
                }

                consumerResponse = new ConsumerResponse(httpWebResponse, webEx);
            }

            return consumerResponse;
        }
Пример #33
0
    public IConsumerResponse RunConsumerRequest(IConsumerRequest consumerRequest)
    {
        int retryCounter = 2;
        while (retryCounter-- > 0)
        {
            IConsumerResponse consumerResponse = ConsumerRequestRunner.Run(consumerRequest);
            LogMessage(consumerRequest, consumerResponse);

            if (consumerResponse.IsForbiddenResponse)
            {
                // Catch http 403 errors generated by IIS that are actually html pages warning about certificate issues..
                throw new AuthenticationException(string.Format("The API server returned http {0} with content type {1}. See the inner exception for more details.", (int)consumerResponse.ResponseCode, consumerResponse.ContentType), consumerResponse.WebException);
            }

            if (consumerResponse.IsTokenExpiredResponse && !string.IsNullOrEmpty(consumerRequest.Context.SessionHandle))
            {
                // Refresh the access token and try again..
                AccessToken newAccessToken = RenewAccessToken();
                consumerRequest.SignWithToken(newAccessToken, false);
                continue;
            }
            
            if (consumerResponse.IsOAuthProblemResponse)
            {
                // A usable response wasn't returned..
                throw new OAuthException(consumerResponse, consumerRequest.Context, consumerResponse.ToProblemReport());
            }

            return consumerResponse;
        }

        throw new ApplicationException("The consumer request could not be executed into a valid consumer response");
    }
Пример #34
0
 /// <summary>
 /// Set the DELETE consumer request method.
 /// </summary>
 /// <param name="request">The consumer request source.</param>
 /// <returns>The consumer request.</returns>
 public static IConsumerRequest Delete(this IConsumerRequest request)
 {
     return(request.ForMethod("DELETE"));
 }
Пример #35
0
 private XDocument ParseResponse(IConsumerRequest request)
 {
     XDocument document = request.ToDocument();
     // This is where I should be checking for error codes - but I don't have any test data yet.
     return document;
 }
Пример #36
0
        public IConsumerResponse Run(IConsumerRequest consumerRequest)
        {
            HttpWebRequest webRequest = consumerRequest.ToWebRequest();
            IConsumerResponse consumerResponse = null;

            var stopwatch = Stopwatch.StartNew();

            try
            {
                var httpWebResponse = webRequest.GetResponse() as HttpWebResponse;
                consumerResponse = new ConsumerResponse(httpWebResponse, GetElapsedTimespan(stopwatch));
            }
            catch (WebException webEx)
            {
                // I *think* it's safe to assume that the response will always be a HttpWebResponse...
                HttpWebResponse httpWebResponse = (HttpWebResponse)(webEx.Response);

                if (httpWebResponse == null)
                {
                    //Generate a more helpful error message, hopefully this will save someone else hours in "the abyss"
                    if (webEx.Message.ToLower().Contains("could not create ssl/tls secure channel"))
                    {
                        //Find out what certificates were in the web request
                        var clientCerts = webRequest.ClientCertificates;
                        var certString = "";
                        foreach (var clientCert in clientCerts)
                        {
                            var thumbprint = "unknown";
                            var name = "unknown";

                            var x509Certificate2 = clientCert as X509Certificate2;
                            if (x509Certificate2 != null)
                            {
                                thumbprint = x509Certificate2.Thumbprint;
                                name = x509Certificate2.GetNameInfo(X509NameType.SimpleName, false);
                            }

                            certString += String.Format("[name: \"{0}\", serial: \"{1}\", thumbprint: \"{2}\"] ",
                                                        name,
                                                        clientCert.GetSerialNumberString(),
                                                        thumbprint);
                        }

                        //Try get the username that is running the current process (so we know who to give permissions to)
                        var processUser = System.Security.Principal.WindowsIdentity.GetCurrent();
                        var userId = "your current process";
                        if (processUser != null)
                        {
                            userId = String.Format("\"{0}\"", processUser.Name);
                        }

                        throw new WebException(String.Format("{0} Check that {1} has permission to read the following certificates: {2}", webEx.Message, userId, certString));
                    }

                    throw new ApplicationException("An HttpWebResponse could not be obtained from the WebException. Status was " + webEx.Status, webEx);
                }

                consumerResponse = new ConsumerResponse(httpWebResponse, webEx, GetElapsedTimespan(stopwatch));
            }

            return consumerResponse;
        }
Пример #37
0
 /// <summary>
 /// Set the POST consumer request method.
 /// </summary>
 /// <param name="request">The consumer request source.</param>
 /// <returns>The consumer request.</returns>
 public static IConsumerRequest Post(this IConsumerRequest request)
 {
     return(request.ForMethod("POST"));
 }
Пример #38
0
		public IConsumerResponse Run (IConsumerRequest consumerRequest)
		{
			return null;
		}