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