This commit is contained in:
2025-07-26 08:59:20 -07:00
parent d1b53ee62e
commit ff8364bce0
@@ -6,7 +6,6 @@ using Auth.DTO;
using System.Web.Http; using System.Web.Http;
using System.IdentityModel.Tokens.Jwt; using System.IdentityModel.Tokens.Jwt;
using Microsoft.IdentityModel.Tokens; using Microsoft.IdentityModel.Tokens;
using System.Text;
using System.Security.Claims; using System.Security.Claims;
namespace Auth.Controllers { namespace Auth.Controllers {
@@ -51,7 +50,7 @@ namespace Auth.Controllers {
await _databaseService.SetAccount(test); await _databaseService.SetAccount(test);
string jwt = AuthJWT.GenereateJWTToken(test, request.StayLoggedIn); string jwt = AuthJWT.GenereateJWTToken(test, request.StayLoggedIn);
AuthJWT.SignIn(Response, request.StayLoggedIn, jwt); SignIn(Response, request.StayLoggedIn, jwt);
return Ok(test); return Ok(test);
} }
@@ -75,68 +74,11 @@ namespace Auth.Controllers {
} }
} }
[Route("jwtlogin")]
[HttpPost]
public async Task<ActionResult> Authenticate([FromBody] LoginRequest request) {
try {
Account? test = await _databaseService.GetAccount(request.UserName.ToLower());
if (test != null) {
if (test.EmailVerified == true) {
if (test.FailedPasswordLock) {
if (test.CurrentPasswordAttempts >= test.PasswordAttempts) {
return BadRequest("Too many failed password attempts. Please reset your password");
}
}
if (BCrypt.Net.BCrypt.Verify(request.Password, test.PasswordHash)) {
test.CurrentPasswordAttempts = 0;
await _databaseService.SetAccount(test);
return Ok(AuthJWT.GenereateJWTToken(test, request.StayLoggedIn));
} else {
test.CurrentPasswordAttempts += 1;
await _databaseService.SetAccount(test);
return BadRequest("Wrong Password");
}
} else {
await SendVerify(new SendVerifyEmailRequest {
UserName = test.UserName
});
return BadRequest("A new verify email has been sent. \n Note only 1 email send every 5 mintes");
}
}
return BadRequest("Account Not Found");
} catch (Exception ex) {
Console.WriteLine("Login Error: " + ex.Message);
return BadRequest("An internal server error has occured");
}
}
[Route("jwttryrenew")]
[HttpPost]
public IActionResult Refresh([FromBody] JWTRenewRequest request){
try {
JwtSecurityTokenHandler handler = new JwtSecurityTokenHandler();
ClaimsPrincipal claimsPrincipal = handler.ValidateToken(request.Token, AuthJWT.TokenParameters, out var validatedToken);
JwtSecurityToken jwt = (JwtSecurityToken)validatedToken;
if (jwt != null) {
if (jwt.ValidTo - DateTime.UtcNow < TimeSpan.FromDays(1)) {
var newJwt = AuthJWT.RenewJWTToken(claimsPrincipal);
return Ok(newJwt);
}
return BadRequest("Not ready to renew");
}
return BadRequest("Malformed Token");
}
catch (SecurityTokenException ex) {
return Unauthorized($"Token invalid: {ex.Message}");
}
}
[Route("logout")] [Route("logout")]
[HttpPost] [HttpPost]
public ActionResult Logout() { public ActionResult Logout() {
if (isLoggedIn()) { if (isLoggedIn()) {
AuthJWT.SignOut(Response); SignOut(Response);
return Ok(); return Ok();
} }
return BadRequest(); return BadRequest();