using System; using System.Collections.Generic; using System.Net.Http; using System.Text.Json; using System.Text.Json.Serialization; using System.Threading.Tasks; namespace SharpChat.Flashii { public class FlashiiAuthInfo { [JsonPropertyName("success")] public bool Success { get; set; } [JsonPropertyName("reason")] public string Reason { get; set; } = "none"; [JsonPropertyName("user_id")] public long UserId { get; set; } [JsonPropertyName("username")] public string Username { get; set; } [JsonPropertyName("colour_raw")] public int ColourRaw { get; set; } [JsonPropertyName("hierarchy")] public int Rank { get; set; } [JsonPropertyName("is_silenced")] public DateTimeOffset SilencedUntil { get; set; } [JsonPropertyName("perms")] public ChatUserPermissions Permissions { get; set; } private const string SIG_FMT = "verify#{0}#{1}#{2}"; public static async Task VerifyAsync(HttpClient client, string method, string token, string ipAddr) { if(client == null) throw new ArgumentNullException(nameof(client)); method ??= string.Empty; token ??= string.Empty; ipAddr ??= string.Empty; string sig = string.Format(SIG_FMT, method, token, ipAddr); HttpRequestMessage req = new(HttpMethod.Post, FlashiiUrls.VerifyURL) { Content = new FormUrlEncodedContent(new Dictionary { { "method", method }, { "token", token }, { "ipaddr", ipAddr }, }), Headers = { { "X-SharpChat-Signature", sig.GetSignedHash() }, }, }; using HttpResponseMessage res = await client.SendAsync(req); return JsonSerializer.Deserialize( await res.Content.ReadAsByteArrayAsync() ); } } }