Refaktorisierung der Lokalisierung und DTO-Integration

- Ersetzung von ITranslateService durch IStringLocalizer<X> für verbesserte Lokalisierung.
- Aktualisierung der DTO-Klassen entsprechend der neuesten Core.DTO-Struktur.
- Integration der neuen Klassen Result und DataResult aus Core.DTO für standardisierte Serviceantworten.
This commit is contained in:
Developer 02
2024-05-02 17:36:53 +02:00
parent dbe3743660
commit 0abdbfa705
108 changed files with 1089 additions and 126 deletions

View File

@@ -9,6 +9,8 @@ using DigitalData.UserManager.Application;
using DigitalData.UserManager.Application.DTOs.Auth;
using DigitalData.Core.Contracts.Application;
using Microsoft.Extensions.Caching.Memory;
using Microsoft.Extensions.Localization;
using DigitalData.Core.DTO;
namespace DigitalData.UserManager.API.Controllers
{
@@ -20,14 +22,16 @@ namespace DigitalData.UserManager.API.Controllers
private IMemoryCache _memoryCache;
private IConfiguration _configuration;
private IDirectorySearchService _dirSearchService;
private readonly IStringLocalizer<Resource> _localizer;
public AuthController(IUserService userService, IGroupOfUserService gouService, IMemoryCache memoryCache, IConfiguration configuration, IDirectorySearchService directorySearchService)
public AuthController(IUserService userService, IGroupOfUserService gouService, IMemoryCache memoryCache, IConfiguration configuration, IDirectorySearchService directorySearchService, IStringLocalizer<Resource> localizer)
{
_userService = userService;
_gouService = gouService;
_memoryCache = memoryCache;
_configuration = configuration;
_dirSearchService = directorySearchService;
_localizer = localizer;
}
[AllowAnonymous]
@@ -41,11 +45,11 @@ namespace DigitalData.UserManager.API.Controllers
bool isValid = _dirSearchService.ValidateCredentials(login.Username, login.Password);
if (!isValid)
return Unauthorized(_userService.Failed(MessageKey.UserNotFound.ToString()));
return Unauthorized(Result.Fail().Message(_localizer[Key.UserNotFound]));
var gouMsg = await _gouService.HasGroup(login.Username, "PM_USER", caseSensitive:false);
if(!gouMsg.IsSuccess)
return Unauthorized(_userService.Failed(MessageKey.UnauthorizedUser.ToString()));
return Unauthorized(Result.Fail().Message(_localizer[Key.UnauthorizedUser]));
//find the user
var uRes = await _userService.ReadByUsernameAsync(login.Username);
@@ -103,7 +107,7 @@ namespace DigitalData.UserManager.API.Controllers
if (!userDto.IsSuccess || userDto.Data is null)
{
return NotFound(_userService.Failed("User not found."));
return NotFound(Result.Fail().Message(_localizer[Key.UserNotFound]));
}
return Ok(userDto.Data);

View File

@@ -6,11 +6,8 @@ using Microsoft.Extensions.Caching.Memory;
using System.Diagnostics.CodeAnalysis;
using System.Security.Claims;
using DigitalData.UserManager.Application;
using DigitalData.UserManager.Application.DTOs.User;
using System.DirectoryServices;
using static System.Runtime.InteropServices.JavaScript.JSType;
using System.Linq;
using System.IO;
using Microsoft.Extensions.Localization;
using DigitalData.Core.DTO;
namespace DigitalData.UserManager.API.Controllers
{
@@ -23,10 +20,12 @@ namespace DigitalData.UserManager.API.Controllers
private IDirectorySearchService _dirSearchService;
private IMemoryCache _memoryCache;
private Dictionary<string, string> _customSearchFilters;
private readonly IStringLocalizer<Resource> _localizer;
public DirectoryController(IConfiguration configuration, ILogger<DirectoryController> logger, IUserService userService, IDirectorySearchService directorySearchService, IMemoryCache memoryCache)
public DirectoryController(IConfiguration configuration, ILogger<DirectoryController> logger, IStringLocalizer<Resource> localizer, IUserService userService, IDirectorySearchService directorySearchService, IMemoryCache memoryCache)
{
_logger = logger;
_localizer = localizer;
_userService = userService;
_dirSearchService = directorySearchService;
_memoryCache = memoryCache;
@@ -76,11 +75,11 @@ namespace DigitalData.UserManager.API.Controllers
bool isValid = _dirSearchService.ValidateCredentials(dirEntryUsername, searchRootCreateDto.DirEntryPassword);
if (!isValid)
return Unauthorized(_dirSearchService.Failed(MessageKey.UserNotFound.ToString()));
return Unauthorized(Result.Fail().Message(_localizer[Key.UserNotFound]));
var userResult = await _userService.ReadByUsernameAsync(dirEntryUsername);
if(!userResult.IsSuccess || userResult.Data is null)
return Unauthorized(_dirSearchService.Failed(MessageKey.UserNotFoundInLocalDB.ToString()));
return Unauthorized(Result.Fail().Message(_localizer[Key.UserNotFoundInLocalDB]));
_dirSearchService.SetSearchRootCache(userResult.Data.Username, searchRootCreateDto.DirEntryPassword);
return Ok();

View File

@@ -19,7 +19,7 @@ namespace DigitalData.UserManager.API.Controllers
[HttpDelete]
public async Task<IActionResult> Delete([FromQuery] int moduleId, [FromQuery]int userId)
{
IServiceMessage result = await _service.DeleteAsyncByModuleUserId(moduleId, userId);
var result = await _service.DeleteAsyncByModuleUserId(moduleId, userId);
if (result.IsSuccess)
{
return Ok(result);

View File

@@ -6,14 +6,6 @@
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
<Content Remove="nlog.config" />
</ItemGroup>
<ItemGroup>
<None Include="nlog.config" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="7.0.14" />
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="7.0.4" />
@@ -47,8 +39,8 @@
<Reference Include="DigitalData.Core.Contracts">
<HintPath>..\..\WebCoreModules\DigitalData.Core.Contracts\bin\Debug\net7.0\DigitalData.Core.Contracts.dll</HintPath>
</Reference>
<Reference Include="DigitalData.Core.CultureServices">
<HintPath>..\..\WebCoreModules\DigitalData.Core.CultureServices\bin\Debug\net7.0\DigitalData.Core.CultureServices.dll</HintPath>
<Reference Include="DigitalData.Core.DTO">
<HintPath>..\..\WebCoreModules\DigitalData.Core.API\bin\Debug\net7.0\DigitalData.Core.DTO.dll</HintPath>
</Reference>
<Reference Include="DigitalData.Core.Infrastructure">
<HintPath>..\..\WebCoreModules\DigitalData.Core.Infrastructure\bin\Debug\net7.0\DigitalData.Core.Infrastructure.dll</HintPath>

View File

@@ -4,7 +4,6 @@ using DigitalData.UserManager.Application.Contracts;
using DigitalData.UserManager.Application.Services;
using DigitalData.UserManager.Infrastructure.Repositories;
using DigitalData.UserManager.Infrastructure.Contracts;
using DigitalData.Core.CultureServices;
using DigitalData.Core.Application;
using Microsoft.AspNetCore.Authentication.Cookies;
using NLog.Web;
@@ -35,14 +34,13 @@ try {
builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(options =>
{
options.Cookie.HttpOnly = false;
//options.Cookie.SecurePolicy = CookieSecurePolicy.Always; //always https
options.Cookie.SameSite = SameSiteMode.None;
options.Cookie.HttpOnly = true; // Makes the cookie inaccessible to client-side scripts for security
options.Cookie.SecurePolicy = CookieSecurePolicy.SameAsRequest; // Ensures cookies are sent over HTTPS only
options.Cookie.SameSite = SameSiteMode.Strict; // Protects against CSRF attacks by restricting how cookies are sent with requests from external sites
options.LoginPath = "/api/auth/login";
options.LogoutPath = "/api/auth/logout";
});
builder.Services.AddDbContext<DDECMDbContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("DD_ECM_Connection"))
.EnableDetailedErrors());
@@ -61,15 +59,13 @@ try {
});
});
builder.Services.AddKeyTranslationService();
builder.Services.AddAutoMapper(typeof(UserMappingProfile).Assembly);
builder.Services.AddAutoMapper(typeof(GroupMappingProfile).Assembly);
builder.Services.AddAutoMapper(typeof(GroupOfUserMappingProfile).Assembly);
builder.Services.AddAutoMapper(typeof(ModuleMappingProfile).Assembly);
builder.Services.AddAutoMapper(typeof(ModuleOfUserMappingProfile).Assembly);
builder.Services.AddAutoMapper(typeof(UserRepMappingProfile).Assembly);
builder.Services.AddAutoMapper(typeof(DirectoryMappingProfile).Assembly);
//builder.Services.AddAutoMapper(typeof(DirectoryMappingProfile).Assembly);
builder.Services.AddScoped<IUserRepository, UserRepository>();
builder.Services.AddScoped<IGroupRepository, GroupRepository>();
@@ -86,7 +82,6 @@ try {
builder.Services.AddScoped<IUserRepService, UserRepService>();
builder.Services.AddDirectorySearchService();
builder.Services.AddResponseService();
var app = builder.Build();

View File

@@ -30,7 +30,7 @@
"targets": {
"logfile": {
"type": "File",
"fileName": "${basedir}/logs/${shortdate}.log"
"fileName": "E:/WebUserManager/logs/${shortdate}.log"
},
"logconsole": {
"type": "Console"

View File

@@ -1,13 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<targets>
<target xsi:type="File" name="dailyfile"
fileName="${basedir}/logs/${shortdate}.log"
layout="${longdate} ${uppercase:${level}} ${message}" />
</targets>
<rules>
<logger name="*" minlevel="Debug" writeTo="dailyfile" />
</rules>
</nlog>

View File

@@ -275,7 +275,6 @@ E:\TekH\Visual Studio\WebUserManager\DigitalData.UserManager.API\bin\Debug\net7.
E:\TekH\Visual Studio\WebUserManager\DigitalData.UserManager.API\bin\Debug\net7.0\DigitalData.Core.API.dll
E:\TekH\Visual Studio\WebUserManager\DigitalData.UserManager.API\bin\Debug\net7.0\DigitalData.Core.Application.dll
E:\TekH\Visual Studio\WebUserManager\DigitalData.UserManager.API\bin\Debug\net7.0\DigitalData.Core.Contracts.dll
E:\TekH\Visual Studio\WebUserManager\DigitalData.UserManager.API\bin\Debug\net7.0\DigitalData.Core.CultureServices.dll
E:\TekH\Visual Studio\WebUserManager\DigitalData.UserManager.API\bin\Debug\net7.0\DigitalData.Core.Infrastructure.dll
E:\TekH\Visual Studio\WebUserManager\DigitalData.UserManager.API\bin\Debug\net7.0\DigitalData.UserManager.Application.dll
E:\TekH\Visual Studio\WebUserManager\DigitalData.UserManager.API\bin\Debug\net7.0\DigitalData.UserManager.Domain.dll
@@ -286,7 +285,6 @@ E:\TekH\Visual Studio\WebUserManager\DigitalData.UserManager.API\bin\Debug\net7.
E:\TekH\Visual Studio\WebUserManager\DigitalData.UserManager.API\bin\Debug\net7.0\DigitalData.Core.API.pdb
E:\TekH\Visual Studio\WebUserManager\DigitalData.UserManager.API\bin\Debug\net7.0\DigitalData.Core.Application.pdb
E:\TekH\Visual Studio\WebUserManager\DigitalData.UserManager.API\bin\Debug\net7.0\DigitalData.Core.Contracts.pdb
E:\TekH\Visual Studio\WebUserManager\DigitalData.UserManager.API\bin\Debug\net7.0\DigitalData.Core.CultureServices.pdb
E:\TekH\Visual Studio\WebUserManager\DigitalData.UserManager.API\bin\Debug\net7.0\DigitalData.Core.Infrastructure.pdb
E:\TekH\Visual Studio\WebUserManager\DigitalData.UserManager.API\obj\Debug\net7.0\DigitalData.UserManager.API.csproj.AssemblyReference.cache
E:\TekH\Visual Studio\WebUserManager\DigitalData.UserManager.API\obj\Debug\net7.0\DigitalData.UserManager.API.GeneratedMSBuildEditorConfig.editorconfig
@@ -303,9 +301,12 @@ E:\TekH\Visual Studio\WebUserManager\DigitalData.UserManager.API\obj\Debug\net7.
E:\TekH\Visual Studio\WebUserManager\DigitalData.UserManager.API\obj\Debug\net7.0\staticwebassets.build.json
E:\TekH\Visual Studio\WebUserManager\DigitalData.UserManager.API\obj\Debug\net7.0\staticwebassets.development.json
E:\TekH\Visual Studio\WebUserManager\DigitalData.UserManager.API\obj\Debug\net7.0\scopedcss\bundle\DigitalData.UserManager.API.styles.css
E:\TekH\Visual Studio\WebUserManager\DigitalData.UserManager.API\obj\Debug\net7.0\DigitalData.UserManager.API.csproj.CopyComplete
E:\TekH\Visual Studio\WebUserManager\DigitalData.UserManager.API\obj\Debug\net7.0\DigitalData.UserManager.API.dll
E:\TekH\Visual Studio\WebUserManager\DigitalData.UserManager.API\obj\Debug\net7.0\refint\DigitalData.UserManager.API.dll
E:\TekH\Visual Studio\WebUserManager\DigitalData.UserManager.API\obj\Debug\net7.0\DigitalData.UserManager.API.pdb
E:\TekH\Visual Studio\WebUserManager\DigitalData.UserManager.API\obj\Debug\net7.0\DigitalData.UserManager.API.genruntimeconfig.cache
E:\TekH\Visual Studio\WebUserManager\DigitalData.UserManager.API\obj\Debug\net7.0\ref\DigitalData.UserManager.API.dll
E:\TekH\Visual Studio\WebUserManager\DigitalData.UserManager.API\bin\Debug\net7.0\Microsoft.Extensions.Localization.Abstractions.dll
E:\TekH\Visual Studio\WebUserManager\DigitalData.UserManager.API\bin\Debug\net7.0\DigitalData.Core.DTO.dll
E:\TekH\Visual Studio\WebUserManager\DigitalData.UserManager.API\bin\Debug\net7.0\DigitalData.Core.DTO.pdb
E:\TekH\Visual Studio\WebUserManager\DigitalData.UserManager.API\obj\Debug\net7.0\DigitalD.2ACBF1F0.Up2Date

View File

@@ -1 +1 @@
5243960bb1a8dfa8a26e6ced911ddcfcfbd49603
5db32c07a921a075542f8e4d13a06dff0a7877311019b550d9af1d527121948b

View File

@@ -1,6 +1,6 @@
{
"Version": 1,
"Hash": "CVuGk5G2Z4tefLO3i5UULN9tcqrmHVfR7Mp+pLcIhcg=",
"Hash": "fpX0gIRTqJ92FKdK8Mopb4TdlAI0zjfIY8Z63x82Wg4=",
"Source": "DigitalData.UserManager.API",
"BasePath": "_content/DigitalData.UserManager.API",
"Mode": "Default",
@@ -26,6 +26,8 @@
"AssetKind": "All",
"AssetMode": "All",
"AssetRole": "Primary",
"AssetMergeBehavior": "PreferTarget",
"AssetMergeSource": "",
"RelatedAsset": "",
"AssetTraitName": "",
"AssetTraitValue": "",
@@ -43,6 +45,8 @@
"AssetKind": "All",
"AssetMode": "All",
"AssetRole": "Primary",
"AssetMergeBehavior": "PreferTarget",
"AssetMergeSource": "",
"RelatedAsset": "",
"AssetTraitName": "",
"AssetTraitValue": "",
@@ -60,6 +64,8 @@
"AssetKind": "All",
"AssetMode": "All",
"AssetRole": "Primary",
"AssetMergeBehavior": "PreferTarget",
"AssetMergeSource": "",
"RelatedAsset": "",
"AssetTraitName": "",
"AssetTraitValue": "",
@@ -77,6 +83,8 @@
"AssetKind": "All",
"AssetMode": "All",
"AssetRole": "Primary",
"AssetMergeBehavior": "PreferTarget",
"AssetMergeSource": "",
"RelatedAsset": "",
"AssetTraitName": "",
"AssetTraitValue": "",
@@ -94,6 +102,8 @@
"AssetKind": "All",
"AssetMode": "All",
"AssetRole": "Primary",
"AssetMergeBehavior": "PreferTarget",
"AssetMergeSource": "",
"RelatedAsset": "",
"AssetTraitName": "",
"AssetTraitValue": "",
@@ -111,6 +121,8 @@
"AssetKind": "All",
"AssetMode": "All",
"AssetRole": "Primary",
"AssetMergeBehavior": "PreferTarget",
"AssetMergeSource": "",
"RelatedAsset": "",
"AssetTraitName": "",
"AssetTraitValue": "",
@@ -128,6 +140,8 @@
"AssetKind": "All",
"AssetMode": "All",
"AssetRole": "Primary",
"AssetMergeBehavior": "PreferTarget",
"AssetMergeSource": "",
"RelatedAsset": "",
"AssetTraitName": "",
"AssetTraitValue": "",
@@ -145,6 +159,8 @@
"AssetKind": "All",
"AssetMode": "All",
"AssetRole": "Primary",
"AssetMergeBehavior": "PreferTarget",
"AssetMergeSource": "",
"RelatedAsset": "",
"AssetTraitName": "",
"AssetTraitValue": "",
@@ -162,6 +178,8 @@
"AssetKind": "All",
"AssetMode": "All",
"AssetRole": "Primary",
"AssetMergeBehavior": "PreferTarget",
"AssetMergeSource": "",
"RelatedAsset": "",
"AssetTraitName": "",
"AssetTraitValue": "",
@@ -179,6 +197,8 @@
"AssetKind": "All",
"AssetMode": "All",
"AssetRole": "Primary",
"AssetMergeBehavior": "PreferTarget",
"AssetMergeSource": "",
"RelatedAsset": "",
"AssetTraitName": "",
"AssetTraitValue": "",
@@ -196,6 +216,8 @@
"AssetKind": "All",
"AssetMode": "All",
"AssetRole": "Primary",
"AssetMergeBehavior": "PreferTarget",
"AssetMergeSource": "",
"RelatedAsset": "",
"AssetTraitName": "",
"AssetTraitValue": "",
@@ -213,6 +235,8 @@
"AssetKind": "All",
"AssetMode": "All",
"AssetRole": "Primary",
"AssetMergeBehavior": "PreferTarget",
"AssetMergeSource": "",
"RelatedAsset": "",
"AssetTraitName": "",
"AssetTraitValue": "",
@@ -230,6 +254,8 @@
"AssetKind": "All",
"AssetMode": "All",
"AssetRole": "Primary",
"AssetMergeBehavior": "PreferTarget",
"AssetMergeSource": "",
"RelatedAsset": "",
"AssetTraitName": "",
"AssetTraitValue": "",
@@ -247,6 +273,8 @@
"AssetKind": "All",
"AssetMode": "All",
"AssetRole": "Primary",
"AssetMergeBehavior": "PreferTarget",
"AssetMergeSource": "",
"RelatedAsset": "",
"AssetTraitName": "",
"AssetTraitValue": "",
@@ -264,6 +292,8 @@
"AssetKind": "All",
"AssetMode": "All",
"AssetRole": "Primary",
"AssetMergeBehavior": "PreferTarget",
"AssetMergeSource": "",
"RelatedAsset": "",
"AssetTraitName": "",
"AssetTraitValue": "",
@@ -281,6 +311,8 @@
"AssetKind": "All",
"AssetMode": "All",
"AssetRole": "Primary",
"AssetMergeBehavior": "PreferTarget",
"AssetMergeSource": "",
"RelatedAsset": "",
"AssetTraitName": "",
"AssetTraitValue": "",
@@ -298,6 +330,8 @@
"AssetKind": "All",
"AssetMode": "All",
"AssetRole": "Primary",
"AssetMergeBehavior": "PreferTarget",
"AssetMergeSource": "",
"RelatedAsset": "",
"AssetTraitName": "",
"AssetTraitValue": "",

View File

@@ -6,7 +6,7 @@
<meta charset="utf-8"/>
<title>User Manager Portal</title>
<base href="/"/>
<user-manager-api href="https://172.24.12.39/api/" user-route="user" group-route="group" module-route="module" module-of-user-route="moduleOfUser" group-of-user-route="groupOfUser" user-representation-route="userRep" dir-group-route="directory/Group?propName=samaccountname" dir-user-route="directory/user" dir-route="directory" login-route="auth/login" ,="" logout-route="auth/logout" login-check-route="auth/check"/>
<user-manager-api href="/api/" user-route="user" group-route="group" module-route="module" module-of-user-route="moduleOfUser" group-of-user-route="groupOfUser" user-representation-route="userRep" dir-group-route="directory/Group?propName=samaccountname" dir-user-route="directory/user" dir-route="directory" login-route="auth/login" ,="" logout-route="auth/logout" login-check-route="auth/check"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<link rel="icon" type="image/x-icon" href="favicon.ico"/>