using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Mvc; using SportsDivision.Infrastructure.Identity; namespace SportsDivision.Web.Controllers; public class AccountController : Controller { private readonly SignInManager _signInManager; private readonly UserManager _userManager; public AccountController(SignInManager signInManager, UserManager userManager) { _signInManager = signInManager; _userManager = userManager; } [HttpGet] public IActionResult Login(string? returnUrl = null) { ViewData["ReturnUrl"] = returnUrl; return View(); } [HttpPost] [ValidateAntiForgeryToken] public async Task Login(string email, string password, bool rememberMe, string? returnUrl = null) { ViewData["ReturnUrl"] = returnUrl; if (string.IsNullOrEmpty(email) || string.IsNullOrEmpty(password)) { ModelState.AddModelError("", "Email and password are required."); return View(); } var result = await _signInManager.PasswordSignInAsync(email, password, rememberMe, lockoutOnFailure: false); if (result.Succeeded) { var user = await _userManager.FindByEmailAsync(email); if (user is { IsActive: false }) { await _signInManager.SignOutAsync(); ModelState.AddModelError("", "This account has been deactivated. Please contact an administrator."); return View(); } return LocalRedirect(returnUrl ?? "/"); } ModelState.AddModelError("", "Invalid login attempt."); return View(); } [HttpPost] [ValidateAntiForgeryToken] public async Task Logout() { await _signInManager.SignOutAsync(); return RedirectToAction("Index", "Home"); } public IActionResult AccessDenied() => View(); }