64 lines
2 KiB
C#
64 lines
2 KiB
C#
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<FlashiiAuthInfo> 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<string, string> {
|
|
{ "method", method },
|
|
{ "token", token },
|
|
{ "ipaddr", ipAddr },
|
|
}),
|
|
Headers = {
|
|
{ @"X-SharpChat-Signature", sig.GetSignedHash() },
|
|
},
|
|
};
|
|
|
|
using HttpResponseMessage res = await client.SendAsync(req);
|
|
|
|
return JsonSerializer.Deserialize<FlashiiAuthInfo>(
|
|
await res.Content.ReadAsByteArrayAsync()
|
|
);
|
|
}
|
|
}
|
|
}
|