VEU.WathBody/3-app/2-cli/Server.WatchBody.Web/Controllers/Admin/AdminControllerBase.cs

35 lines
1.2 KiB
C#

using Microsoft.AspNetCore.Mvc;
using Server.WatchBody.Web.Services;
namespace Server.WatchBody.Web.Controllers.Admin;
/// <summary>
/// База admin-контроллеров (spec 01 §3): Bearer-токен обязателен,
/// без/невалидный → 401 {"error":"unauthorized"}; атлетские
/// X-Api-Key в этом контуре не действуют (🛡1 — middleware их сюда
/// не пускает).
/// </summary>
public abstract class AdminControllerBase(AdminAuthService auth) : Controller
{
protected readonly AdminAuthService Auth = auth;
/// <summary>401, если токен не прошёл; иначе false.</summary>
protected bool Denied()
{
var header = Request.Headers.Authorization.FirstOrDefault();
var token = header?.StartsWith("Bearer ", StringComparison.Ordinal) == true
? header["Bearer ".Length..]
: null;
return !Auth.Validate(token);
}
protected ActionResult UnauthorizedJson() =>
ErrorJson(401, "unauthorized");
protected ActionResult ErrorJson(int code, string message)
{
Response.StatusCode = code;
return new JsonResult(new { error = message });
}
}