Code refactoring + tests

This commit is contained in:
2025-03-04 00:42:20 +01:00
parent a0c93ea587
commit f73fe748ed
8 changed files with 299 additions and 86 deletions

View File

@@ -5,52 +5,48 @@ using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using System.Text;
using BasicDotnetTemplate.MainProject.Core.Database;
using BasicDotnetTemplate.MainProject.Utils;
using DatabaseSqlServer = BasicDotnetTemplate.MainProject.Models.Database.SqlServer;
namespace BasicDotnetTemplate.MainProject.Services;
public interface IJwtService
{
string GenerateToken(string guid);
DatabaseSqlServer.User? ValidateToken(string headerAuthorization);
}
public class JwtService : BaseService, IJwtService
{
private readonly string _jwtKey;
private readonly string _jwtIssuer;
private readonly string _jwtAudience;
private readonly JwtTokenUtils _jwtTokenUtils;
private readonly IUserService _userService;
public JwtService(
IConfiguration configuration,
SqlServerContext sqlServerContext
SqlServerContext sqlServerContext,
IUserService userService
) : base(configuration, sqlServerContext)
{
_jwtKey = _appSettings?.JwtSettings?.Secret ?? String.Empty;
_jwtIssuer = _appSettings?.JwtSettings?.ValidIssuer ?? String.Empty;
_jwtAudience = _appSettings?.JwtSettings?.ValidAudience ?? String.Empty;
_jwtTokenUtils = new JwtTokenUtils(_appSettings);
_userService = userService;
}
public string GenerateToken(string userId, string username)
public string GenerateToken(string guid)
{
var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_jwtKey));
var credentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);
var expiration = _appSettings?.JwtSettings?.ExpiredAfterMinsOfInactivity ?? 15;
return _jwtTokenUtils.GenerateToken(guid);
}
var claims = new List<Claim>
public DatabaseSqlServer.User? ValidateToken(string headerAuthorization)
{
DatabaseSqlServer.User? user = null;
string? guid = _jwtTokenUtils.ValidateToken(headerAuthorization);
if(!String.IsNullOrEmpty(guid))
{
new Claim(JwtRegisteredClaimNames.Sub, userId),
new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
new Claim("userid", userId)
};
var token = new JwtSecurityToken(
_jwtIssuer,
_jwtAudience,
claims,
expires: DateTime.Now.AddMinutes(expiration),
signingCredentials: credentials);
return new JwtSecurityTokenHandler().WriteToken(token);
user = this._userService.GetUserByGuid(guid);
}
return user;
}
}