You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

96 lines
3.1 KiB

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
namespace UplayNameChecker
{
public class R6dbAPI
{
private HttpClient httpClient = new HttpClient();
private const string URI = "https://api.statsdb.net/r6/namecheck/";
public async Task<bool> IsNameAvailable(string name)
{
try
{
var reqUri = URI + System.Net.WebUtility.UrlEncode(name);
var timestamp = GetCurrentTimestamp();
var apiKey = GenerateAuthToken(timestamp);
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, reqUri);
request.Headers.Add("x-api-key", apiKey);
request.Headers.Add("origin", "https://r6db.net");
var response = await httpClient.SendAsync(request);
return (await response.Content.ReadAsStringAsync()).Contains("exists\":false");
}
catch (Exception ex)
{
Log.Error($"Could not check name {name}: {ex.Message}");
return false;
}
}
public string GenerateAuthToken(ulong timestamp)
{
var seed = "a3d6b18fa919072d65d890c47b336f1f78fc11c4";
var sTimestamp = timestamp.ToString();
var code = "";
for(int i = 0; i < sTimestamp.Length; i++)
{
var t = int.Parse(sTimestamp[i].ToString());
var c = (int)seed[i % seed.Length];
switch (t)
{
case 0: break;
case 1:
c = c - 1;
break;
case 2:
c = c >> 1;
break;
case 3:
c = c << 1;
break;
case 4:
c = (int)Math.Pow(t, c % 4);
break;
case 5:
c = (int)Math.Round(Math.Sqrt(c));
break;
case 6:
c = c << t;
goto case 7;
case 7:
c = c - 12;
break;
case 8:
c = 0;
break;
default:
c = -69420;
break;
}
if (c == -69420) continue;
code += c.ToString();
}
var str2 = "authscript:" + code + ":" + timestamp + $":{GetTodaysTimestamp()}";
return Convert.ToBase64String(Encoding.UTF8.GetBytes(str2));
}
private ulong GetCurrentTimestamp()
{
return (ulong)DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1)).TotalSeconds;
}
private ulong GetTodaysTimestamp()
{
return (ulong)DateTime.Today.Subtract(new DateTime(1970, 1, 1)).TotalSeconds;
}
}
}