Generator Changes at 9/27/2025 11:50:52 PM

This commit is contained in:
MeysamMoghaddam
2025-09-27 23:59:05 +03:30
parent ec6ab8258a
commit 6fd9472f2b
11 changed files with 165 additions and 1 deletions

View File

@@ -8,6 +8,7 @@ using Microsoft.AspNetCore.Http;
using System.Diagnostics;
using Microsoft.IdentityModel.Tokens;
using System.Text;
using CMSMicroservice.Infrastructure.Services;
namespace Microsoft.Extensions.DependencyInjection;
@@ -17,6 +18,7 @@ public static class ConfigureServices
{
services.AddScoped<AuditableEntitySaveChangesInterceptor>();
services.AddScoped<ApplicationDbContextInitialiser>();
services.AddScoped<IGenerateJwtToken, GenerateJwtTokenService>();
services.AddScoped<IApplicationDbContext>(p => p.GetRequiredService<ApplicationDbContext>());
if (configuration.GetValue<bool>("UseInMemoryDatabase"))
{

View File

@@ -0,0 +1,67 @@
using CMSMicroservice.Application.Common.Interfaces;
using CMSMicroservice.Domain.Entities;
using Microsoft.Extensions.Configuration;
using Microsoft.IdentityModel.Tokens;
using System.Collections.Generic;
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using System.Text;
namespace CMSMicroservice.Infrastructure.Services;
public class GenerateJwtTokenService : IGenerateJwtToken
{
private readonly IConfiguration _configuration;
public GenerateJwtTokenService(IConfiguration configuration)
{
_configuration = configuration;
}
public async Task<string> GenerateJwtToken(User user)
{
var lastModified = user.LastModified ?? user.Created;
var claims = new List<Claim>
{
new(ClaimTypes.NameIdentifier, user.Id.ToString()),
new(ClaimTypes.MobilePhone, user.Mobile),
new("ReferralCode", user.ReferralCode),
new(ClaimTypes.Name, $"{user.FirstName} {user.LastName}")
};
if (!string.IsNullOrWhiteSpace(user.FirstName))
claims.Add(new Claim("FirstName", user.FirstName));
if (!string.IsNullOrWhiteSpace(user.LastName))
claims.Add(new Claim("LastName", user.LastName));
if (user.UserRoles != null && user.UserRoles.Any())
{
foreach (var userRole in user.UserRoles)
{
claims.Add(new Claim(ClaimTypes.Role, userRole.Role.Name));
}
if (user.UserRoles.Max(x => x.Created) > lastModified)
lastModified = user.UserRoles.Max(x => x.Created);
if (user.UserRoles.Where(x => x.LastModified != null).Max(x => x.LastModified) > lastModified)
lastModified = user.UserRoles.Where(x => x.LastModified != null).Max(x => x.Created);
}
claims.Add(new Claim("LastModified", lastModified.ToString()));
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["JwtSecurityKey"]));
var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
var expiry = DateTime.Now.AddDays(Convert.ToInt32(_configuration["JwtExpiryInDays"]));
var token = new JwtSecurityToken(
_configuration["JwtIssuer"],
_configuration["JwtAudience"],
claims,
expires: expiry,
signingCredentials: creds
);
var _token = new JwtSecurityTokenHandler().WriteToken(token);
return _token;
}
}