/// <summary> /// Following the 3-legged authorization, you can exchange a request token for an access token /// using this method. This is the third and final step of the authorization process. /// </summary> /// <param name="verifier">The verification key received after the user has accepted the app.</param> /// <returns>An instance of <see cref="SocialOAuthAccessTokenResponse"/> representing the response.</returns> /// <see> /// <cref>https://dev.twitter.com/docs/auth/3-legged-authorization</cref> /// </see> public virtual SocialOAuthAccessTokenResponse GetAccessToken(string verifier) { // Make the call to the API/provider SocialHttpResponse response = GetAccessTokenResponse(verifier); // Parse the response body SocialOAuthAccessToken body = SocialOAuthAccessToken.Parse(this, response.Body); // Parse the response return(SocialOAuthAccessTokenResponse.ParseResponse(response, body)); }
/// <summary> /// Following the 3-legged authorization, you can exchange a request token for an access token /// using this method. This is the third and final step of the authorization process. /// </summary> /// <param name="verifier">The verification key received after the user has accepted the app.</param> /// <returns>An instance of <see cref="SocialOAuthAccessTokenResponse"/> representing the response.</returns> /// <see> /// <cref>https://dev.twitter.com/docs/auth/3-legged-authorization</cref> /// </see> public virtual SocialOAuthAccessTokenResponse GetAccessToken(string verifier) { // Some error checking if (String.IsNullOrWhiteSpace(verifier)) { throw new ArgumentNullException(nameof(verifier)); } // Make the call to the API/provider SocialHttpResponse response = GetAccessTokenResponse(verifier); // Parse the response body SocialOAuthAccessToken body = SocialOAuthAccessToken.Parse(this, response.Body); // Parse the response return(SocialOAuthAccessTokenResponse.ParseResponse(response, body)); }
public ActionResult LinkTwitter(string oauth_token, string oauth_verifier) { // Get the member of the current ID int memberId = Members.GetCurrentMemberId(); if (memberId <= 0) { return(GetErrorResult("Oh noes! An error happened.")); } try { IPublishedContent profilePage = Umbraco.TypedContent(1057); if (profilePage == null) { return(GetErrorResult("Oh noes! This really shouldn't happen.")); } // Initialize the OAuth client TwitterOAuthClient client = new TwitterOAuthClient(); client.ConsumerKey = WebConfigurationManager.AppSettings["twitterConsumerKey"]; client.ConsumerSecret = WebConfigurationManager.AppSettings["twitterConsumerSecret"]; // Grab the request token from the session SocialOAuthRequestToken requestToken = Session[oauth_token] as SocialOAuthRequestToken; if (requestToken == null) { return(GetErrorResult("Session expired? Please click the link below and try to link with your Twitter account again ;)")); } // Update the OAuth client with information from the request token client.Token = requestToken.Token; client.TokenSecret = requestToken.TokenSecret; // Make the request to the Twitter API to get the access token SocialOAuthAccessTokenResponse response = client.GetAccessToken(oauth_verifier); // Get the access token from the response body TwitterOAuthAccessToken accessToken = (TwitterOAuthAccessToken)response.Body; // Update the OAuth client properties client.Token = accessToken.Token; client.TokenSecret = accessToken.TokenSecret; // Initialize a new service instance from the OAUth client var service = Skybrud.Social.Twitter.TwitterService.CreateFromOAuthClient(client); // Get some information about the authenticated Twitter user TwitterAccount user; try { // Initialize the options for the request (we don't need the status) var options = new TwitterVerifyCrendetialsOptions { SkipStatus = true }; // Make the request to the Twitter API var userResponse = service.Account.VerifyCredentials(options); // Update the "user" variable user = userResponse.Body; } catch (Exception ex) { LogHelper.Error <ProfileController>("Unable to get user information from the Twitter API", ex); return(GetErrorResult("Oh noes! An error happened.")); } // Get a reference to the member searcher BaseSearchProvider searcher = ExamineManager.Instance.SearchProviderCollection["InternalMemberSearcher"]; // Initialize new search criteria for the Twitter screen name ISearchCriteria criteria = searcher.CreateSearchCriteria(); criteria = criteria.RawQuery($"twitter:{user.ScreenName}"); // Check if there are other members with the same Twitter screen name foreach (var result in searcher.Search(criteria)) { if (result.Id != memberId) { LogHelper.Info <ProfileController>("Failed setting Twitter screen name for user with ID " + memberId + ". Username is already used by member with ID " + result.Id + "."); return(GetErrorResult("Another member already exists with the same Twitter screen name.")); } } // Get the member from the member service var ms = ApplicationContext.Services.MemberService; var mem = ms.GetById(memberId); // Update the "twitter" property and save the value mem.SetValue("twitter", user.ScreenName); mem.SetValue("twitterId", user.IdStr); mem.SetValue("twitterData", user.JObject.ToString()); ms.Save(mem); // Clear the runtime cache for the member ApplicationContext.ApplicationCache.RuntimeCache.ClearCacheItem("MemberData" + mem.Username); // Redirect the member back to the profile page return(RedirectToUmbracoPage(1057)); } catch (Exception ex) { LogHelper.Error <ProfileController>("Unable to link with Twitter user for member with ID " + memberId, ex); return(GetErrorResult("Oh noes! An error happened.")); } }