using System; using System.Net.Http; using System.Text; using System.Text.Json; using System.Threading.Tasks; using System.Security.Cryptography; namespace JAuth { public class api { public string Name { get; set; } public string OwnerId { get; set; } public string Version { get; set; } public string Url { get; set; } public string SessionId { get; private set; } public string ErrorMessage { get; private set; } public JsonElement ResponseData { get; private set; } private static readonly HttpClient client = new HttpClient(); public api(string name, string ownerid, string version, string url = "https://jauth.site/api/v1/") { Name = name; OwnerId = ownerid; Version = version; Url = url.TrimEnd('/'); } public static string GetSafeHWID() { try { string raw = Environment.MachineName + "_" + Environment.UserName; using (SHA256 sha = SHA256.Create()) { byte[] hash = sha.ComputeHash(Encoding.UTF8.GetBytes(raw)); return BitConverter.ToString(hash).Replace("-", "").ToLower(); } } catch { return "HWID_FALLBACK"; } } public async Task InitAsync() { try { var payload = new { name = Name, ownerid = OwnerId, version = Version }; var content = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json"); var res = await client.PostAsync($"{Url}/init", content); var json = await res.Content.ReadAsStringAsync(); using var doc = JsonDocument.Parse(json); bool success = doc.RootElement.GetProperty("success").GetBoolean(); if (success && doc.RootElement.TryGetProperty("sessionid", out var s)) { SessionId = s.GetString(); } return success; } catch (Exception ex) { ErrorMessage = ex.Message; return false; } } public async Task LicenseAsync(string key) { try { var payload = new { name = Name, ownerid = OwnerId, key = key.Trim(), hwid = GetSafeHWID(), sessionid = SessionId }; var content = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json"); var res = await client.PostAsync($"{Url}/license", content); var json = await res.Content.ReadAsStringAsync(); using var doc = JsonDocument.Parse(json); bool success = doc.RootElement.GetProperty("success").GetBoolean(); if (success && doc.RootElement.TryGetProperty("info", out var info)) { ResponseData = info.Clone(); } else if (doc.RootElement.TryGetProperty("message", out var msg)) { ErrorMessage = msg.GetString(); } return success; } catch (Exception ex) { ErrorMessage = ex.Message; return false; } } } }