public static string GenerateToken(string key, int intervalSeconds = 10)
        {
            var authenticator = new TimeAuthenticator(intervalSeconds: intervalSeconds);
            var keyBytes      = StringHelper.GetBytes(key);
            var base32Key     = Base32Helper.ToBase32String(keyBytes);

            return(authenticator.GetCode(base32Key));
        }
        public static bool IsTokenValid(string key, string token, int intervalSeconds = 10)
        {
            var authenticator = new TimeAuthenticator(intervalSeconds: intervalSeconds);
            var keyBytes      = StringHelper.GetBytes(key);
            var base32Key     = Base32Helper.ToBase32String(keyBytes);

            return(authenticator.CheckCode(base32Key, token));
        }
        protected override Data.Torrent FindAddedTorrent(AddUrlResponse result)
        {
            if (result == null)
            {
                throw new ArgumentNullException(nameof(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);
        }
Пример #4
0
        public static async Task <TokenInfo> ProvisionTokenNow()
        {
            var request = ProvisionToken.GenerateRequest();

            using (var httpClient = new HttpClient())
            {
                var response = await ProvisionToken.GetProvisioningResponse(httpClient, request);

                var otpToken     = ProvisionToken.GetTokenFromResponse(response);
                var otpSecret    = ProvisionToken.DecryptKey(otpToken.Iv, otpToken.Cipher);
                var otpSecretb32 = Base32Helper.Base32EncodeBytes(otpSecret).ToUpperInvariant();

                if (await ProvisionToken.CheckToken(otpToken, otpSecret, httpClient))
                {
                    return(new TokenInfo(1, otpSecretb32, otpToken));
                }

                throw new InvalidOperationException("Created token is not valid");
            }

            throw new InvalidOperationException("Could not create a token");
        }