59 lines
1.8 KiB
C#
59 lines
1.8 KiB
C#
using CalendarReminder.Api.Data;
|
|
using CalendarReminder.Api.Models;
|
|
using CalendarReminder.Api.Services;
|
|
using CalendarReminder.Domain.Entities;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Microsoft.EntityFrameworkCore;
|
|
|
|
namespace CalendarReminder.Api.Controllers;
|
|
|
|
[ApiController]
|
|
[Route("api/[controller]")]
|
|
public class AuthController : ControllerBase
|
|
{
|
|
private readonly AppDbContext _db;
|
|
private readonly TokenService _tokenService;
|
|
|
|
public AuthController(AppDbContext db, TokenService tokenService)
|
|
{
|
|
_db = db;
|
|
_tokenService = tokenService;
|
|
}
|
|
|
|
// POST api/auth/register
|
|
[HttpPost("register")]
|
|
public async Task<IActionResult> Register(RegisterRequest req)
|
|
{
|
|
if (await _db.Users.AnyAsync(u => u.Email == req.Email))
|
|
return BadRequest("Email je už registrovaný.");
|
|
|
|
if (await _db.Users.AnyAsync(u => u.Username == req.Username))
|
|
return BadRequest("Používateľské meno je obsadené.");
|
|
|
|
var user = new User
|
|
{
|
|
Username = req.Username,
|
|
Email = req.Email,
|
|
PasswordHash = BCrypt.Net.BCrypt.HashPassword(req.Password)
|
|
};
|
|
|
|
_db.Users.Add(user);
|
|
await _db.SaveChangesAsync();
|
|
|
|
var token = _tokenService.GenerateToken(user);
|
|
return Ok(new AuthResponse(token, user.Username, user.Email));
|
|
}
|
|
|
|
// POST api/auth/login
|
|
[HttpPost("login")]
|
|
public async Task<IActionResult> Login(LoginRequest req)
|
|
{
|
|
var user = await _db.Users.FirstOrDefaultAsync(u => u.Email == req.Email);
|
|
if (user is null || !BCrypt.Net.BCrypt.Verify(req.Password, user.PasswordHash))
|
|
return Unauthorized("Nesprávny email alebo heslo.");
|
|
|
|
var token = _tokenService.GenerateToken(user);
|
|
return Ok(new AuthResponse(token, user.Username, user.Email));
|
|
}
|
|
}
|