using SkinsApi.Interfaces.Services; using SkinsApi.Interfaces.SkinService; using SkinsApi.Models; using SkinsApi.Models.SkinService; using SkinsApi.Sources; using System.Buffers.Text; using System.Drawing; using System.Text; using System.Text.Json; using System.Text.Json.Serialization; namespace SkinsApi.Services { public class SkinService (HttpClient client): ISkinService { private async Task GetProfileByNicknameAsync(string nickname) { return await client.GetFromJsonAsync(Startup.PROFILE_MOJANG_API + nickname); } private async Task GetUuidFromDeparsedData(string data) { if (data.Length < 25) { return (await GetProfileByNicknameAsync(data)).id; } else { return data; } } private async Task GetSkinProperty(string uuid) { var base64EncodedSkinProperty = await client.GetFromJsonAsync(Startup.SESSION_MOJANG_API + uuid); var content = base64EncodedSkinProperty.properties.First().value; byte[] data = Convert.FromBase64String(content); string decodedString = Encoding.UTF8.GetString(data); return JsonSerializer.Deserialize(decodedString); } public async Task GetSkinStreamAsync(string data) { var uuid = await GetUuidFromDeparsedData(data); var skinproperty = await GetSkinProperty(uuid); var rq = await client.GetAsync(skinproperty.Textures.SKIN.Url); return new Skin(rq.Content.ReadAsStream(), skinproperty.Textures.SKIN.Metadata?.Model == "slim"); } } }