From fc91a451f60bae5eaf23439953a1b4878b27d6cc Mon Sep 17 00:00:00 2001 From: Developer 02 Date: Mon, 17 Jun 2024 10:46:41 +0200 Subject: [PATCH] =?UTF-8?q?Erweiterungsmethoden=20hinzugef=C3=BCgt,=20um?= =?UTF-8?q?=20Benutzeranspr=C3=BCche=20in=20ControllerBase=20f=C3=BCr=20ID?= =?UTF-8?q?,=20Benutzernamen,=20Namen,=20Vornamen=20und=20E-Mail=20abzuruf?= =?UTF-8?q?en.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Contracts/IEnvelopeReceiverService.cs | 2 +- EnvelopeGenerator.Application/DIExtensions.cs | 57 +++++++++++++++++++ .../Services/EnvelopeReceiverService.cs | 2 +- .../EnvelopeGenerator.Domain.csproj | 3 - .../Controllers/AuthController.cs | 14 ++--- .../Controllers/ControllerExtensions.cs | 24 ++++++++ .../Controllers/EnvelopeController.cs | 17 ++++++ .../Controllers/EnvelopeReceiverController.cs | 28 ++++++++- EnvelopeGenerator.GeneratorAPI/Program.cs | 6 +- .../Contracts/IEnvelopeReceiverRepository.cs | 2 +- .../Repositories/EnvlopeReceiverRepository.cs | 3 +- EnvelopeGenerator.Web/Program.cs | 35 +----------- 12 files changed, 141 insertions(+), 52 deletions(-) create mode 100644 EnvelopeGenerator.Application/DIExtensions.cs create mode 100644 EnvelopeGenerator.GeneratorAPI/Controllers/ControllerExtensions.cs create mode 100644 EnvelopeGenerator.GeneratorAPI/Controllers/EnvelopeController.cs diff --git a/EnvelopeGenerator.Application/Contracts/IEnvelopeReceiverService.cs b/EnvelopeGenerator.Application/Contracts/IEnvelopeReceiverService.cs index d304d932..dfd5d5af 100644 --- a/EnvelopeGenerator.Application/Contracts/IEnvelopeReceiverService.cs +++ b/EnvelopeGenerator.Application/Contracts/IEnvelopeReceiverService.cs @@ -6,7 +6,7 @@ using EnvelopeGenerator.Infrastructure.Contracts; namespace EnvelopeGenerator.Application.Contracts { - public interface IEnvelopeReceiverService : IBasicCRUDService + public interface IEnvelopeReceiverService : IBasicCRUDService { Task>> ReadByUuidAsync(string uuid, bool withEnvelope = true, bool withReceiver = false); diff --git a/EnvelopeGenerator.Application/DIExtensions.cs b/EnvelopeGenerator.Application/DIExtensions.cs new file mode 100644 index 00000000..33e7f569 --- /dev/null +++ b/EnvelopeGenerator.Application/DIExtensions.cs @@ -0,0 +1,57 @@ +using DigitalData.UserManager.Application.MappingProfiles; +using EnvelopeGenerator.Application.Contracts; +using EnvelopeGenerator.Application.MappingProfiles; +using EnvelopeGenerator.Application.Services; +using EnvelopeGenerator.Infrastructure.Contracts; +using EnvelopeGenerator.Infrastructure.Repositories; +using Microsoft.Extensions.DependencyInjection; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace EnvelopeGenerator.Application +{ + public static class DIExtensions + { + public static IServiceCollection AddEnvelopeGenerator(this IServiceCollection services) + { + //Inject CRUD Service and repositoriesad + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + + //Auto mapping profiles + services.AddAutoMapper(typeof(BasicDtoMappingProfile).Assembly); + services.AddAutoMapper(typeof(UserMappingProfile).Assembly); + + return services; + } + } +} diff --git a/EnvelopeGenerator.Application/Services/EnvelopeReceiverService.cs b/EnvelopeGenerator.Application/Services/EnvelopeReceiverService.cs index 337adc86..1086def5 100644 --- a/EnvelopeGenerator.Application/Services/EnvelopeReceiverService.cs +++ b/EnvelopeGenerator.Application/Services/EnvelopeReceiverService.cs @@ -11,7 +11,7 @@ using Microsoft.Extensions.Logging; namespace EnvelopeGenerator.Application.Services { - public class EnvelopeReceiverService : BasicCRUDService, IEnvelopeReceiverService + public class EnvelopeReceiverService : BasicCRUDService, IEnvelopeReceiverService { private readonly IStringLocalizer _localizer; diff --git a/EnvelopeGenerator.Domain/EnvelopeGenerator.Domain.csproj b/EnvelopeGenerator.Domain/EnvelopeGenerator.Domain.csproj index f0aa084a..5f342ff9 100644 --- a/EnvelopeGenerator.Domain/EnvelopeGenerator.Domain.csproj +++ b/EnvelopeGenerator.Domain/EnvelopeGenerator.Domain.csproj @@ -11,9 +11,6 @@ - - ..\..\WebCoreModules\DigitalData.Core.Domain\bin\Debug\net7.0\DigitalData.Core.Domain.dll - ..\..\WebUserManager\DigitalData.UserManager.Domain\bin\Debug\net7.0\DigitalData.UserManager.Domain.dll diff --git a/EnvelopeGenerator.GeneratorAPI/Controllers/AuthController.cs b/EnvelopeGenerator.GeneratorAPI/Controllers/AuthController.cs index e5fe5722..66991879 100644 --- a/EnvelopeGenerator.GeneratorAPI/Controllers/AuthController.cs +++ b/EnvelopeGenerator.GeneratorAPI/Controllers/AuthController.cs @@ -52,13 +52,13 @@ namespace EnvelopeGenerator.GeneratorAPI.Controllers // Create claims var claims = new List - { - new (ClaimTypes.NameIdentifier, user.Guid.ToString()), - new (ClaimTypes.Name, user.Username), - new (ClaimTypes.Surname, user.Name!), - new (ClaimTypes.GivenName, user.Prename!), - new (ClaimTypes.Email, user.Email!), - }; + { + new (ClaimTypes.NameIdentifier, user.Id.ToString()), + new (ClaimTypes.Name, user.Username), + new (ClaimTypes.Surname, user.Name!), + new (ClaimTypes.GivenName, user.Prename!), + new (ClaimTypes.Email, user.Email!), + }; // Create claimsIdentity var claimsIdentity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme); diff --git a/EnvelopeGenerator.GeneratorAPI/Controllers/ControllerExtensions.cs b/EnvelopeGenerator.GeneratorAPI/Controllers/ControllerExtensions.cs new file mode 100644 index 00000000..a897824b --- /dev/null +++ b/EnvelopeGenerator.GeneratorAPI/Controllers/ControllerExtensions.cs @@ -0,0 +1,24 @@ +using Microsoft.AspNetCore.Mvc; +using System.Security.Claims; + +namespace EnvelopeGenerator.GeneratorAPI.Controllers +{ + public static class ControllerExtensions + { + public static int? GetId(this ControllerBase controller) + => int.TryParse(controller.User.FindFirst(ClaimTypes.NameIdentifier)?.Value, out int result) + ? result : null; + + public static string? GetUsername(this ControllerBase controller) + => controller.User.FindFirst(ClaimTypes.Name)?.Value; + + public static string? GetName(this ControllerBase controller) + => controller.User.FindFirst(ClaimTypes.Surname)?.Value; + + public static string? GetPrename(this ControllerBase controller) + => controller.User.FindFirst(ClaimTypes.GivenName)?.Value; + + public static string? GetEmail(this ControllerBase controller) + => controller.User.FindFirst(ClaimTypes.Email)?.Value; + } +} \ No newline at end of file diff --git a/EnvelopeGenerator.GeneratorAPI/Controllers/EnvelopeController.cs b/EnvelopeGenerator.GeneratorAPI/Controllers/EnvelopeController.cs new file mode 100644 index 00000000..c4b61791 --- /dev/null +++ b/EnvelopeGenerator.GeneratorAPI/Controllers/EnvelopeController.cs @@ -0,0 +1,17 @@ +using DigitalData.Core.API; +using EnvelopeGenerator.Application.Contracts; +using EnvelopeGenerator.Application.DTOs; +using EnvelopeGenerator.Domain.Entities; +using Microsoft.AspNetCore.Mvc; + +namespace EnvelopeGenerator.GeneratorAPI.Controllers +{ + [Route("api/[controller]")] + [ApiController] + public class EnvelopeController : BasicCRUDControllerBase + { + public EnvelopeController(ILogger logger, IEnvelopeService service) : base(logger, service) + { + } + } +} \ No newline at end of file diff --git a/EnvelopeGenerator.GeneratorAPI/Controllers/EnvelopeReceiverController.cs b/EnvelopeGenerator.GeneratorAPI/Controllers/EnvelopeReceiverController.cs index 0d6b8df5..e6bd87b2 100644 --- a/EnvelopeGenerator.GeneratorAPI/Controllers/EnvelopeReceiverController.cs +++ b/EnvelopeGenerator.GeneratorAPI/Controllers/EnvelopeReceiverController.cs @@ -1,11 +1,33 @@ -using Microsoft.AspNetCore.Http; +using DigitalData.Core.API; +using EnvelopeGenerator.Application.Contracts; +using EnvelopeGenerator.Application.DTOs; +using EnvelopeGenerator.Domain.Entities; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; namespace EnvelopeGenerator.GeneratorAPI.Controllers { [Route("api/[controller]")] [ApiController] - public class EnvelopeReceiverController : ControllerBase - { + public class EnvelopeReceiverController : BasicCRUDControllerBase + { + public EnvelopeReceiverController(ILogger logger, IEnvelopeReceiverService service) : base(logger, service) + { + } + + [Authorize] + [HttpGet("claims")] + public IActionResult GetClaims() + { + + var claims = new { + User.Identity?.IsAuthenticated, + Id = this.GetId(), + Email = this.GetEmail() + }; + + return Ok(claims); + } } } \ No newline at end of file diff --git a/EnvelopeGenerator.GeneratorAPI/Program.cs b/EnvelopeGenerator.GeneratorAPI/Program.cs index c93be208..315077e9 100644 --- a/EnvelopeGenerator.GeneratorAPI/Program.cs +++ b/EnvelopeGenerator.GeneratorAPI/Program.cs @@ -2,6 +2,7 @@ using DigitalData.Core.API; using DigitalData.Core.Application; using DigitalData.UserManager.Application; using DigitalData.UserManager.Infrastructure.Repositories; +using EnvelopeGenerator.Application; using Microsoft.AspNetCore.Authentication.Cookies; using Microsoft.EntityFrameworkCore; @@ -55,6 +56,9 @@ builder.Services.AddDirectorySearchService(); // Localizer builder.Services.AddCookieBasedLocalizer() ; +// Envelope generator serives +builder.Services.AddEnvelopeGenerator(); + var app = builder.Build(); // Configure the HTTP request pipeline. @@ -75,8 +79,8 @@ app.UseHttpsRedirection(); app.UseDefaultFiles(); app.UseStaticFiles(); -app.UseAuthorization(); app.UseAuthentication(); +app.UseAuthorization(); app.MapControllers(); diff --git a/EnvelopeGenerator.Infrastructure/Contracts/IEnvelopeReceiverRepository.cs b/EnvelopeGenerator.Infrastructure/Contracts/IEnvelopeReceiverRepository.cs index 995468cf..019cf56c 100644 --- a/EnvelopeGenerator.Infrastructure/Contracts/IEnvelopeReceiverRepository.cs +++ b/EnvelopeGenerator.Infrastructure/Contracts/IEnvelopeReceiverRepository.cs @@ -3,7 +3,7 @@ using EnvelopeGenerator.Domain.Entities; namespace EnvelopeGenerator.Infrastructure.Contracts { - public interface IEnvelopeReceiverRepository : ICRUDRepository + public interface IEnvelopeReceiverRepository : ICRUDRepository { Task> ReadByUuidAsync(string uuid, bool withEnvelope = true, bool withReceiver = false); diff --git a/EnvelopeGenerator.Infrastructure/Repositories/EnvlopeReceiverRepository.cs b/EnvelopeGenerator.Infrastructure/Repositories/EnvlopeReceiverRepository.cs index 30abf0da..823c4ea2 100644 --- a/EnvelopeGenerator.Infrastructure/Repositories/EnvlopeReceiverRepository.cs +++ b/EnvelopeGenerator.Infrastructure/Repositories/EnvlopeReceiverRepository.cs @@ -3,11 +3,10 @@ using DigitalData.UserManager.Infrastructure.Repositories; using EnvelopeGenerator.Domain.Entities; using EnvelopeGenerator.Infrastructure.Contracts; using Microsoft.EntityFrameworkCore; -using System; namespace EnvelopeGenerator.Infrastructure.Repositories { - public class EnvelopeReceiverRepository : CRUDRepository, IEnvelopeReceiverRepository + public class EnvelopeReceiverRepository : CRUDRepository, IEnvelopeReceiverRepository { public EnvelopeReceiverRepository(EGDbContext dbContext) : base(dbContext) { diff --git a/EnvelopeGenerator.Web/Program.cs b/EnvelopeGenerator.Web/Program.cs index dd5cef89..cfcf6251 100644 --- a/EnvelopeGenerator.Web/Program.cs +++ b/EnvelopeGenerator.Web/Program.cs @@ -76,39 +76,8 @@ try var connStr = config.GetConnectionString(Key.Default) ?? throw new InvalidOperationException("There is no default connection string in appsettings.json."); builder.Services.AddDbContext(options => options.UseSqlServer(connStr)); - //Inject CRUD Service and repositoriesad - builder.Services.AddScoped(); - builder.Services.AddScoped(); - builder.Services.AddScoped(); - builder.Services.AddScoped(); - builder.Services.AddScoped(); - builder.Services.AddScoped(); - builder.Services.AddScoped(); - builder.Services.AddScoped(); - builder.Services.AddScoped(); - builder.Services.AddScoped(); - builder.Services.AddScoped(); - builder.Services.AddScoped(); - builder.Services.AddScoped(); - builder.Services.AddScoped(); - builder.Services.AddScoped(); - builder.Services.AddScoped(); - builder.Services.AddScoped(); - builder.Services.AddScoped(); - builder.Services.AddScoped(); - builder.Services.AddScoped(); - builder.Services.AddScoped(); - builder.Services.AddScoped(); - builder.Services.AddScoped(); - builder.Services.AddScoped(); - builder.Services.AddScoped(); - builder.Services.AddScoped(); - builder.Services.AddScoped(); - builder.Services.AddScoped(); - - //Auto mapping profiles - builder.Services.AddAutoMapper(typeof(BasicDtoMappingProfile).Assembly); - builder.Services.AddAutoMapper(typeof(UserMappingProfile).Assembly); + // Add envelope generator services + builder.Services.AddEnvelopeGenerator(); builder.Services.Configure(options => {