Files
NoteApp/noteApi/Controllers/AccountController.cs
2025-02-08 14:01:15 +01:00

97 lines
3.1 KiB
C#

using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Microsoft.IdentityModel.Tokens;
using noteApi.Dtos.Account;
using noteApi.Interfaces;
using noteApi.Models;
namespace noteApi.Controllers
{
[Route("api/account")]
[ApiController]
public class AccountController : ControllerBase
{
private readonly UserManager<AppUser> _userManager;
private readonly ITokenService _tokenService;
private readonly SignInManager<AppUser> _signInManager;
public AccountController(UserManager<AppUser> userManager, ITokenService tokenService, SignInManager<AppUser> signInManager)
{
_userManager = userManager;
_tokenService = tokenService;
_signInManager = signInManager;
}
[HttpPost("register")]
public async Task<IActionResult> Register([FromBody] RegisterDto registerDto)
{
try
{
if(!ModelState.IsValid)
return BadRequest(ModelState);
var appUser = new AppUser
{
UserName = registerDto.Username,
Email = registerDto.Email
};
var createUser = await _userManager.CreateAsync(appUser, registerDto.Password);
if (createUser.Succeeded)
{
var roleResult = await _userManager.AddToRoleAsync(appUser, "User");
if (roleResult.Succeeded)
{
return Ok(new NewUserDto{
UserName = appUser.UserName,
Email = appUser.Email,
Token = _tokenService.CreateToken(appUser)
});
}
else
{
return StatusCode(500, roleResult.Errors);
}
}
else
{
return StatusCode(500, createUser.Errors);
}
} catch (Exception ex)
{
return StatusCode(500, ex);
}
}
[HttpPost("login")]
public async Task<IActionResult> Login(LoginDto loginDto)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
var user = await _userManager.Users.FirstOrDefaultAsync(x => x.UserName == loginDto.Username.ToLower());
if(user == null)
{
return Unauthorized("Invalid username!");
}
var result = await _signInManager.CheckPasswordSignInAsync(user, loginDto.Password, false);
if (!result.Succeeded) return Unauthorized("Username not found and/or Password incorrect!");
return Ok(
new NewUserDto
{
UserName = user.UserName,
Email = user.Email,
Token = _tokenService.CreateToken(user)
}
);
}
}
}