Add ping controller and cleaning code

This commit is contained in:
Dmitriy yawaflua Andreev
2024-07-31 08:02:10 +03:00
parent 6da090ac91
commit 92260f6110
6 changed files with 39 additions and 32 deletions

View File

@@ -0,0 +1,15 @@
using Microsoft.AspNetCore.Mvc;
namespace SkinsApi.Controllers.Default
{
[Route("/ping")]
[ApiController]
public class PingController : ControllerBase
{
[HttpGet]
public async Task<IActionResult> Ping()
{
return Ok("Pong");
}
}
}

View File

@@ -5,7 +5,7 @@ namespace SkinsApi.Controllers.v1
{
[Route("/skin/")]
[ApiController]
public class AnotherSkinsController ( ISkinService skinService) : ControllerBase
public class AnotherSkinsController(ISkinService skinService) : ControllerBase
{
[HttpGet("{skin_type}/{width}/{user}")]
[Produces("image/png")]

View File

@@ -1,13 +1,12 @@
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.RateLimiting;
using SkinsApi.Interfaces.Services;
namespace SkinsApi.Controllers.v1
{
[Route("/api/v1/skin/")]
[ApiController]
public class SkinsController (ISkinService skinService): ControllerBase
public class SkinsController(ISkinService skinService) : ControllerBase
{
/// <summary>
/// Get user`s skin
@@ -50,11 +49,12 @@ namespace SkinsApi.Controllers.v1
try
{
return File((await skinService.GetSkinStreamAsync(user)).GetBody(width), "image/png");
} catch(Exception ex)
}
catch (Exception ex)
{
return NotFound();
}
}
}
}

View File

@@ -3,15 +3,12 @@ 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
public class SkinService(HttpClient client) : ISkinService
{
private async Task<IProfile> GetProfileByNicknameAsync(string nickname)
{
@@ -37,12 +34,12 @@ namespace SkinsApi.Services
return JsonSerializer.Deserialize<DecodedSkinProperty>(decodedString);
}
public async Task<Skin> 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");
}
}
}

View File

@@ -1,5 +1,4 @@
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Formats;
using SixLabors.ImageSharp.Formats.Png;
using SixLabors.ImageSharp.PixelFormats;
using SixLabors.ImageSharp.Processing;
@@ -45,7 +44,7 @@ namespace SkinsApi.Sources
public Stream GetAllSkin(float width = 64f)
{
var stream = new MemoryStream();
int resizedWidth = (int)(_bitmap.Width * (width/_bitmap.Width));
int resizedWidth = (int)(_bitmap.Width * (width / _bitmap.Width));
var resizedPicture = _bitmap.Clone(c => c.Resize(resizedWidth, resizedWidth, KnownResamplers.NearestNeighbor));
resizedPicture.Save(stream, new PngEncoder());
stream.Position = 0;
@@ -121,7 +120,7 @@ namespace SkinsApi.Sources
.Resize(115, 171, KnownResamplers.NearestNeighbor)); // Изменение размера, если необходимо
var bodyImageLayout = sourceImage.Clone(ctx => ctx
.Crop(new(bodyLayoutStart, body))
.Resize((int)(115*0.2), (int)(171*0.2), KnownResamplers.NearestNeighbor)); // Изменение размера, если необходимо
.Resize((int)(115 * 0.2), (int)(171 * 0.2), KnownResamplers.NearestNeighbor)); // Изменение размера, если необходимо
finalImage.Mutate(ctx => ctx
.DrawImage(bodyImage, new Point(87, 120), 1));
finalImage.Mutate(ctx => ctx
@@ -219,13 +218,13 @@ namespace SkinsApi.Sources
}
var stream = new MemoryStream();
int resizedWidth = (int)(finalImage.Width * (width/ finalImage.Width));
int resizedWidth = (int)(finalImage.Width * (width / finalImage.Width));
finalImage.Mutate(k => k.Resize(resizedWidth, resizedWidth, KnownResamplers.NearestNeighbor));
finalImage.Save(stream, new PngEncoder());
stream.Position = 0;
return stream;
}
}

View File

@@ -1,13 +1,9 @@
using Microsoft.OpenApi.Models;
using System.Net.Http.Headers;
using System.Net;
using System.Reflection;
using System.Text.Json.Serialization;
using AspNetCoreRateLimit;
using Microsoft.OpenApi.Models;
using SkinsApi.Interfaces.Services;
using SkinsApi.Services;
using System.Threading.RateLimiting;
using SixLabors.ImageSharp;
using AspNetCoreRateLimit;
using System.Reflection;
using System.Text.Json.Serialization;
namespace SkinsApi
{
@@ -51,9 +47,9 @@ namespace SkinsApi
},
TermsOfService = new Uri("https://yawaflua.ru/privacy")
});
var xmlFilename = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
// setup.IncludeXmlComments(Path.Combine(AppContext.BaseDirectory, xmlFilename), true);
// setup.IncludeXmlComments(Path.Combine(AppContext.BaseDirectory, xmlFilename), true);
setup.AddServer(new OpenApiServer() { Url = "https://skins.yawaflua.ru/", Description = "Default web-server" });
#if DEBUG
setup.AddServer(new OpenApiServer() { Url = "http://localhost/", Description = "Dev web-server" });
@@ -64,11 +60,11 @@ namespace SkinsApi
.AddSingleton<ISkinService, SkinService>()
.AddSingleton(configuration)
.AddMemoryCache();
services.Configure<IpRateLimitOptions>(configuration.GetSection("IpRateLimiting"));
services.AddInMemoryRateLimiting();
services.Configure<IpRateLimitOptions>(configuration.GetSection("IpRateLimiting"));
services.AddInMemoryRateLimiting();
// Добавление Rate Limiting Middleware
services.AddSingleton<IRateLimitConfiguration, RateLimitConfiguration>();
// Добавление Rate Limiting Middleware
services.AddSingleton<IRateLimitConfiguration, RateLimitConfiguration>();
}