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); }
/// <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; }
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"); }
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); }
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); } }
public IConsumerResponse LogMessage(IConsumerRequest request, IConsumerResponse response) { if (MessageLogger != null) { MessageLogger.LogMessage(request, response); } return response; }
public IConsumerResponse LogMessage(IConsumerRequest request, IConsumerResponse response) { if (MessageLogger != null) { MessageLogger.LogMessage(request, response); } return(response); }
/// <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); } }
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)); } }
public static T Select <T>(this IConsumerRequest request, Func <NameValueCollection, T> selectFunc) { try { return(selectFunc(request.ToBodyParameters())); } catch (ArgumentNullException) { throw Error.FailedToParseResponse(request.ToString()); } }
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()); }
/// <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)); }
/// <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); }
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); }
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); }
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); }
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); }
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); }
/// <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()); }
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); }
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); }
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); } }
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); }
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()); }
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; }
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"); }
/// <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")); }
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; }
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; }
/// <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")); }
public IConsumerResponse Run (IConsumerRequest consumerRequest) { return null; }