using API.DTO.Base; using API.DTO.Login; using API.Errors; using API.Services; using API.Services.Interfaces; using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Authentication.Cookies; using Microsoft.AspNetCore.Mvc; using System.Security.Claims; namespace API.Controllers { [ApiController] [Route("api/v1/[controller]")] public class AuthController : ControllerBase { private readonly ILogger _logger; private readonly IUserManager _userManager; private readonly UserService _userService; public AuthController(ILogger logger, IUserManager userManager, UserService userService) { _logger = logger; _userManager = userManager; _userService = userService; } [HttpPost("login")] public ActionResult login(UserLoginDTO userLogin) { UserDTO? user = _userManager.authenticateUser(userLogin); if (user == null) return new UnauthorizedResult(); Claim[] claims = { new Claim(ClaimTypes.NameIdentifier, user.id.ToString()) }; ClaimsIdentity claimsIdentity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme); //todo confirm if this is accurate AuthenticationProperties authProperties = new AuthenticationProperties(); HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, new ClaimsPrincipal(claimsIdentity), authProperties); return Ok(user); } [HttpPost("register")] public ActionResult register(UserRegisterDTO registerDTO) { UserDTO? user = _userManager.registerUser(registerDTO); if (user == null) { return Conflict(Strings.UserExists); } return Ok(user); } } }