From 2512de0f26e9bf9d9eedfb1d037772ad17a38ba4 Mon Sep 17 00:00:00 2001 From: Developer 02 Date: Mon, 8 Apr 2024 16:22:17 +0200 Subject: [PATCH] =?UTF-8?q?Signaturpr=C3=BCfung=20zur=20Filterung=20der=20?= =?UTF-8?q?Umschlagempf=C3=A4nger=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Contracts/IEnvelopeService.cs | 2 +- .../DTOs/EnvelopeReceiverDto.cs | 8 +++++-- .../Services/EnvelopeService.cs | 4 ++-- .../Contracts/IEnvelopeRepository.cs | 2 +- .../Repositories/EnvelopeRepository.cs | 7 ++++-- .../Controllers/EnvelopeController.cs | 2 +- .../Controllers/HomeController.cs | 22 +++++++++---------- .../Controllers/TestEnvelopeController.cs | 10 ++++++--- EnvelopeGenerator.Web/wwwroot/js/network.js | 6 ++++- 9 files changed, 38 insertions(+), 25 deletions(-) diff --git a/EnvelopeGenerator.Application/Contracts/IEnvelopeService.cs b/EnvelopeGenerator.Application/Contracts/IEnvelopeService.cs index fe3881c0..61008265 100644 --- a/EnvelopeGenerator.Application/Contracts/IEnvelopeService.cs +++ b/EnvelopeGenerator.Application/Contracts/IEnvelopeService.cs @@ -9,6 +9,6 @@ namespace EnvelopeGenerator.Application.Contracts { Task>> ReadAllWithAsync(bool documents = false, bool receivers = false, bool history = false, bool documentReceiverElement = false); - Task> ReadByUuidAsync(string uuid, bool withDocuments = false, bool withReceivers = false, bool withHistory = false, bool withDocumentReceiverElement = false); + Task> ReadByUuidAsync(string uuid, string? signature = null, bool withDocuments = false, bool withReceivers = false, bool withHistory = false, bool withDocumentReceiverElement = false); } } \ No newline at end of file diff --git a/EnvelopeGenerator.Application/DTOs/EnvelopeReceiverDto.cs b/EnvelopeGenerator.Application/DTOs/EnvelopeReceiverDto.cs index 3885af9f..02404c47 100644 --- a/EnvelopeGenerator.Application/DTOs/EnvelopeReceiverDto.cs +++ b/EnvelopeGenerator.Application/DTOs/EnvelopeReceiverDto.cs @@ -1,4 +1,6 @@ -namespace EnvelopeGenerator.Application.DTOs +using EnvelopeGenerator.Domain.Entities; + +namespace EnvelopeGenerator.Application.DTOs { public record EnvelopeReceiverDto( int EnvelopeId, @@ -9,5 +11,7 @@ string CompanyName, string PrivateMessage, DateTime AddedWhen, - DateTime? ChangedWhen); + DateTime? ChangedWhen, + Envelope? Envelope, + Receiver? Receiver); } \ No newline at end of file diff --git a/EnvelopeGenerator.Application/Services/EnvelopeService.cs b/EnvelopeGenerator.Application/Services/EnvelopeService.cs index 087ac640..4974cb9b 100644 --- a/EnvelopeGenerator.Application/Services/EnvelopeService.cs +++ b/EnvelopeGenerator.Application/Services/EnvelopeService.cs @@ -23,9 +23,9 @@ namespace EnvelopeGenerator.Application.Services return Successful(readDto); } - public async Task> ReadByUuidAsync(string uuid, bool withDocuments = false, bool withReceivers = false, bool withHistory = false, bool withDocumentReceiverElement = false) + public async Task> ReadByUuidAsync(string uuid, string? signature = null, bool withDocuments = false, bool withReceivers = false, bool withHistory = false, bool withDocumentReceiverElement = false) { - var envelope = await _repository.ReadByUuidAsync(uuid: uuid, withDocuments: withDocuments, withReceivers: withReceivers, withHistory: withHistory, withDocumentReceiverElement: withDocumentReceiverElement); + var envelope = await _repository.ReadByUuidAsync(uuid: uuid, signature: signature, withDocuments: withDocuments, withReceivers: withReceivers, withHistory: withHistory, withDocumentReceiverElement: withDocumentReceiverElement); if (envelope is null) return Failed(); diff --git a/EnvelopeGenerator.Infrastructure/Contracts/IEnvelopeRepository.cs b/EnvelopeGenerator.Infrastructure/Contracts/IEnvelopeRepository.cs index 29f390a9..6a595b97 100644 --- a/EnvelopeGenerator.Infrastructure/Contracts/IEnvelopeRepository.cs +++ b/EnvelopeGenerator.Infrastructure/Contracts/IEnvelopeRepository.cs @@ -7,6 +7,6 @@ namespace EnvelopeGenerator.Infrastructure.Contracts { Task> ReadAllWithAsync(bool documents = false, bool receivers = false, bool history = false, bool documentReceiverElement = true); - Task ReadByUuidAsync(string uuid, bool withDocuments = false, bool withReceivers = false, bool withHistory = false, bool withDocumentReceiverElement = false); + Task ReadByUuidAsync(string uuid, string? signature = null, bool withDocuments = false, bool withReceivers = false, bool withHistory = false, bool withDocumentReceiverElement = false); } } \ No newline at end of file diff --git a/EnvelopeGenerator.Infrastructure/Repositories/EnvelopeRepository.cs b/EnvelopeGenerator.Infrastructure/Repositories/EnvelopeRepository.cs index d418c5a3..56cd6c53 100644 --- a/EnvelopeGenerator.Infrastructure/Repositories/EnvelopeRepository.cs +++ b/EnvelopeGenerator.Infrastructure/Repositories/EnvelopeRepository.cs @@ -31,10 +31,13 @@ namespace EnvelopeGenerator.Infrastructure.Repositories return await query.ToListAsync(); } - public async Task ReadByUuidAsync(string uuid, bool withDocuments = false, bool withReceivers = false, bool withHistory = false, bool withDocumentReceiverElement = false) + public async Task ReadByUuidAsync(string uuid, string? signature = null, bool withDocuments = false, bool withReceivers = false, bool withHistory = false, bool withDocumentReceiverElement = false) { var query = _dbSet.Where(e => e.Uuid == uuid); + if (signature is not null) + query = query.Where(e => e.Receivers != null && e.Receivers.Any(er => er.Receiver != null && er.Receiver.Signature == signature)); + if (withDocuments) if (withDocumentReceiverElement) query = query.Include(e => e.Documents!).ThenInclude(d => d.Elements); @@ -42,7 +45,7 @@ namespace EnvelopeGenerator.Infrastructure.Repositories query = query.Include(e => e.Documents); if (withReceivers) - query = query.Include(e => e.Receivers); + query = query.Include(e => e.Receivers!).ThenInclude(er => er.Receiver); if (withHistory) query = query.Include(e => e.History); diff --git a/EnvelopeGenerator.Web/Controllers/EnvelopeController.cs b/EnvelopeGenerator.Web/Controllers/EnvelopeController.cs index 8491acc0..33cb11f4 100644 --- a/EnvelopeGenerator.Web/Controllers/EnvelopeController.cs +++ b/EnvelopeGenerator.Web/Controllers/EnvelopeController.cs @@ -20,7 +20,7 @@ namespace EnvelopeGenerator.Web.Controllers } [HttpGet("api/envelope/{envelopeKey}")] - public async Task Get([FromRoute] string envelopeKey, [FromBody] string accessCode) + public async Task Get([FromRoute] string envelopeKey) { try { diff --git a/EnvelopeGenerator.Web/Controllers/HomeController.cs b/EnvelopeGenerator.Web/Controllers/HomeController.cs index fdced414..7378374c 100644 --- a/EnvelopeGenerator.Web/Controllers/HomeController.cs +++ b/EnvelopeGenerator.Web/Controllers/HomeController.cs @@ -15,11 +15,13 @@ namespace EnvelopeGenerator.Web.Controllers private readonly EnvelopeOldService envelopeOldService; private readonly IConfiguration _config; private readonly IEnvelopeReceiverService _envRcvService; + private readonly IEnvelopeService _envelopeService; - public HomeController(DatabaseService databaseService, EnvelopeOldService envelopeOldService, ILogger logger, IConfiguration configuration, IEnvelopeReceiverService envelopeReceiverService) : base(databaseService, logger) + public HomeController(DatabaseService databaseService, EnvelopeOldService envelopeOldService, ILogger logger, IConfiguration configuration, IEnvelopeReceiverService envelopeReceiverService, IEnvelopeService envelopeService) : base(databaseService, logger) { this.envelopeOldService = envelopeOldService; _envRcvService = envelopeReceiverService; + _envelopeService = envelopeService; _config = configuration; } @@ -69,24 +71,20 @@ namespace EnvelopeGenerator.Web.Controllers public IActionResult ShowEnvelope([FromRoute] string envelopeReceiverId) => Redirect($"/EnvelopeKey/{envelopeReceiverId}/Locked"); [HttpPost("/EnvelopeKey/{envelopeReceiverId}/Locked")] - public async Task ShowEnvelopePost([FromRoute] string envelopeReceiverId, [FromForm] string access_code) + public async Task ShowEnvelope([FromRoute] string envelopeReceiverId, [FromForm] string access_code) { - var uuid = envelopeReceiverId.DecodeEnvelopeReceiverId().EnvelopeUuid; - var verification = await _envRcvService.VerifyAccessCode(uuid, access_code); + var decodedId = envelopeReceiverId.DecodeEnvelopeReceiverId(); + var verification = await _envRcvService.VerifyAccessCode(decodedId.EnvelopeUuid, access_code); EnvelopeResponse response = await envelopeOldService.LoadEnvelope(envelopeReceiverId); - string accessCode = response.Receiver.AccessCode; - if (string.IsNullOrEmpty(access_code)) - { - return Redirect($"/EnvelopeKey/{envelopeReceiverId}/Locked"); - } - - if (accessCode == access_code) + if (verification.IsSuccess) { + var envelope = await _envelopeService.ReadByUuidAsync(decodedId.EnvelopeUuid, decodedId.ReceiverSignature, true, true, true); database.Services.actionService.EnterCorrectAccessCode(response.Envelope, response.Receiver); //for history ViewData["EnvelopeKey"] = envelopeReceiverId; - return View("ShowEnvelope"); + ViewData["EnveResponse"] = response; + return View("ShowEnvelope", envelope); } else { diff --git a/EnvelopeGenerator.Web/Controllers/TestEnvelopeController.cs b/EnvelopeGenerator.Web/Controllers/TestEnvelopeController.cs index a2833b71..0779961a 100644 --- a/EnvelopeGenerator.Web/Controllers/TestEnvelopeController.cs +++ b/EnvelopeGenerator.Web/Controllers/TestEnvelopeController.cs @@ -1,6 +1,7 @@ using DigitalData.Core.API; using EnvelopeGenerator.Application.Contracts; using EnvelopeGenerator.Application.DTOs; +using EnvelopeGenerator.Application.Services; using EnvelopeGenerator.Domain.Entities; using EnvelopeGenerator.Infrastructure.Contracts; using Microsoft.AspNetCore.Mvc; @@ -24,9 +25,12 @@ namespace EnvelopeGenerator.Web.Controllers { if(envelopeKey is not null) { - Tuple decode = Common.Helpers.DecodeEnvelopeReceiverId(envelopeKey); - var envelopeUuid = decode.Item1; - var envlopeServiceResult = await _service.ReadByUuidAsync(envelopeUuid, withDocuments: true, withReceivers: true, withHistory: true); + var decoded = envelopeKey.DecodeEnvelopeReceiverId(); + + var envlopeServiceResult = await _service.ReadByUuidAsync( + uuid: decoded.EnvelopeUuid, + signature: decoded.ReceiverSignature, + withDocuments: withDocuments, withReceivers: withReceivers, withHistory: withHistory); if (envlopeServiceResult.IsSuccess) { diff --git a/EnvelopeGenerator.Web/wwwroot/js/network.js b/EnvelopeGenerator.Web/wwwroot/js/network.js index 471c3eb5..e1b4459d 100644 --- a/EnvelopeGenerator.Web/wwwroot/js/network.js +++ b/EnvelopeGenerator.Web/wwwroot/js/network.js @@ -74,7 +74,7 @@ * Creates a GET HTTP request to `url` * @param {any} url */ - getRequest(url) { + getRequest(url, body) { const token = this.getCSRFToken() const options = { credentials: 'include', @@ -84,6 +84,10 @@ } } + if (body !== undefined) { + options.body = JSON.stringify(body); + } + return fetch(url, options) }