/// <summary> /// Gets a request token from the provider. After acquiring a request token, the user should be redirected /// to the website of the provider for approving the application. If successful, the user will be redirected /// back to the specified callback URL where you then can exchange the request token for an access token. /// </summary> /// <returns>An instance of <see cref="SocialOAuthRequestTokenResponse"/> representing the response.</returns> public virtual SocialOAuthRequestTokenResponse GetRequestToken() { // Make the call to the API/provider SocialHttpResponse response = GetRequestTokenResponse(); // Parse the response body SocialOAuthRequestToken body = SocialOAuthRequestToken.Parse(this, response.Body); // Parse the response return(SocialOAuthRequestTokenResponse.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.")); } }
/// <summary> /// Initializes a new instance from the specified <paramref name="response"/> and <paramref name="body"/>. /// </summary> /// <param name="response">The raw response.</param> /// <param name="body">The object representing the response body.</param> protected SocialOAuthRequestTokenResponse(SocialHttpResponse response, SocialOAuthRequestToken body) : base(response) { Body = body; }
/// <summary> /// Initializes a new instance from the specified <paramref name="response"/> and <paramref name="body"/>. /// </summary> /// <param name="response">The raw response.</param> /// <param name="body">The object representing the response body.</param> /// <returns>An instance of <see cref="SocialOAuthRequestTokenResponse"/>.</returns> public static SocialOAuthRequestTokenResponse ParseResponse(SocialHttpResponse response, SocialOAuthRequestToken body) { return(response == null ? null : new SocialOAuthRequestTokenResponse(response, body)); }
/// <summary> /// Initializes a new instance from the specified <paramref name="response"/> and <paramref name="body"/>. /// </summary> /// <param name="response">The raw response.</param> /// <param name="body">The object representing the response body.</param> /// <returns>An instance of <see cref="SocialOAuthRequestTokenResponse"/>.</returns> public static SocialOAuthRequestTokenResponse ParseResponse(SocialHttpResponse response, SocialOAuthRequestToken body) { if (response == null) { throw new ArgumentNullException(nameof(response)); } return(new SocialOAuthRequestTokenResponse(response, body)); }