From d0bfe795d7c208ea9c06892914767ec4a93342bf Mon Sep 17 00:00:00 2001 From: TekH Date: Wed, 17 Sep 2025 13:59:31 +0200 Subject: [PATCH] =?UTF-8?q?refactor(HomeController):=20=C3=84ndern=20Sie?= =?UTF-8?q?=20den=20Routenparameter=20=E2=80=9EEnvelopeReceiverReadOnly?= =?UTF-8?q?=E2=80=9D=20von=20einem=20String-Schl=C3=BCssel=20zu=20einer=20?= =?UTF-8?q?langen=20ID?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Aktualisieren Sie „MainAsync”, um mit einer geparsten schreibgeschützten ID anstelle eines String-Schlüssels zu „EnvelopeReceiverReadOnly” umzuleiten - Ändern Sie die Aktionssignatur „EnvelopeReceiverReadOnly”, um „long readOnlyId” anstelle von „[FromRoute] string readOnlyKey” zu akzeptieren - Inline-Schlüssel-Decodierungs-/Validierungslogik entfernt und Decodierung an `MainAsync` delegiert - Protokollmeldungen angepasst, um `ReadOnly-Id` anstelle von `ReadOnly-key` widerzuspiegeln --- .../Controllers/HomeController.cs | 100 ++++++++---------- 1 file changed, 42 insertions(+), 58 deletions(-) diff --git a/EnvelopeGenerator.Web/Controllers/HomeController.cs b/EnvelopeGenerator.Web/Controllers/HomeController.cs index 5472dbdd..d1b1145c 100644 --- a/EnvelopeGenerator.Web/Controllers/HomeController.cs +++ b/EnvelopeGenerator.Web/Controllers/HomeController.cs @@ -76,7 +76,7 @@ public class HomeController : ViewControllerBase } if(decoded.GetEncodeType() == EncodeType.EnvelopeReceiverReadOnly) - return Redirect($"{envelopeReceiverId}/ReadOnly"); + return await EnvelopeReceiverReadOnly(decoded.ParseReadOnlyId()); ViewData["EnvelopeKey"] = envelopeReceiverId; @@ -369,75 +369,59 @@ public class HomeController : ViewControllerBase _logger.LogEnvelopeError(envelopeReceiverId: envelopeReceiverId, exception: ex); return this.ViewInnerServiceError(); } - } + } - [HttpGet("{readOnlyKey}/ReadOnly")] + [NonAction] [Obsolete("Use MediatR")] - public async Task EnvelopeReceiverReadOnly([FromRoute] string readOnlyKey) + public async Task EnvelopeReceiverReadOnly([FromRoute] long readOnlyId) { - try + var erro_res = await _readOnlyService.ReadByIdAsync(readOnlyId); + if (erro_res.IsFailed) { - // check if the readOnlyId is valid - if (!readOnlyKey.TryDecode(out var decodedKeys) || decodedKeys.GetEncodeType() != EncodeType.EnvelopeReceiverReadOnly) - { - Response.StatusCode = StatusCodes.Status401Unauthorized; - return this.ViewDocumentNotFound(); - } + _logger.LogNotice(erro_res.Notices); + return this.ViewInnerServiceError(); + } - var readOnlyId = decodedKeys.ParseReadOnlyId(); - var erro_res = await _readOnlyService.ReadByIdAsync(readOnlyId); - if (erro_res.IsFailed) - { - _logger.LogNotice(erro_res.Notices); - return this.ViewInnerServiceError(); - } + var erro = erro_res.Data; - var erro = erro_res.Data; + if (DateTime.Now > erro.DateValid) + return View("EnvelopeExpired"); - if (DateTime.Now > erro.DateValid) - return View("EnvelopeExpired"); + return await _envRcvService.ReadByUuidSignatureAsync(uuid: erro.Envelope!.Uuid, erro.Receiver!.Signature).ThenAsync( + SuccessAsync: async er => + { + var envelopeKey = (er.Envelope!.Uuid, er.Receiver!.Signature).ToEnvelopeKey(); - return await _envRcvService.ReadByUuidSignatureAsync(uuid: erro.Envelope!.Uuid, erro.Receiver!.Signature).ThenAsync( - SuccessAsync: async er => + //TODO: implement multi-threading to history process (Task) + var hist_res = await _historyService.RecordAsync((int)erro.EnvelopeId, erro.AddedWho, EnvelopeStatus.EnvelopeViewed); + if (hist_res.IsFailed) { - var envelopeKey = (er.Envelope!.Uuid, er.Receiver!.Signature).ToEnvelopeKey(); - - //TODO: implement multi-threading to history process (Task) - var hist_res = await _historyService.RecordAsync((int)erro.EnvelopeId, erro.AddedWho, EnvelopeStatus.EnvelopeViewed); - if (hist_res.IsFailed) - { - _logger.LogError( - "Although the envelope was sent as read-only, the EnvelopeShared hisotry could not be saved. ReadOnly-key: {readOnlyKey}\nEnvelope Receiver:\n{envelopeReceiver}", - readOnlyKey, JsonConvert.SerializeObject(er)); - _logger.LogNotice(hist_res.Notices); - } + _logger.LogError( + "Although the envelope was sent as read-only, the EnvelopeShared hisotry could not be saved. ReadOnly-Id: {readOnlyKey}\nEnvelope Receiver:\n{envelopeReceiver}", + readOnlyId, JsonConvert.SerializeObject(er)); + _logger.LogNotice(hist_res.Notices); + } - if (er.Envelope.Documents?.FirstOrDefault() is DocumentDto doc && doc.ByteData is not null) - { - ViewData["DocumentBytes"] = doc.ByteData; - ViewData["EnvelopeKey"] = envelopeKey; - ViewData["IsReadOnly"] = true; - ViewData["ReadOnly"] = erro; - ViewData["PSPDFKitLicenseKey"] = _configuration["PSPDFKitLicenseKey"]; - return View("ShowEnvelope", er); - } - else - { - _logger.LogEnvelopeError(envelopeReceiverId: envelopeKey, message: "No document byte-data was found in ENVELOPE_DOCUMENT table."); - return this.ViewDocumentNotFound(); - } - }, - Fail: (messages, notices) => + if (er.Envelope.Documents?.FirstOrDefault() is DocumentDto doc && doc.ByteData is not null) { - _logger.LogNotice(notices); - return this.ViewEnvelopeNotFound(); - }); - } - catch (Exception ex) + ViewData["DocumentBytes"] = doc.ByteData; + ViewData["EnvelopeKey"] = envelopeKey; + ViewData["IsReadOnly"] = true; + ViewData["ReadOnly"] = erro; + ViewData["PSPDFKitLicenseKey"] = _configuration["PSPDFKitLicenseKey"]; + return View("ShowEnvelope", er); + } + else + { + _logger.LogEnvelopeError(envelopeReceiverId: envelopeKey, message: "No document byte-data was found in ENVELOPE_DOCUMENT table."); + return this.ViewDocumentNotFound(); + } + }, + Fail: (messages, notices) => { - _logger.LogError(ex, "An unexpected error occurred while displaying a read-only envelope. Read-only key is {readOnlyKey}. {message}", readOnlyKey, ex.Message); - return this.ViewInnerServiceError(); - } + _logger.LogNotice(notices); + return this.ViewEnvelopeNotFound(); + }); } [HttpGet("Error404")]