Beispiel #1
0
        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);
        }
Beispiel #2
0
        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
            });
        }
Beispiel #3
0
        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());
        }
Beispiel #4
0
        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));
            }
        }
Beispiel #5
0
        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);
        }
Beispiel #8
0
        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
            });
        }
Beispiel #10
0
 public TwitterController(IHttpClientFactory httpClientFactory, OAuth1Helper oauthHelper, IOptions <AppSettings> appSettings)
 {
     _client          = httpClientFactory.CreateClient(nameof(TwitterController));
     _oauthHelper     = oauthHelper;
     _twitterAuthKeys = appSettings.Value.Twitter;
 }