Better logging for auth controller

media
Pat Hartl 2023-09-14 17:14:03 -05:00
parent 0a6b7fbe9d
commit 75de5465c7
1 changed files with 25 additions and 2 deletions

View File

@ -5,6 +5,7 @@ using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.IdentityModel.Tokens; using Microsoft.IdentityModel.Tokens;
using NLog;
using System.IdentityModel.Tokens.Jwt; using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims; using System.Security.Claims;
using System.Security.Cryptography; using System.Security.Cryptography;
@ -35,6 +36,8 @@ namespace LANCommander.Controllers.Api
[ApiController] [ApiController]
public class AuthController : ControllerBase public class AuthController : ControllerBase
{ {
protected readonly Logger Logger = LogManager.GetCurrentClassLogger();
private readonly UserManager<User> UserManager; private readonly UserManager<User> UserManager;
private readonly IUserStore<User> UserStore; private readonly IUserStore<User> UserStore;
private readonly RoleManager<Role> RoleManager; private readonly RoleManager<Role> RoleManager;
@ -57,10 +60,14 @@ namespace LANCommander.Controllers.Api
{ {
var token = await Login(user, model.Password); var token = await Login(user, model.Password);
Logger.Debug("Successfully logged in user {UserName}", user.UserName);
return Ok(token); return Ok(token);
} }
catch catch (Exception ex)
{ {
Logger.Error(ex, "An error occurred while trying to log in {UserName}", model.UserName);
return Unauthorized(); return Unauthorized();
} }
} }
@ -80,6 +87,7 @@ namespace LANCommander.Controllers.Api
{ {
if (token == null) if (token == null)
{ {
Logger.Debug("Null token passed when trying to refresh");
return BadRequest("Invalid client request"); return BadRequest("Invalid client request");
} }
@ -87,6 +95,7 @@ namespace LANCommander.Controllers.Api
if (principal == null) if (principal == null)
{ {
Logger.Debug("Invalid access token or refresh token");
return BadRequest("Invalid access token or refresh token"); return BadRequest("Invalid access token or refresh token");
} }
@ -94,6 +103,7 @@ namespace LANCommander.Controllers.Api
if (user == null || user.RefreshToken != token.RefreshToken || user.RefreshTokenExpiration <= DateTime.Now) if (user == null || user.RefreshToken != token.RefreshToken || user.RefreshTokenExpiration <= DateTime.Now)
{ {
Logger.Debug("Invalid access token or refresh token for user {UserName}", principal.Identity.Name);
return BadRequest("Invalid access token or refresh token"); return BadRequest("Invalid access token or refresh token");
} }
@ -104,6 +114,8 @@ namespace LANCommander.Controllers.Api
await UserManager.UpdateAsync(user); await UserManager.UpdateAsync(user);
Logger.Debug("Successfully refreshed token for user {UserName}", user.UserName);
return Ok(new return Ok(new
{ {
AccessToken = new JwtSecurityTokenHandler().WriteToken(newAccessToken), AccessToken = new JwtSecurityTokenHandler().WriteToken(newAccessToken),
@ -118,10 +130,14 @@ namespace LANCommander.Controllers.Api
var user = await UserManager.FindByNameAsync(model.UserName); var user = await UserManager.FindByNameAsync(model.UserName);
if (user != null) if (user != null)
{
Logger.Debug("Cannot register user with username {UserName}, already exists", model.UserName);
return Unauthorized(new return Unauthorized(new
{ {
Message = "Username is unavailable" Message = "Username is unavailable"
}); });
}
user = new User(); user = new User();
@ -135,10 +151,13 @@ namespace LANCommander.Controllers.Api
{ {
var token = await Login(user, model.Password); var token = await Login(user, model.Password);
Logger.Debug("Successfully registered user {UserName}", user.UserName);
return Ok(token); return Ok(token);
} }
catch catch (Exception ex)
{ {
Logger.Error(ex, "Could not register user {UserName}", user.UserName);
return BadRequest(new return BadRequest(new
{ {
Message = "An unknown error occurred" Message = "An unknown error occurred"
@ -156,6 +175,8 @@ namespace LANCommander.Controllers.Api
{ {
if (user != null && await UserManager.CheckPasswordAsync(user, password)) if (user != null && await UserManager.CheckPasswordAsync(user, password))
{ {
Logger.Debug("Password check for user {UserName} was successful", user.UserName);
if (Settings.Authentication.RequireApproval && !user.Approved) if (Settings.Authentication.RequireApproval && !user.Approved)
throw new Exception("Account must be approved by an administrator"); throw new Exception("Account must be approved by an administrator");
@ -172,6 +193,8 @@ namespace LANCommander.Controllers.Api
authClaims.Add(new Claim(ClaimTypes.Role, userRole)); authClaims.Add(new Claim(ClaimTypes.Role, userRole));
} }
Logger.Debug("Generating authentication token for user {UserName}", user.UserName);
var token = GetToken(authClaims); var token = GetToken(authClaims);
var refreshToken = GenerateRefreshToken(); var refreshToken = GenerateRefreshToken();