namespace GrossesMitainesAPI.Controllers; #region Dependencies using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Cors; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Identity; using GrossesMitainesAPI.Data; using SignInResult = Microsoft.AspNetCore.Identity.SignInResult; using Microsoft.AspNetCore.Authentication.Cookies; using System.Security.Principal; using GrossesMitainesAPI.Models; #endregion [EnableCors("_myAllowSpecificOrigins"), ApiController, Route("api"), Authorize(AuthenticationSchemes = "Identity.Application")] public class LoginController : Controller { #region DI Fields private readonly UserManager _userMan; private readonly SignInManager _signInMan; #endregion #region Ctor public LoginController(SignInManager signin, UserManager userman) { this._signInMan = signin; this._userMan = userman; } #endregion #region API Methods [HttpGet, Route("WhoAmI")] public async Task WhoAmI() { var user = await _userMan.GetUserAsync(_signInMan.Context.User); var roles = await _userMan.GetRolesAsync(user); string role = ""; if (roles.Contains("Administrateur")) role = "Administrateur"; else role = "Client"; return new ReturnUserViewModel(user, role); } [HttpPost, Route("Login"), AllowAnonymous] public SignInResult Login(LoginModel user, bool rememberMe = false) { var User = _userMan.FindByEmailAsync(user.email.ToUpper()); User.Wait(); var res = _signInMan.PasswordSignInAsync(User.Result, user.password, rememberMe, false); res.Wait(); return res.Result; } [HttpPost, Route("Logout")] public void Logout() => _signInMan.SignOutAsync(); #endregion }