Example #1
0
        private static async Task <string> ResolveShortener(Uri uri, CancellationToken cancellationToken)
        {
            if (UrlShorteners.All(s => !uri.Host.EndsWith(s)))
            {
                return(null);
            }
            var response = await client.GetAsync(uri, cancellationToken);

            var location = response.Headers.Location;

            return(location?.OriginalString);
        }
Example #2
0
        /// <summary>
        /// Updates
        /// </summary>
        /// <returns></returns>
        private static async Task UpdateUnderlyingURLAsync(CancellationToken cancellationToken)
        {
            while (true)
            {
                var url = UnderlyingTargetURL;
                var uri = new Uri(url);
                foreach (var service in JumpPages)
                {
                    if (!url.StartsWith(service.Key))
                    {
                        continue;
                    }

                    var queryStringValues = HttpUtility.ParseQueryString(uri.Query);
                    var underlyingUrl     = queryStringValues["url"];
                    if (underlyingUrl != null)
                    {
                        UnderlyingTargetURL = underlyingUrl;
                    }
                }
                if (UnderlyingTargetURL != url)
                {
                    continue;
                }

                if (UrlShorteners.Contains(uri.Host))
                {
                    var clientHandler = new HttpClientHandler {
                        AllowAutoRedirect = false
                    };
                    var client = new HttpClient(clientHandler);
                    try
                    {
                        var response = await client.GetAsync(url, cancellationToken);

                        var location = response.Headers.Location;
                        if (location != null)
                        {
                            UnderlyingTargetURL = location.OriginalString;
                            continue;
                        }
                    }
                    catch (TaskCanceledException)
                    {
                        // TaskCanceledException occurs when the CancellationToken is triggered before the request completes
                        // In this case, skip the lookup to avoid poor user experience
                    }
                }

                break;
            }
        }