using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Authentication.Cookies; using Microsoft.AspNetCore.Mvc; using System.Security.Claims; namespace NoticeBoard.Controllers; public class AccountController : Controller { private readonly IConfiguration _config; public AccountController(IConfiguration config) { _config = config; } [HttpGet] public IActionResult Login(string? returnUrl = null) { if (User.Identity?.IsAuthenticated == true) return RedirectToAction("Index", "Admin"); ViewBag.ReturnUrl = returnUrl; return View(); } [HttpPost] public async Task Login(string username, string password, string? returnUrl = null) { var adminUser = _config["Admin:Username"] ?? "admin"; var adminPass = _config["Admin:Password"] ?? "admin"; if (username == adminUser && password == adminPass) { var claims = new List { new Claim(ClaimTypes.Name, username), new Claim(ClaimTypes.Role, "Admin") }; var identity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme); var principal = new ClaimsPrincipal(identity); await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, principal); if (!string.IsNullOrEmpty(returnUrl) && Url.IsLocalUrl(returnUrl)) return Redirect(returnUrl); return RedirectToAction("Index", "Admin"); } ViewBag.Error = "Invalid username or password."; ViewBag.ReturnUrl = returnUrl; return View(); } [HttpGet] public async Task Logout() { await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme); return RedirectToAction("Login"); } }