public async Task WK_ConvertAsync_url()
        {
            string message         = null;
            WKHtmltoPdfProvider wk = new WKHtmltoPdfProvider();

            wk.Error += (sender, e) => {
                message = e.Exception.Message;
            };

            var f1 = new InputUrl("http://www.baidu.com");
            var f2 = new ConvertFile("baidu.pdf");
            var f4 = await wk.ConvertAsync(f1, f2, null, null);

            var flag = File.Exists(f4.FileInfo.FullName);

            Assert.True(flag);
        }
        public async Task <IActionResult> OnPostAsync()
        {
            InputUrl = InputUrl.Trim().ToLower();

            string hash        = Functions.GenerateRandomHash(5);
            var    existingUrl = await _urlRepo.GetUrlByOriginalUrl(hash);

            do
            {
                hash = Functions.GenerateRandomHash(5);
                var exits = await _urlRepo.GetUrlByShortUrl(hash);

                if (exits == null)
                {
                    break;
                }
            } while (existingUrl != null && hash == existingUrl.ShortUrl);

            if (!ModelState.IsValid)
            {
                Message = "Something went wrong, please try again";

                return(Page());
            }
            else if (!Functions.CheckValidUrl(InputUrl))
            {
                Message = "Something went wrong, your url is not valid and could not be validated before being posted to the server. Please try again.";
                _log.LogWarning("Javascript validation failed.");

                return(Page());
            }

            newUrl.ShortUrl    = hash;
            newUrl.OriginalUrl = InputUrl;
            newUrl.CreatedDate = DateTime.Now;
            newUrl.Counter     = 0;
            newUrl.IP          = _accessor.HttpContext.Connection.RemoteIpAddress.ToString();

            await _urlRepo.AddUrl(newUrl);

            return(RedirectToPage("/Index"));
        }
        protected override Data.Torrent FindAddedTorrent(AddUrlResponse result)
        {
            if (result == null)
            {
                throw new ArgumentNullException("result");
            }

            if (InputUrl != null && string.Equals(InputUrl.Scheme, "magnet", StringComparison.OrdinalIgnoreCase))
            {
                Regex reg   = new Regex("BTIH:([A-F0-9]{40})");
                Match match = reg.Match(InputUrl.ToString().ToUpperInvariant());
                if (match.Success)
                {
                    string hash    = match.Groups[1].Value;
                    var    torrent = result.Result.Torrents.OrderByDescending(t => t.AddedDate).AsParallel().FirstOrDefault(item => string.Equals(item.Hash, hash, StringComparison.OrdinalIgnoreCase));
                    return(torrent);
                }
            }

            return(null);
        }
        protected override Data.Torrent FindAddedTorrent(AddUrlResponse result)
        {
            if (result == null)
            {
                throw new ArgumentNullException("result");
            }

            if (InputUrl != null && string.Equals(InputUrl.Scheme, "magnet", StringComparison.OrdinalIgnoreCase))
            {
                //BTIH
                Regex reg   = new Regex("BTIH:([A-F0-9]{40})");
                var   url   = InputUrl.ToString().ToUpperInvariant();
                Match match = reg.Match(url);
                if (match.Success)
                {
                    string hash    = match.Groups[1].Value;
                    var    torrent = result.Result.Torrents.OrderByDescending(t => t.AddedDate).FirstOrDefault(item => string.Equals(item.Hash, hash, StringComparison.OrdinalIgnoreCase));
                    return(torrent);
                }
                else
                {
                    // Base 32 not raw hash
                    reg   = new Regex("BTIH:([A-Z0-9]{32})");
                    url   = InputUrl.ToString().ToUpperInvariant();
                    match = reg.Match(url);

                    if (!match.Success)
                    {
                        return(null);
                    }

                    var    data    = Base32Helper.ToBytes(match.Groups[1].Value);
                    string hash    = BitConverter.ToString(data).Replace("-", string.Empty);
                    var    torrent = result.Result.Torrents.OrderByDescending(t => t.AddedDate).FirstOrDefault(item => string.Equals(item.Hash, hash, StringComparison.OrdinalIgnoreCase));
                    return(torrent);
                }
            }

            return(null);
        }