diff --git a/EnvelopeGenerator.API/Controllers/AuthController.cs b/EnvelopeGenerator.API/Controllers/AuthController.cs index b280a437..0b393e38 100644 --- a/EnvelopeGenerator.API/Controllers/AuthController.cs +++ b/EnvelopeGenerator.API/Controllers/AuthController.cs @@ -3,17 +3,20 @@ using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Authorization; using EnvelopeGenerator.API.Models; +using EnvelopeGenerator.Domain.Constants; +using System.Net; +using Microsoft.Extensions.Options; namespace EnvelopeGenerator.API.Controllers; /// /// Controller verantwortlich für die Benutzer-Authentifizierung, einschließlich Anmelden, Abmelden und Überprüfung des Authentifizierungsstatus. /// -/// [Route("api/[controller]")] [ApiController] -public partial class AuthController(ILogger logger) : ControllerBase +public partial class AuthController(IOptions authTokenKeyOptions) : ControllerBase { + private readonly AuthTokenKeys authTokenKeys = authTokenKeyOptions.Value; /// /// Entfernt das Authentifizierungs-Cookie des Benutzers (AuthCookie) @@ -31,14 +34,31 @@ public partial class AuthController(ILogger logger) : Controller /// Wenn es kein zugelassenes Cookie gibt, wird „nicht zugelassen“ zurückgegeben. [ProducesResponseType(typeof(string), StatusCodes.Status200OK, "text/javascript")] [ProducesResponseType(typeof(void), StatusCodes.Status401Unauthorized)] - [Authorize] + [Authorize(Roles = $"{Role.Sender},{Role.Receiver.FullyAuth}")] [HttpPost("logout")] public async Task Logout() { - await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme); + if (User.IsInRole(Role.Sender)) + Response.Cookies.Delete(authTokenKeys.Cookie); + else if (User.IsInRole(Role.Receiver.FullyAuth)) + await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme); + else + return Unauthorized(); + return Ok(); } + /// + /// + /// + /// + /// + [ProducesResponseType(typeof(void), StatusCodes.Status200OK)] + [ProducesResponseType(typeof(void), StatusCodes.Status401Unauthorized)] + [HttpGet("check")] + [Authorize(Roles = $"{Role.Sender},{Role.Receiver.FullyAuth}")] + public IActionResult Check([FromQuery] string role) => User.IsInRole(role) ? Ok() : Unauthorized(); + /// /// Prüft, ob der Benutzer ein autorisiertes Token hat. ///