mirror of
https://github.com/JogmansonReal/Radicade.git
synced 2026-10-26 07:29:00 -07:00
75 lines
2.4 KiB
C#
75 lines
2.4 KiB
C#
using Microsoft.AspNetCore.Cors;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using RadicadeServer.Clubs;
|
|
using RadicadeServer.DB;
|
|
using RadicadeServer.Extensions;
|
|
using RadicadeServer.Utils;
|
|
|
|
namespace RadicadeServer.Admin
|
|
{
|
|
[Route("admin/clubs")]
|
|
[EnableCors("AdminPanel")]
|
|
public class AdminClubAPI(RecDBContext db) : Controller
|
|
{
|
|
private Task<IActionResult?> RejectInvalidKey(string key)
|
|
{
|
|
return Task.FromResult<IActionResult?>(key.IsAdminKey() ? null : Unauthorized("Invalid secret"));
|
|
}
|
|
|
|
[HttpPost("upload/image")]
|
|
public async Task<IActionResult> UploadImage([FromQuery] string key, [FromQuery] long clubId, [FromForm] IFormFile file)
|
|
{
|
|
var rejection = await RejectInvalidKey(key);
|
|
if (rejection != null) return rejection;
|
|
|
|
var clubs = await ClubStore.LoadAsync(db);
|
|
var club = clubs.FirstOrDefault(x => x.clubId == clubId);
|
|
if (club == null) return NotFound("Club does not exist.");
|
|
|
|
if (file == null || file.Length == 0) return BadRequest("No file provided.");
|
|
|
|
var allowed = new[] { ".png", ".jpg", ".jpeg", ".gif", ".webp", ".bmp" };
|
|
var ext = Path.GetExtension(file.FileName).ToLowerInvariant();
|
|
if (string.IsNullOrEmpty(ext) || !allowed.Contains(ext))
|
|
return BadRequest($"Unsupported image format '{(string.IsNullOrEmpty(ext) ? "no extension" : ext)}'. Use png/jpg/jpeg/gif/webp.");
|
|
|
|
Directory.CreateDirectory(DBConfig.CDNImages);
|
|
var name = Guid.NewGuid().ToString() + ext;
|
|
var path = Path.Join(DBConfig.CDNImages, name);
|
|
|
|
using (var stream = new FileStream(path, FileMode.Create))
|
|
{
|
|
await file.CopyToAsync(stream);
|
|
}
|
|
|
|
club.imageName = name;
|
|
|
|
await ClubStore.SaveAsync(db, clubs);
|
|
|
|
return Ok($"Uploaded {name}!\nURL: {DBConfig.ServerUrl}/images/img/{name}");
|
|
}
|
|
|
|
[HttpGet("set/image")]
|
|
public async Task<IActionResult> SetImage([FromQuery] string key, [FromQuery] long clubId, [FromQuery] string imgName)
|
|
{
|
|
var rejection = await RejectInvalidKey(key);
|
|
if (rejection != null) return rejection;
|
|
|
|
var clubs = await ClubStore.LoadAsync(db);
|
|
var club = clubs.FirstOrDefault(x => x.clubId == clubId);
|
|
if (club == null) return NotFound("Club does not exist.");
|
|
|
|
imgName = Path.GetFileName(imgName ?? "").Trim();
|
|
|
|
if (string.IsNullOrEmpty(imgName)) imgName = ClubStore.DefaultImageName;
|
|
|
|
club.imageName = imgName;
|
|
|
|
await ClubStore.SaveAsync(db, clubs);
|
|
|
|
return Ok($"Set to {imgName}!\nURL: {DBConfig.ServerUrl}/images/img/{imgName}");
|
|
}
|
|
}
|
|
}
|