add missing file
continuous-integration/drone/pr Build is failing Details
continuous-integration/drone/push Build is failing Details

pull/10/head
David D'ALMEIDA 1 year ago
parent 0ae475613c
commit d13cae449b

@ -0,0 +1,13 @@
using System.ComponentModel.DataAnnotations;
using System.Text.Json.Serialization;
namespace Dto.Auth;
public class LoginRequestDto
{
[Required(ErrorMessage = "Username is required")]
public string Username { get; set; }
[Required(ErrorMessage = "Password is required")]
public string Password { get; set; }
}

@ -0,0 +1,152 @@
using System.Globalization;
using Dto.Auth;
using Dto.Tiny;
using Entities;
using HeartTrackAPI.Request;
using HeartTrackAPI.Services;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
namespace HeartTrackAPI.Controllers;
[ApiController]
public class AuthController : Controller
{
private readonly UserManager<AthleteEntity> _userManager;
private readonly ITokenService _tokenService;
private readonly SignInManager<AthleteEntity> _signinManager;
public AuthController(UserManager<AthleteEntity> userManager,ITokenService tokenService, SignInManager<AthleteEntity> signinManager)
{
_userManager = userManager;
_tokenService = tokenService;
_signinManager = signinManager;
}
[HttpPost("login")]
public async Task<IActionResult> Login(LoginRequestDto 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 AuthResponseDto
{
AccessToken = _tokenService.CreateToken(user),
ExpiresIn = DateTime.Now.AddDays(7).ToString(CultureInfo.InvariantCulture),
TokenType = "Bearer"
}
);
}
[HttpPost("register")]
public async Task<IActionResult> Register([FromBody] RegisterRequestDto request)
{
try
{
if (!ModelState.IsValid)
return BadRequest(ModelState);
// just for testing
// the good way is to use the repository and give him the userManager
var user = new AthleteEntity
{
Email = request.Email,
UserName = request.Username,
LastName = request.LastName,
FirstName = request.FirstName,
Sexe = request.Sexe,
Length = request.Size,
Weight = request.Weight,
DateOfBirth = DateOnly.FromDateTime(request.DateOfBirth),
IsCoach = request.IsCoach
};
var createdUser = _userManager.CreateAsync(user, request.Password).Result;
if (createdUser.Succeeded)
{
var roleResult = await _userManager.AddToRoleAsync(user, request.IsCoach ? "Coach" : "Athlete");
if (roleResult.Succeeded)
{
return Ok(
new AuthResponseDto
{
AccessToken = _tokenService.CreateToken(user),
ExpiresIn = DateTime.Now.AddDays(7).ToString(),
TokenType = "Bearer"
}
);
}
{
return StatusCode(500, roleResult.Errors);
}
}
{
return StatusCode(500, createdUser.Errors);
}
}
catch (Exception e)
{
return StatusCode(500, e.Message);
}
/* var user = _userRepository.GetByEmail(request.Email);
if (user != null)
{
return BadRequest("User already exists");
}
var newUser = new User
{
Email = request.Email,
PasswordHash = BCrypt.Net.BCrypt.HashPassword(request.PasswordHash),
FirstName = request.FirstName,
LastName = request.LastName
};
_userRepository.Add(newUser);
return Ok();*/
}
/*
[HttpPost("refresh")]
public IActionResult Refresh([FromBody] RefreshRequest request)
{
var user = _userRepository.GetByEmail(request.Email);
if (user == null)
{
return Unauthorized();
}
if (!BCrypt.Net.BCrypt.Verify(request.PasswordHash, user.PasswordHash))
{
return Unauthorized();
}
var token = _jwtService.GenerateToken(user);
return Ok(new { token });
}
*/
[HttpPost("logout")]
public IActionResult Logout()
{
return Ok();
}
/*
[HttpPost("forgot-password")]
public IActionResult ForgotPassword([FromBody] ForgotPasswordRequest request)
{
var user = _userRepository.GetByEmail(request.Email);
if (user == null)
{
return BadRequest("User not found");
}
var token = _jwtService.GenerateToken(user);
// send email with token
return Ok();
}*/
}
Loading…
Cancel
Save