Removed all Warnings from Services project

This commit is contained in:
ashutosh.nehete 2025-04-09 09:18:15 +05:30
parent ec5fba0637
commit 58bb684c4b
11 changed files with 128 additions and 105 deletions

View File

@ -1,8 +1,8 @@
using Marco.Pms.Model.Employees; using System.ComponentModel;
using System.ComponentModel.DataAnnotations.Schema;
using Marco.Pms.Model.Employees;
using Marco.Pms.Model.Entitlements; using Marco.Pms.Model.Entitlements;
using Microsoft.AspNetCore.Mvc.ModelBinding.Validation; using Microsoft.AspNetCore.Mvc.ModelBinding.Validation;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations.Schema;
namespace Marco.Pms.Model.Projects namespace Marco.Pms.Model.Projects
{ {

View File

@ -10,7 +10,6 @@ using MarcoBMS.Services.Helpers;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using static System.Runtime.InteropServices.JavaScript.JSType;
namespace MarcoBMS.Services.Controllers namespace MarcoBMS.Services.Controllers
{ {
@ -48,7 +47,7 @@ namespace MarcoBMS.Services.Controllers
List<AttendanceLog> lstAttendance = await _context.AttendanceLogs.Where(c => c.AttendanceId == attendanceid && c.TenantId == TenantId).ToListAsync(); List<AttendanceLog> lstAttendance = await _context.AttendanceLogs.Where(c => c.AttendanceId == attendanceid && c.TenantId == TenantId).ToListAsync();
return Ok(ApiResponse<object>.SuccessResponse(lstAttendance, String.Format("{0} Attendance records fetched successfully", lstAttendance.Count), 200)); return Ok(ApiResponse<object>.SuccessResponse(lstAttendance, System.String.Format("{0} Attendance records fetched successfully", lstAttendance.Count), 200));
} }
[HttpGet("log/employee/{employeeid}")] [HttpGet("log/employee/{employeeid}")]

View File

@ -43,30 +43,29 @@ namespace MarcoBMS.Services.Controllers
{ {
var user = await _context.ApplicationUsers.FirstOrDefaultAsync(u => u.Email == loginDto.Username || u.PhoneNumber == loginDto.Username); var user = await _context.ApplicationUsers.FirstOrDefaultAsync(u => u.Email == loginDto.Username || u.PhoneNumber == loginDto.Username);
if (user == null || !await _userManager.CheckPasswordAsync(user, loginDto.Password)) if (user != null && await _userManager.CheckPasswordAsync(user, loginDto.Password))
{ {
return Unauthorized(ApiResponse<object>.ErrorResponse("Invalid username or password.", "Invalid username or password.", 401)); if (!user.IsActive)
//return Unauthorized("Invalid username or password."); {
return BadRequest(ApiResponse<object>.ErrorResponse("User is In Active", "User is In Active", 400));
}
if (!user.EmailConfirmed)
{
return BadRequest(ApiResponse<object>.ErrorResponse("Your email is not verified, Please verify your email", "Your email is not verified, Please verify your email", 400));
}
Employee emp = await _employeeHelper.GetEmployeeByApplicationUserID(user.Id);
//var refreshToken = GenerateRefreshToken();
if (user.UserName == null) return NotFound(ApiResponse<object>.ErrorResponse("UserName Not found", "UserName Not found", 404)); ;
var token = _refreshTokenService.GenerateJwtToken(user.UserName, emp.TenantId.ToString(), _jwtSettings);
var refreshToken = await _refreshTokenService.CreateRefreshToken(user.Id, emp.TenantId.ToString(), _jwtSettings);
return Ok(ApiResponse<object>.SuccessResponse(new { token = token, refreshToken = refreshToken }, "User logged in successfully.", 200));
} }
if (!user.IsActive) return Unauthorized(ApiResponse<object>.ErrorResponse("Invalid username or password.", "Invalid username or password.", 401));
{
return BadRequest(ApiResponse<object>.ErrorResponse("User is In Active", "User is In Active", 400));
//return BadRequest("User is In Active");
}
if (!user.EmailConfirmed)
{
return BadRequest(ApiResponse<object>.ErrorResponse("Your email is not verified, Please verify your email", "Your email is not verified, Please verify your email", 400));
//return BadRequest("Your email is not verified, Please verify your email");
}
Employee emp = await _employeeHelper.GetEmployeeByApplicationUserID(user.Id);
//var refreshToken = GenerateRefreshToken();
var token = _refreshTokenService.GenerateJwtToken(user.UserName, emp.TenantId.ToString(), _jwtSettings);
var refreshToken = await _refreshTokenService.CreateRefreshToken(user.Id, emp.TenantId.ToString(), _jwtSettings);
return Ok(ApiResponse<object>.SuccessResponse(new { token = token, refreshToken = refreshToken }, "User logged in successfully.", 200));
} }
[HttpPost("logout")] [HttpPost("logout")]
@ -98,7 +97,7 @@ namespace MarcoBMS.Services.Controllers
catch (Exception ex) catch (Exception ex)
{ {
// _logger.LogError(ex, "Error during logout"); // _logger.LogError(ex, "Error during logout");
return BadRequest(ApiResponse<object>.ErrorResponse("Internal server error", "Internal server error", 500)); return BadRequest(ApiResponse<object>.ErrorResponse("Internal server error", ex.Message, 500));
} }
} }
@ -120,6 +119,8 @@ namespace MarcoBMS.Services.Controllers
return BadRequest(ApiResponse<object>.ErrorResponse("Invalid request.", "Invalid request.", 400)); return BadRequest(ApiResponse<object>.ErrorResponse("Invalid request.", "Invalid request.", 400));
Employee emp = await _employeeHelper.GetEmployeeByApplicationUserID(user.Id); Employee emp = await _employeeHelper.GetEmployeeByApplicationUserID(user.Id);
if (user.UserName == null) return NotFound(ApiResponse<object>.ErrorResponse("UserName Not found", "UserName Not found", 404));
var newJwtToken = _refreshTokenService.GenerateJwtToken(user.UserName, emp.TenantId.ToString(), _jwtSettings); var newJwtToken = _refreshTokenService.GenerateJwtToken(user.UserName, emp.TenantId.ToString(), _jwtSettings);
var newRefreshToken = await _refreshTokenService.CreateRefreshToken(user.Id, emp.TenantId.ToString(), _jwtSettings); var newRefreshToken = await _refreshTokenService.CreateRefreshToken(user.Id, emp.TenantId.ToString(), _jwtSettings);
@ -137,6 +138,9 @@ namespace MarcoBMS.Services.Controllers
/* SEND USER REGISTRATION MAIL*/ /* SEND USER REGISTRATION MAIL*/
var token = await _userManager.GeneratePasswordResetTokenAsync(user); var token = await _userManager.GeneratePasswordResetTokenAsync(user);
var resetLink = $"{_configuration["AppSettings:WebFrontendUrl"]}/reset-password?token={WebUtility.UrlEncode(token)}"; var resetLink = $"{_configuration["AppSettings:WebFrontendUrl"]}/reset-password?token={WebUtility.UrlEncode(token)}";
if (user.Email == null) return NotFound(ApiResponse<object>.ErrorResponse("Email Not found", "Email Not found", 404));
await _emailSender.SendResetPasswordEmail(user.Email, "", resetLink); await _emailSender.SendResetPasswordEmail(user.Email, "", resetLink);
@ -199,7 +203,7 @@ namespace MarcoBMS.Services.Controllers
var user = await _userManager.FindByEmailAsync(emailDot.ToEmail); var user = await _userManager.FindByEmailAsync(emailDot.ToEmail);
if (user == null) if (user == null)
{ {
return BadRequest(ApiResponse<object>.ErrorResponse("User not found.", "User not found.", 400)); return NotFound(ApiResponse<object>.ErrorResponse("User not found.", "User not found.", 404));
} }
/* New User*/ /* New User*/
@ -217,6 +221,9 @@ namespace MarcoBMS.Services.Controllers
var isTokenValid = await _userManager.VerifyUserTokenAsync(user, TokenOptions.DefaultProvider, "ResetPassword", token); var isTokenValid = await _userManager.VerifyUserTokenAsync(user, TokenOptions.DefaultProvider, "ResetPassword", token);
var resetLink = $"{_configuration["AppSettings:WebFrontendUrl"]}/reset-password?token={WebUtility.UrlEncode(token)}"; var resetLink = $"{_configuration["AppSettings:WebFrontendUrl"]}/reset-password?token={WebUtility.UrlEncode(token)}";
if (user.Email == null) return NotFound(ApiResponse<object>.ErrorResponse("Email Not found", "Email Not found", 404));
await _emailSender.SendResetPasswordEmail(user.Email, "", resetLink); await _emailSender.SendResetPasswordEmail(user.Email, "", resetLink);
return Ok(ApiResponse<object>.SuccessResponse(new {}, "Password reset link sent.", 200)); return Ok(ApiResponse<object>.SuccessResponse(new {}, "Password reset link sent.", 200));

