/// <summary> /// Action Results for Index, OAuthToken, OAuthVerifyer and RealmID is recieved as part of Response /// and are stored inside Session object for future references /// NOTE: Session storage is only used for demonstration purpose only. /// </summary> /// <param name="sender">Sender of the event.</param> /// <param name="e">Event Args.</param> protected void Page_Load(object sender, EventArgs e) { if (Request.QueryString.HasKeys()) { // This value is used to Get Access Token. _oauthVerifyer = Request.QueryString["oauth_verifier"].ToString(); _realmid = Request.QueryString["realmId"].ToString(); HttpContext.Current.Session["realm"] = _realmid; //If dataSource is QBO call QuickBooks Online Services, else call QuickBooks Desktop Services _dataSource = Request.QueryString["dataSource"].ToString(); HttpContext.Current.Session["dataSource"] = _dataSource; getAccessToken(); //Production applications should securely store the Access Token. //In this template, encrypted Oauth access token is persisted in OauthAccessTokenStorage.xml OauthAccessTokenStorageHelper.StoreOauthAccessToken(Page); // This value is used to redirect to Default.aspx from Cleanup page when user clicks on ConnectToInuit widget. Session["RedirectToDefault"] = true; } else { Response.Write("No OAuth token was received"); } }
/// <summary> /// Page Load Event, pulls Customer data from QuickBooks using SDK and Binds it to Grid /// </summary> /// <param name="sender">Sender of the event.</param> /// <param name="e">Event Args.</param> protected void Page_Load(object sender, EventArgs e) { if (HttpContext.Current.Session.Keys.Count > 0) { realmId = HttpContext.Current.Session["realm"].ToString(); accessToken = HttpContext.Current.Session["accessToken"].ToString(); accessTokenSecret = HttpContext.Current.Session["accessTokenSecret"].ToString(); consumerKey = ConfigurationManager.AppSettings["consumerKey"].ToString(CultureInfo.InvariantCulture); consumerSecret = ConfigurationManager.AppSettings["consumerSecret"]; dataSourcetype = HttpContext.Current.Session["dataSource"].ToString().ToLower() == "qbd" ? IntuitServicesType.QBD : IntuitServicesType.QBO; OAuthRequestValidator oauthValidator = new OAuthRequestValidator(accessToken, accessTokenSecret, consumerKey, consumerSecret); ServiceContext context = new ServiceContext(oauthValidator, realmId, dataSourcetype); DataServices commonService = new DataServices(context); try { switch (dataSourcetype) { case IntuitServicesType.QBD: var qbdCustomerQuery = new Intuit.Ipp.Data.Qbd.CustomerQuery(); qbdCustomerQuery.ItemElementName = Intuit.Ipp.Data.Qbd.ItemChoiceType4.StartPage; qbdCustomerQuery.Item = "1"; qbdCustomerQuery.ChunkSize = "10"; var qbdCustomers = qbdCustomerQuery.ExecuteQuery <Intuit.Ipp.Data.Qbd.Customer>(context).ToList(); grdQuickBooksCustomers.DataSource = qbdCustomers; break; case IntuitServicesType.QBO: var qboCustomer = new Intuit.Ipp.Data.Qbo.Customer(); var qboCustomers = commonService.FindAll(qboCustomer, 1, 10).ToList(); grdQuickBooksCustomers.DataSource = qboCustomers; break; } grdQuickBooksCustomers.DataBind(); if (grdQuickBooksCustomers.Rows.Count > 0) { GridLocation.Visible = true; MessageLocation.Visible = false; } else { GridLocation.Visible = false; MessageLocation.Visible = true; } } catch (Intuit.Ipp.Exception.InvalidTokenException) { //Remove the Oauth access token from the OauthAccessTokenStorage.xml OauthAccessTokenStorageHelper.RemoveInvalidOauthAccessToken(Session["FriendlyEmail"].ToString(), Page); Session["show"] = true; Response.Redirect("~/Default.aspx"); } } }
/// <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.PlatformApiEndpoints.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); } }
/// <summary> /// Action Results for Index, uses DotNetOpenAuth for creating OpenId Request with Intuit /// and handling response recieved. /// </summary> /// <param name="sender">Sender of the event.</param> /// <param name="e">Event Args.</param> protected void Page_Load(object sender, EventArgs e) { var openid_identifier = ConfigurationManager.AppSettings["openid_identifier"]; var returnUrl = "OpenIdHandler.aspx"; var response = openid.GetResponse(); if (response == null) { // Stage 2: user submitting Identifier Identifier id; if (Identifier.TryParse(openid_identifier, out id)) { try { IAuthenticationRequest request = openid.CreateRequest(openid_identifier); FetchRequest fetch = new FetchRequest(); fetch.Attributes.Add(new AttributeRequest(WellKnownAttributes.Contact.Email)); fetch.Attributes.Add(new AttributeRequest(WellKnownAttributes.Name.FullName)); request.AddExtension(fetch); request.RedirectToProvider(); } catch (ProtocolException ex) { throw ex; } } } else { if (response.FriendlyIdentifierForDisplay == null) { Response.Redirect("/OpenIdHandler.aspx"); } // Stage 3: OpenID Provider sending assertion response Session["FriendlyIdentifier"] = response.FriendlyIdentifierForDisplay; FetchResponse fetch = response.GetExtension <FetchResponse>(); if (fetch != null) { Session["OpenIdResponse"] = "True"; Session["FriendlyEmail"] = fetch.GetAttributeValue(WellKnownAttributes.Contact.Email); Session["FriendlyName"] = fetch.GetAttributeValue(WellKnownAttributes.Name.FullName); //get the OAuth Access token for the user from OauthAccessTokenStorage.xml OauthAccessTokenStorageHelper.GetOauthAccessTokenForUser(Session["FriendlyEmail"].ToString(), Page); } string query = Request.Url.Query; if (!string.IsNullOrWhiteSpace(query) && query.ToLower().Contains("disconnect=true")) { Session["accessToken"] = "dummyAccessToken"; Session["accessTokenSecret"] = "dummyAccessTokenSecret"; Session["Flag"] = true; Response.Redirect("CleanupOnDisconnect.aspx"); } if (!string.IsNullOrEmpty(returnUrl)) { Response.Redirect("Default.aspx"); } } }