using System.Net.Http.Json; using System.Text.Json.Serialization; namespace SafeNSound.Sdk; public class SafeNSoundAuthentication(SafeNSoundConfiguration config) { public async Task Register(RegisterDto registerDto) { var hc = new WrappedHttpClient() { BaseAddress = new Uri(config.BaseUri) }; var res = await hc.PostAsJsonAsync("/auth/register", registerDto); res.EnsureSuccessStatusCode(); } public async Task Login(AuthDto authDto) { var hc = new WrappedHttpClient() { BaseAddress = new Uri(config.BaseUri) }; var res = await hc.PostAsJsonAsync("/auth/login", authDto); return (await res.Content.ReadFromJsonAsync())!; } public async Task Delete(AuthDto authDto) { var hc = new WrappedHttpClient() { BaseAddress = new Uri(config.BaseUri) }; var res = await hc.DeleteAsJsonAsync("/auth/delete", authDto); res.EnsureSuccessStatusCode(); } } public class RegisterDto { [JsonPropertyName("username")] public string Username { get; set; } = string.Empty; [JsonPropertyName("password")] public string Password { get; set; } = string.Empty; [JsonPropertyName("email")] public string Email { get; set; } = string.Empty; [JsonPropertyName("type")] public string UserType { get; set; } = string.Empty; } public class AuthDto { [JsonPropertyName("username")] public string Username { get; set; } = string.Empty; [JsonPropertyName("password")] public string Password { get; set; } = string.Empty; [JsonPropertyName("email")] public string Email { get; set; } = string.Empty; } public class WhoAmI { [JsonPropertyName("userId")] public required string UserId { get; set; } [JsonPropertyName("deviceId")] public required string DeviceId { get; set; } [JsonPropertyName("type")] public required string UserType { get; set; } } public class SafeNSoundAuthResult : WhoAmI { [JsonPropertyName("accessToken")] public required string AccessToken { get; set; } }