View File

@ -57,7 +57,7 @@ namespace MarcoBMS.Services.Controllers
} }
int tenantId = GetTenantId(); int tenantId = GetTenantId();
var empRoles = _context.EmployeeRoleMappings.Where(c => c.EmployeeId == employeeId).Include(c => c.Role).Include(c => c.Employee).ToList(); var empRoles = await _context.EmployeeRoleMappings.Where(c => c.EmployeeId == employeeId).Include(c => c.Role).Include(c => c.Employee).ToListAsync();
if (empRoles.Any()) if (empRoles.Any())
{ {
List<EmployeeRolesVM> roles = new List<EmployeeRolesVM>(); List<EmployeeRolesVM> roles = new List<EmployeeRolesVM>();
@ -220,7 +220,7 @@ namespace MarcoBMS.Services.Controllers
// Create Employee record if missing // Create Employee record if missing
//Employee newEmployee = GetNewEmployeeModel(model, TenantId, existingUser.Id); //Employee newEmployee = GetNewEmployeeModel(model, TenantId, existingUser.Id);
//_context.Employees.Add(newEmployee); //_context.Employees.Add(newEmployee);
return BadRequest(ApiResponse<object>.ErrorResponse("You cannot use this email", "You cannot use this email", 400)); return BadRequest(ApiResponse<object>.ErrorResponse("Email already exist", "Email already exist", 400));
} }
@ -276,8 +276,8 @@ namespace MarcoBMS.Services.Controllers
} }
return Ok(ApiResponse<object>.SuccessResponse("Success.",responsemessage, 200)); return Ok(ApiResponse<object>.SuccessResponse("Success.",responsemessage, 200));
} }
#nullable disable
private static Employee GetNewEmployeeModel(CreateUserDto model, int TenantId, string? ApplicationUserId) private static Employee GetNewEmployeeModel(CreateUserDto model, int TenantId, string ApplicationUserId)
{ {
var newEmployee = new Employee var newEmployee = new Employee
{ {
@ -304,7 +304,7 @@ namespace MarcoBMS.Services.Controllers
return newEmployee; return newEmployee;
} }
private static Employee GetUpdateEmployeeModel(CreateUserDto model, Employee existingEmployee, IdentityUser? existingIdentityUser = null) private static Employee GetUpdateEmployeeModel(CreateUserDto model, Employee existingEmployee, IdentityUser existingIdentityUser = null)
{ {
if (existingEmployee.ApplicationUserId == null && existingIdentityUser != null) if (existingEmployee.ApplicationUserId == null && existingIdentityUser != null)
{ {

View File

@ -1,4 +1,6 @@
using Marco.Pms.DataAccess.Data; using System.ComponentModel.DataAnnotations.Schema;
using System.ComponentModel;
using Marco.Pms.DataAccess.Data;
using Marco.Pms.Model.Dtos.Project; using Marco.Pms.Model.Dtos.Project;
using Marco.Pms.Model.Employees; using Marco.Pms.Model.Employees;
using Marco.Pms.Model.Entitlements; using Marco.Pms.Model.Entitlements;
@ -9,8 +11,8 @@ using Marco.Pms.Model.ViewModels;
using Marco.Pms.Model.ViewModels.Employee; using Marco.Pms.Model.ViewModels.Employee;
using MarcoBMS.Services.Helpers; using MarcoBMS.Services.Helpers;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.ModelBinding.Validation;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
namespace MarcoBMS.Services.Controllers namespace MarcoBMS.Services.Controllers
@ -22,18 +24,18 @@ namespace MarcoBMS.Services.Controllers
{ {
//private readonly IUnitOfWork _unitOfWork; //private readonly IUnitOfWork _unitOfWork;
private readonly ApplicationDbContext _context; private readonly ApplicationDbContext _context;
private ApplicationUser _applicationUser; //private ApplicationUser _applicationUser;
// private readonly IProjectRepository _projectrepo; // private readonly IProjectRepository _projectrepo;
private readonly UserManager<IdentityUser> _userManager; //private readonly UserManager<IdentityUser> _userManager;
private readonly UserHelper _userHelper; private readonly UserHelper _userHelper;
public ProjectController(UserManager<IdentityUser> userManager, ApplicationDbContext context, UserHelper userHelper) public ProjectController(ApplicationDbContext context, UserHelper userHelper)
{ {
//_unitOfWork = unitOfWork; //_unitOfWork = unitOfWork;
_context = context; _context = context;
//_projectrepo = projectrepo; //_projectrepo = projectrepo;
_userManager = userManager; //_userManager = userManager;
_userHelper = userHelper; _userHelper = userHelper;
} }
[HttpGet("list")] [HttpGet("list")]
@ -67,7 +69,7 @@ namespace MarcoBMS.Services.Controllers
} }
var project = await _context.Projects.Where(c => c.TenantId == _userHelper.GetTenantId() && c.Id == id).SingleOrDefaultAsync(); var project = await _context.Projects.Where(c => c.TenantId == _userHelper.GetTenantId() && c.Id == id).SingleOrDefaultAsync();
if (project == null) return NotFound(ApiResponse<object>.ErrorResponse("Project not found", "Project not found", 404));
return Ok(ApiResponse<object>.SuccessResponse(project, "Success.", 200)); return Ok(ApiResponse<object>.SuccessResponse(project, "Success.", 200));
} }
@ -123,9 +125,12 @@ namespace MarcoBMS.Services.Controllers
foreach (WorkItem workItemDto in vm.workItems.Where(c => c.WorkAreaId == workAreaDto.Id).ToList()) foreach (WorkItem workItemDto in vm.workItems.Where(c => c.WorkAreaId == workAreaDto.Id).ToList())
{ {
WorkItemVM workItemVM = new WorkItemVM() { WorkItemId = workItemDto.Id, WorkItem = workItemDto }; WorkItemVM workItemVM = new WorkItemVM() { WorkItemId = workItemDto.Id, WorkItem = workItemDto };
workItemVM.WorkItem.WorkArea = null; //workItemVM.WorkItem.WorkArea = null
workItemVM.WorkItem.ActivityMaster.Tenant = null; workItemVM.WorkItem.WorkArea = new WorkArea ();
workItemVM.WorkItem.Tenant = null; //workItemVM.WorkItem.ActivityMaster.Tenant = null;
workItemVM.WorkItem.ActivityMaster.Tenant = new Tenant();
//workItemVM.WorkItem.Tenant = null;
workItemVM.WorkItem.Tenant = new Tenant();
@ -282,7 +287,7 @@ namespace MarcoBMS.Services.Controllers
[HttpGet] [HttpGet]
[Route("employees/get/{projectid?}/{includeInactive?}")] [Route("employees/get/{projectid?}/{includeInactive?}")]
public async Task<IActionResult> GetEmployeeByProjectID(int? projectid, bool? includeInactive = false) public async Task<IActionResult> GetEmployeeByProjectID(int? projectid, bool includeInactive = false)
{ {
if (!ModelState.IsValid) if (!ModelState.IsValid)
{ {
@ -371,13 +376,14 @@ namespace MarcoBMS.Services.Controllers
if (projectAllocationDot != null) if (projectAllocationDot != null)
{ {
int TenentID = GetTenantId(); int TenentID = GetTenantId();
List<object>? result = new List<object>();
foreach (var item in projectAllocationDot) foreach (var item in projectAllocationDot)
{ {
try try
{ {
ProjectAllocation projectAllocation = item.ToProjectAllocationFromProjectAllocationDto(TenentID); ProjectAllocation projectAllocation = item.ToProjectAllocationFromProjectAllocationDto(TenentID);
ProjectAllocation projectAllocationFromDb = await _context.ProjectAllocations.Where(c => c.EmployeeId == projectAllocation.EmployeeId ProjectAllocation? projectAllocationFromDb = await _context.ProjectAllocations.Where(c => c.EmployeeId == projectAllocation.EmployeeId
&& c.ProjectId == projectAllocation.ProjectId && c.ProjectId == projectAllocation.ProjectId
&& c.ReAllocationDate == null && c.ReAllocationDate == null
&& c.TenantId == TenentID).SingleOrDefaultAsync(); && c.TenantId == TenentID).SingleOrDefaultAsync();
@ -401,7 +407,18 @@ namespace MarcoBMS.Services.Controllers
_context.Entry(projectAllocationFromDb).Property(e => e.IsActive).IsModified = true; _context.Entry(projectAllocationFromDb).Property(e => e.IsActive).IsModified = true;
} }
await _context.SaveChangesAsync(); await _context.SaveChangesAsync();
var result1 = new
{
Id = projectAllocationFromDb.Id,
EmployeeId = projectAllocation.EmployeeId,
JobRoleId = projectAllocation.JobRoleId,
IsActive = projectAllocation.IsActive,
ProjectId = projectAllocation.ProjectId,
AllocationDate = projectAllocation.AllocationDate,
ReAllocationDate = projectAllocation.ReAllocationDate,
TenantId = projectAllocation.TenantId
};
result.Add(result1);
} }
else else
{ {
@ -416,7 +433,8 @@ namespace MarcoBMS.Services.Controllers
return Ok(ApiResponse<object>.ErrorResponse(ex.Message,ex, 400)); return Ok(ApiResponse<object>.ErrorResponse(ex.Message,ex, 400));
} }
} }
return Ok(ApiResponse<object>.SuccessResponse(null, "Data saved successfully.", 200));
return Ok(ApiResponse<object>.SuccessResponse(result, "Data saved successfully", 200));
} }
return BadRequest(ApiResponse<object>.ErrorResponse("Invalid details.", "Work Item Details are not valid." , 400)); return BadRequest(ApiResponse<object>.ErrorResponse("Invalid details.", "Work Item Details are not valid." , 400));

View File

@ -67,14 +67,18 @@ namespace MarcoBMS.Services.Controllers
var response = taskAllocation.ToAssignTaskVMFromTaskAllocation(); var response = taskAllocation.ToAssignTaskVMFromTaskAllocation();
var teamMembers = new List<TaskMembers> { }; var teamMembers = new List<TaskMembers> { };
foreach (var teamMember in assignTask.TaskTeam) { if (assignTask.TaskTeam != null)
var result = new TaskMembers {
foreach (var teamMember in assignTask.TaskTeam)
{ {
TaskAllocationId = taskAllocation.Id, var result = new TaskMembers
EmployeeId = teamMember, {
TenantId = tenantId, TaskAllocationId = taskAllocation.Id,
}; EmployeeId = teamMember,
teamMembers.Add(result); TenantId = tenantId,
};
teamMembers.Add(result);
}
} }
_context.TaskMembers.AddRange(teamMembers); _context.TaskMembers.AddRange(teamMembers);
await _context.SaveChangesAsync(); await _context.SaveChangesAsync();

View File

@ -3,22 +3,23 @@ using Marco.Pms.DataAccess.Data;
using Marco.Pms.Model.Employees; using Marco.Pms.Model.Employees;
using Marco.Pms.Model.Mapper; using Marco.Pms.Model.Mapper;
using Marco.Pms.Model.ViewModels.Employee; using Marco.Pms.Model.ViewModels.Employee;
using MarcoBMS.Services.Service;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using System.Collections.Generic;
using System.Runtime.Intrinsics.Arm;
namespace MarcoBMS.Services.Helpers namespace MarcoBMS.Services.Helpers
{ {
public class EmployeeHelper public class EmployeeHelper
{ {
private readonly ApplicationDbContext _context; private readonly ApplicationDbContext _context;
public EmployeeHelper(ApplicationDbContext context) private readonly ILoggingService _logger;
public EmployeeHelper(ApplicationDbContext context, ILoggingService logger)
{ {
_context = context; _context = context;
_logger = logger;
} }
public async Task<Employee> GetEmployeeByID(int EmployeeID) public async Task<Employee> GetEmployeeByID(int EmployeeID)
{ {
return await _context.Employees.FindAsync(EmployeeID); return await _context.Employees.FindAsync(EmployeeID) ?? new Employee { };
} }
public async Task<Employee> GetEmployeeByApplicationUserID(string ApplicationUserID) public async Task<Employee> GetEmployeeByApplicationUserID(string ApplicationUserID)
@ -27,11 +28,12 @@ namespace MarcoBMS.Services.Helpers
{ {
var result = await _context.Employees.Where(c => c.ApplicationUserId == ApplicationUserID).ToListAsync(); var result = await _context.Employees.Where(c => c.ApplicationUserId == ApplicationUserID).ToListAsync();
return await _context.Employees.Where(c => c.ApplicationUserId == ApplicationUserID).SingleOrDefaultAsync(); return await _context.Employees.Where(c => c.ApplicationUserId == ApplicationUserID).SingleOrDefaultAsync() ?? new Employee { };
} }
catch (Exception ex) catch (Exception ex)
{ {
return null; _logger.LogError("{Error}", ex.Message);
return new Employee();
} }
} }
@ -63,6 +65,7 @@ namespace MarcoBMS.Services.Helpers
} }
catch (Exception ex) catch (Exception ex)
{ {
_logger.LogError("{Error}", ex.Message);
return new List<EmployeeVM>(); return new List<EmployeeVM>();
} }
} }
@ -93,6 +96,7 @@ namespace MarcoBMS.Services.Helpers
} }
catch (Exception ex) catch (Exception ex)
{ {
_logger.LogError("{Error}", ex.Message);
return new List<EmployeeVM>(); return new List<EmployeeVM>();
} }
} }

View File

@ -1,10 +1,8 @@
using Marco.Pms.DataAccess.Data; using System.Security.Claims;
using Marco.Pms.Model.Dtos.Employees; using Marco.Pms.DataAccess.Data;
using Marco.Pms.Model.Employees; using Marco.Pms.Model.Employees;
using Marco.Pms.Model.Entitlements;
using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using System.Security.Claims;
namespace MarcoBMS.Services.Helpers namespace MarcoBMS.Services.Helpers
{ {
@ -39,8 +37,9 @@ namespace MarcoBMS.Services.Helpers
public async Task<Employee> GetCurrentEmployeeAsync() public async Task<Employee> GetCurrentEmployeeAsync()
{ {
var user = await GetCurrentUserAsync(); var user = await GetCurrentUserAsync();
if (user == null) return new Employee { };
var Employee = await _context.Employees.FirstOrDefaultAsync(e => e.ApplicationUserId == user.Id); var Employee = await _context.Employees.FirstOrDefaultAsync(e => e.ApplicationUserId == user.Id);
return Employee; return Employee ?? new Employee { };
} }
public async Task<object?> GetCurrentUserProfileAsync() public async Task<object?> GetCurrentUserProfileAsync()
@ -58,16 +57,7 @@ namespace MarcoBMS.Services.Helpers
public async Task<IdentityUser?> GetRegisteredUser(string email) public async Task<IdentityUser?> GetRegisteredUser(string email)
{ {
//IdentityUser? user = await _userManager.Users
// .FirstOrDefaultAsync(u => u.Email == model.Email || u.PhoneNumber == model.PhoneNumber);
IdentityUser? user = await _userManager.FindByEmailAsync(email); IdentityUser? user = await _userManager.FindByEmailAsync(email);
//if (user == null)
//{
// user = await _userManager.Find(model.Email);
//}
return user; return user;
} }
} }

View File

@ -44,7 +44,7 @@ builder.Services.AddCors(options =>
{ {
options.AddPolicy("Policy", policy => options.AddPolicy("Policy", policy =>
{ {
if (allowedOrigins != null) if (allowedOrigins != null && allowedMethods != null && allowedHeaders != null)
{ {
policy.WithOrigins(allowedOrigins) policy.WithOrigins(allowedOrigins)
.WithMethods(allowedMethods) .WithMethods(allowedMethods)
@ -93,7 +93,7 @@ builder.Services.AddTransient<IEmailSender, EmailSender>();
builder.Services.AddIdentity<IdentityUser, IdentityRole>().AddEntityFrameworkStores<ApplicationDbContext>().AddDefaultTokenProviders(); builder.Services.AddIdentity<IdentityUser, IdentityRole>().AddEntityFrameworkStores<ApplicationDbContext>().AddDefaultTokenProviders();
string connString = builder.Configuration.GetConnectionString("DefaultConnectionString"); string? connString = builder.Configuration.GetConnectionString("DefaultConnectionString");
builder.Services.AddDbContext<ApplicationDbContext>(options => builder.Services.AddDbContext<ApplicationDbContext>(options =>
{ {
@ -122,24 +122,27 @@ builder.Services.AddSingleton<ILoggingService, LoggingService>();
builder.Services.AddHttpContextAccessor(); builder.Services.AddHttpContextAccessor();
var jwtSettings = builder.Configuration.GetSection("Jwt").Get<JwtSettings>(); var jwtSettings = builder.Configuration.GetSection("Jwt").Get<JwtSettings>();
builder.Services.AddAuthentication(options => if(jwtSettings != null)
{ {
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; builder.Services.AddAuthentication(options =>
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{ {
ValidateIssuer = true, options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
ValidateAudience = true, options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
ValidateLifetime = true, })
ValidateIssuerSigningKey = true, .AddJwtBearer(options =>
ValidIssuer = jwtSettings.Issuer, {
ValidAudience = jwtSettings.Audience, options.TokenValidationParameters = new TokenValidationParameters
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtSettings.Key)) {
}; ValidateIssuer = true,
}); ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = jwtSettings.Issuer,
ValidAudience = jwtSettings.Audience,
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtSettings.Key))
};
});
}
builder.Services.AddSingleton(jwtSettings); builder.Services.AddSingleton(jwtSettings);

View File

@ -1,16 +1,11 @@
using Marco.Pms.DataAccess.Data; using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using System.Text;
using Marco.Pms.DataAccess.Data;
using Marco.Pms.Model.Authentication; using Marco.Pms.Model.Authentication;
using Marco.Pms.Model.Entitlements;
using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Caching.Memory; using Microsoft.Extensions.Caching.Memory;
using Microsoft.IdentityModel.Tokens; using Microsoft.IdentityModel.Tokens;
using Newtonsoft.Json.Linq;
using SharpCompress.Common;
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using System.Security.Cryptography;
using System.Text;
namespace MarcoBMS.Services.Service namespace MarcoBMS.Services.Service
@ -19,12 +14,14 @@ namespace MarcoBMS.Services.Service
{ {
private readonly ApplicationDbContext _context; private readonly ApplicationDbContext _context;
private readonly IMemoryCache _cache; // For optional JWT blacklisting private readonly IMemoryCache _cache; // For optional JWT blacklisting
private readonly ILoggingService _logger;
public RefreshTokenService(ApplicationDbContext context, IMemoryCache cache) public RefreshTokenService(ApplicationDbContext context, IMemoryCache cache, ILoggingService logger)
{ {
_context = context; _context = context;
_cache = cache; _cache = cache;
_logger = logger;
} }
public string GenerateJwtToken(string username, string tenantId, JwtSettings _jwtSettings) public string GenerateJwtToken(string username, string tenantId, JwtSettings _jwtSettings)
@ -94,13 +91,14 @@ namespace MarcoBMS.Services.Service
return strToken; return strToken;
}catch(Exception ex) }catch(Exception ex)
{ {
_logger.LogError("{Error}", ex.Message);
throw; throw;
} }
} }
public async Task<RefreshToken> GetRefreshToken(string token) public async Task<RefreshToken> GetRefreshToken(string token)
{ {
return await _context.RefreshTokens.FirstOrDefaultAsync(rt => rt.Token == token && !rt.IsRevoked && !rt.IsUsed); return await _context.RefreshTokens.FirstOrDefaultAsync(rt => rt.Token == token && !rt.IsRevoked && !rt.IsUsed) ?? new RefreshToken();
} }
public async Task MarkRefreshTokenAsUsed(RefreshToken refreshToken) public async Task MarkRefreshTokenAsUsed(RefreshToken refreshToken)

View File

@ -10,7 +10,7 @@
"Override": { "Override": {
"Microsoft": "Warning", "Microsoft": "Warning",
"Microsoft.EntityFrameworkCore.Database.Command": "Warning", "Microsoft.EntityFrameworkCore.Database.Command": "Warning",
"Microsoft.AspNetCore.Mvc.Infrastructure": "Warning", "Microsoft.AspNetCore.Mvc.Infrastructure": "Warning"
//"Serilog.AspNetCore.RequestLoggingMiddleware": "Warning" //"Serilog.AspNetCore.RequestLoggingMiddleware": "Warning"
} }
}, },
@ -64,7 +64,7 @@
"ConnectionStrings": { "ConnectionStrings": {
// "DefaultConnectionString": "Server=103.50.160.45;User ID=marcowvh_admin;Password=Marcoemp@123;Database=marcowvh_empattendanceci", // "DefaultConnectionString": "Server=103.50.160.45;User ID=marcowvh_admin;Password=Marcoemp@123;Database=marcowvh_empattendanceci",
"DefaultConnectionString": "Server=localhost;port=3306;User ID=root;Password=root;Database=MarcoBMS2", "DefaultConnectionString": "Server=localhost;port=3306;User ID=root;Password=root;Database=MarcoBMS2"
//"DefaultConnectionString": "Server=147.93.98.152;User ID=devuser;Password=AppUser@123$;Database=MarcoBMS1" //"DefaultConnectionString": "Server=147.93.98.152;User ID=devuser;Password=AppUser@123$;Database=MarcoBMS1"
}, },
"AppSettings": { "AppSettings": {