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); }
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"); }