using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Cors; using Microsoft.EntityFrameworkCore; using RadicadeServer.DB; using RadicadeServer.RecNet.Config; using RadicadeServer.Utils; namespace RadicadeServer.Admin { [Route("admin/config")] [EnableCors("AdminPanel")] public class AdminConfigAPI(RecDBContext db) : Controller { private Task RejectInvalidKey(string key) { return Task.FromResult(key.IsAdminKey() ? null : Unauthorized("Invalid secret")); } [HttpGet("forcerefresh")] public async Task ForceRefresh([FromQuery] string key) { var rejection = await RejectInvalidKey(key); if (rejection != null) return rejection; MainConfig? config = await db.Config.FirstOrDefaultAsync(); if (config == null) return StatusCode(500); bool didChanges = false; if (config.ExpectingReload) { didChanges = true; config.SetAsActive(); config.ExpectingReload = false; } if (config.RefreshConfig(true)) didChanges = true; if (didChanges) await db.SaveChangesAsync(); return Ok(config?.ToActualConfig()); } [HttpGet("full")] public async Task GetFullConfig([FromQuery] string key) { var rejection = await RejectInvalidKey(key); if (rejection != null) return rejection; MainConfig? config = await db.Config.FirstOrDefaultAsync(); return Ok(config); } } }