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(); - } - - 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; - - 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(); - - //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); - } - - 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) => - { - _logger.LogNotice(notices); - return this.ViewEnvelopeNotFound(); - }); - } - catch (Exception ex) - { - _logger.LogError(ex, "An unexpected error occurred while displaying a read-only envelope. Read-only key is {readOnlyKey}. {message}", readOnlyKey, ex.Message); + _logger.LogNotice(erro_res.Notices); return this.ViewInnerServiceError(); } + + var erro = erro_res.Data; + + 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(); + + //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-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) => + { + _logger.LogNotice(notices); + return this.ViewEnvelopeNotFound(); + }); } [HttpGet("Error404")]