using HackerNet.Web.Models; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Mvc; namespace HackerNet.Web.Controllers; public class AccountController : HackerController { private readonly UserManager _userManager; private readonly SignInManager _signInManager; public AccountController(UserManager userManager, SignInManager signInManager) { _userManager = userManager; _signInManager = signInManager; } [HttpGet] public IActionResult Signup() { return View(new SignupLoginViewModel()); } [HttpPost] [ValidateAntiForgeryToken] public async Task Signup(SignupLoginViewModel cmd) { if (!ModelState.IsValid) { return View(cmd); } var user = new IdentityUser(cmd.Username); var result = await _userManager.CreateAsync(user, cmd.Password); if (!result.Succeeded) { ModelState .AddModelError(nameof(SignupLoginViewModel.Username), "Impossible de créer le compte"); return View(cmd); } SetFlashMessage("Votre compte a été créé !"); return RedirectToAction("Index", "Links"); } [HttpGet] public IActionResult Login() { return View(new SignupLoginViewModel()); } [HttpPost] [ValidateAntiForgeryToken] public async Task Login(SignupLoginViewModel cmd, string? redirectUrl = null) { if (!ModelState.IsValid) { return View(cmd); } var user = await _userManager.FindByNameAsync(cmd.Username); if (user == null) { ModelState .AddModelError(nameof(SignupLoginViewModel.Username), "Nom d'utilisateur ou mot de passe invalide"); return View(cmd); } var result = await _signInManager.PasswordSignInAsync(user, cmd.Password, true, false); if (!result.Succeeded) { ModelState .AddModelError(nameof(SignupLoginViewModel.Username), "Nom d'utilisateur ou mot de passe invalide"); return View(cmd); } SetFlashMessage("Vous êtes désormais connecté !"); if (!string.IsNullOrWhiteSpace(redirectUrl)) { return Redirect(redirectUrl); } return RedirectToAction("Index", "Links"); } }