private static OAuth1Helper getOAuthHelper(string url, string httpMethod, string token, string secret) { OAuth1Token oAuth1Token = new OAuth1Token(SettingsTwitter.TwitterAppId, SettingsTwitter.TwitterAppSecret, token, secret); OAuth1Helper oAuth1Helper = new OAuth1Helper(url, oAuth1Token, httpMethod); return(oAuth1Helper); }
public async Task <TokenValidationResult> ValidateAccessTokenAsync(string token, string expectedScope = null) { var tokenValues = OAuth1Helper.GetResponseValues(token); tokenValues.TryGetValue("access_token", out string accessToken); token = accessToken ?? token; var endpoint = userInfoEndpoint.Replace(tokenReplacement, token); var response = await _client.GetAsync(endpoint); if (response.IsSuccessStatusCode) { var userInfo = JsonDocument.Parse(await response.Content.ReadAsStringAsync()); var claims = new List <Claim>(); claims.AddRange(userInfo.RootElement.EnumerateObject().Select(item => new Claim(item.Name, item.Value.ToString()))); return(new TokenValidationResult { IsError = false, Claims = claims }); } return(new TokenValidationResult { IsError = true, ErrorDescription = response.ReasonPhrase }); }
private string GetToken(string url, string httpMethod, string token, string secret, Dictionary <string, string> query) { OAuth1Helper oAuth1Helper = getOAuthHelper(url, httpMethod, token, secret); var qstr = oAuth1Helper.GetQueryString(query); return(oAuth1Helper.GenerateAuthorizationHeader()); }
public async Task <IActionResult> AccessToken([FromBody] dynamic oauthValues) { Uri endpoint = new Uri(accessTokenEndpoint); var tokens = (JsonElement)oauthValues; tokens.TryGetProperty("oauth_token", out JsonElement oauthToken); tokens.TryGetProperty("oauth_token_secret", out JsonElement oauthTokenSecret); tokens.TryGetProperty("oauth_verifier", out JsonElement oauthVerifier); string authorizationHeaderParams = _oauthHelper.GetAuthorizationHeader( endpoint, "POST", _twitterAuthKeys.ConsumerAPIKey, _twitterAuthKeys.ConsumerSecret, oauthToken.ToString(), oauthTokenSecret.ToString(), null); _client.DefaultRequestHeaders.Clear(); _client.DefaultRequestHeaders.Accept.Add(OAuth1Helper.GetMediaTypeHeader()); _client.DefaultRequestHeaders.Add("Authorization", authorizationHeaderParams); var httpContent = new FormUrlEncodedContent(new[] { new KeyValuePair <string, string>("oauth_verifier", oauthVerifier.ToString()) }); var response = await _client.PostAsync(endpoint, httpContent); if (response.IsSuccessStatusCode) { var responseContent = await response.Content.ReadAsStringAsync(); return(Ok(responseContent)); } else { var errorMsg = await response.Content.ReadAsStringAsync(); return(BadRequest(errorMsg)); } }
public async Task <IActionResult> RequestToken([FromBody] dynamic oauthValue) { Uri endpoint = new Uri(requestTokenEndpoint); var tokens = (JsonElement)oauthValue; tokens.TryGetProperty("oauth_callback", out JsonElement oauthCallback); string authorizationHeader = _oauthHelper.GetAuthorizationHeader( endpoint, "POST", _twitterAuthKeys.ConsumerAPIKey, _twitterAuthKeys.ConsumerSecret, null, null, oauthCallback.ToString()); _client.DefaultRequestHeaders.Clear(); _client.DefaultRequestHeaders.Accept.Add(OAuth1Helper.GetMediaTypeHeader()); _client.DefaultRequestHeaders.Add("Authorization", authorizationHeader); var response = await _client.PostAsync(endpoint, null); if (response.IsSuccessStatusCode) { var responseContent = await response.Content.ReadAsStringAsync(); return(Ok(responseContent)); } else { var errorMsg = await response.Content.ReadAsStringAsync(); return(BadRequest(errorMsg)); } }
public TwitterTokenValidator(HttpClient client, OAuth1Helper oauthHelper, IOptions <SocialLoginOptions> options) { if (options is null) { throw new ArgumentNullException(nameof(options)); } _client = client ?? throw new ArgumentNullException(nameof(client)); _oauthHelper = oauthHelper ?? throw new ArgumentNullException(nameof(oauthHelper)); _options = options.Value; }
/// <summary> /// Fetches Data wrt given Tweet ID /// </summary> /// <param name="taskInfo">contains the TweetID for which data is to be fetched</param> public override async Task <List <ItemMetadata> > FetchData(ConnectorTask taskInfo, string sourceInfo) { Trace.TraceInformation("Data fetch Started"); List <ItemMetadata> itemMetaData = new List <ItemMetadata>(); SourceInfoTwitter twitterSourceInfo = JsonConvert.DeserializeObject <SourceInfoTwitter>(sourceInfo); OAuth1Token token = new OAuth1Token(SettingsTwitter.TwitterApiKey, SettingsTwitter.TwitterApiSecretKey, twitterSourceInfo.ClientToken, twitterSourceInfo.ClientSecret); var filterTime = taskInfo.EndTime; OAuth1Helper oAuth1Helper = new OAuth1Helper(url, token, HttpMethod.Get.ToString().ToUpperInvariant()); while (true) { Dictionary <string, string> param = getParams(taskInfo, twitterSourceInfo); string queryString = oAuth1Helper.GetQueryString(param); string authHeader = oAuth1Helper.GenerateAuthorizationHeader(); AuthenticationHeaderValue header = new AuthenticationHeaderValue("OAuth", authHeader); List <Tweet> tweets = await downloader.GetWebContent <List <Tweet>, ErrorsTwitter>(queryString, header); bool isScheduleCompleted = false; if (tweets != null && tweets.Any()) { var minId = tweets.Select(t => long.Parse(t.Tweetid)).ToList <long>().Min().ToString() ?? twitterSourceInfo.SinceId; isScheduleCompleted = DateTime.Compare(DateTime.ParseExact(tweets.Where(t => t.Tweetid.Equals(minId)).First().CreatedAt, Const_TwitterDateTemplate, new System.Globalization.CultureInfo("en-US")), taskInfo.EndTime) > 0; } if (tweets == null || tweets.Count == 0 || isScheduleCompleted) { break; // When no new data to get since sinceID(last fetched tweet) } twitterSourceInfo.SinceId = tweets.Select(t => long.Parse(t.Tweetid)).ToList <long>().Max().ToString(); tweets.RemoveAll(t => DateTime.Compare(DateTime.ParseExact(t.CreatedAt, Const_TwitterDateTemplate, new System.Globalization.CultureInfo("en-US")), taskInfo.StartTime) < 0); tweets.RemoveAll(t => DateTime.Compare(DateTime.ParseExact(t.CreatedAt, Const_TwitterDateTemplate, new System.Globalization.CultureInfo("en-US")), taskInfo.EndTime) > 0); Trace.TraceInformation($"Tweets Fetched {tweets.Count}"); if (tweets.Any()) { foreach (var tweet in tweets) { var enrichedTweet = await EnrichTweetWithAttachments(tweet); itemMetaData.Add(await UploadTweet(twitterItemMapper, enrichedTweet, taskInfo)); } twitterSourceInfo.SinceId = tweets.Select(t => long.Parse(t.Tweetid)).ToList <long>().Max().ToString(); } } return(itemMetaData); }
public async Task <string> GetAccessToken(string accessCode, string redirectUrl, Dictionary <string, string> requestTokens) { string url = string.Format($"{SettingsTwitter.TwitterEndPoint}/oauth/access_token"); var queryParams = new Dictionary <string, string>(); queryParams.Add("oauth_verifier", accessCode); queryParams.Add("oauth_callback", redirectUrl); OAuth1Token oAuth1Token = new OAuth1Token(SettingsTwitter.TwitterClientToken, SettingsTwitter.TwitterClientSecret, requestTokens.Where(k => k.Key == "ClientToken").FirstOrDefault().Value, requestTokens.Where(k => k.Key == "ClientSecret").FirstOrDefault().Value); OAuth1Helper oAuth1Helper = new OAuth1Helper(url, oAuth1Token, HttpMethod.Post.ToString().ToUpperInvariant()); var qstr = oAuth1Helper.GetQueryString(queryParams); string tempToken = oAuth1Helper.GenerateAuthorizationHeader(); var requestHeaders = new Dictionary <string, string>(); requestHeaders.Add("Authorization", "OAuth " + tempToken); return(await this.Client.PostRequestAsync <Dictionary <string, string>, string>(url, requestHeaders, queryParams, CancellationToken.None)); }
public async Task <TokenValidationResult> ValidateAccessTokenAsync(string token, string expectedScope = null) { Uri endpoint = new Uri(userInfoEndpoint); var tokenValues = OAuth1Helper.GetResponseValues(token); tokenValues.TryGetValue("oauth_token", out string oauthToken); tokenValues.TryGetValue("oauth_token_secret", out string oauthTokenSecret); string authorizationHeader = _oauthHelper.GetAuthorizationHeader( endpoint, "GET", _options.TwitterConsumerAPIKey, _options.TwitterConsumerSecret, oauthToken, oauthTokenSecret, null); _client.DefaultRequestHeaders.Clear(); _client.DefaultRequestHeaders.Accept.Add(OAuth1Helper.GetMediaTypeHeader()); _client.DefaultRequestHeaders.Add("Authorization", authorizationHeader); var response = await _client.GetAsync(endpoint); if (response.IsSuccessStatusCode) { var userInfo = JsonDocument.Parse(await response.Content.ReadAsStringAsync()); var claims = new List <Claim>(); claims.AddRange(userInfo.RootElement.EnumerateObject().Select(item => new Claim(item.Name, item.Value.ToString()))); return(new TokenValidationResult { IsError = false, Claims = claims }); } return(new TokenValidationResult { IsError = true, ErrorDescription = response.ReasonPhrase }); }
public TwitterController(IHttpClientFactory httpClientFactory, OAuth1Helper oauthHelper, IOptions <AppSettings> appSettings) { _client = httpClientFactory.CreateClient(nameof(TwitterController)); _oauthHelper = oauthHelper; _twitterAuthKeys = appSettings.Value.Twitter; }