Benutzerdefinierte Fehlerseiten für die Statuscodes 404 und 500 im HomeController hinzugefügt, um verschiedene Benutzerfälle zu behandeln.

This commit is contained in:
Developer 02
2024-04-26 12:22:09 +02:00
parent 966b7de3c4
commit 6b3c90c618
13 changed files with 137 additions and 51 deletions

View File

@@ -1,7 +1,6 @@
using EnvelopeGenerator.Application.Contracts;
using EnvelopeGenerator.Application.Services;
using EnvelopeGenerator.Common;
using EnvelopeGenerator.Web.Models;
using EnvelopeGenerator.Web.Services;
using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Authentication;
@@ -10,6 +9,10 @@ using System.Security.Claims;
using Microsoft.AspNetCore.Authorization;
using DigitalData.Core.API;
using DigitalData.Core.Application;
using EnvelopeGenerator.Application;
using DigitalData.Core.Contracts.CultureServices;
using DigitalData.Core.CultureServices;
using Azure;
namespace EnvelopeGenerator.Web.Controllers
{
@@ -19,12 +22,15 @@ namespace EnvelopeGenerator.Web.Controllers
private readonly IEnvelopeReceiverService _envRcvService;
private readonly IEnvelopeService _envelopeService;
private readonly IEnvelopeHistoryService _historyService;
public HomeController(DatabaseService databaseService, EnvelopeOldService envelopeOldService, ILogger<HomeController> logger, IEnvelopeReceiverService envelopeReceiverService, IEnvelopeService envelopeService, IEnvelopeHistoryService historyService) : base(databaseService, logger)
private readonly IKeyTranslationService _translator;
public HomeController(DatabaseService databaseService, EnvelopeOldService envelopeOldService, ILogger<HomeController> logger, IEnvelopeReceiverService envelopeReceiverService, IEnvelopeService envelopeService, IEnvelopeHistoryService historyService, IKeyTranslationService keyTranslationService) : base(databaseService, logger)
{
this.envelopeOldService = envelopeOldService;
_envRcvService = envelopeReceiverService;
_envelopeService = envelopeService;
_historyService = historyService;
_translator = keyTranslationService;
}
[HttpGet("/EnvelopeKey/{envelopeReceiverId}")]
@@ -33,15 +39,18 @@ namespace EnvelopeGenerator.Web.Controllers
ViewData["EnvelopeKey"] = envelopeReceiverId;
try
{
(string envelopeUuid, string receiverSignature) = envelopeReceiverId.DecodeEnvelopeReceiverId();
var envelopeResult = await _envelopeService.ReadByUuidAsync(envelopeUuid, signature: receiverSignature, withEnvelopeReceivers:true);
var envelope = envelopeResult.Data;
var envelopeReceiver = envelope?.EnvelopeReceivers?.FirstOrDefault();
var mailAddress = envelopeReceiver?.Receiver?.EmailAddress;
var useAccessCode = envelope?.UseAccessCode;
var erResult = await _envRcvService.ReadByEnvelopeReceiverIdAsync(envelopeReceiverId: envelopeReceiverId);
var er = erResult.Data;
var receiver = er?.Receiver;
var envelope = er?.Envelope;
var mailAddress = receiver?.EmailAddress;
ViewData["EnvelopeResult"] = envelopeResult;
if(envelopeResult.IsSuccess && envelope is not null && mailAddress is not null && (envelope.UseAccessCode ?? false))
if (erResult is null)
{
_logger.LogError(MessageKey.ServiceOutputNullError.TranslateWith(_translator));
return this.ViewEnvelopeNotFound();
}
else if (erResult.IsSuccess && mailAddress is not null && (envelope?.UseAccessCode ?? false))
{
EnvelopeResponse response = await envelopeOldService.LoadEnvelope(envelopeReceiverId);
@@ -56,32 +65,37 @@ namespace EnvelopeGenerator.Web.Controllers
}
else
{
envelopeResult.WithMessageKey(MessageKey.FailedToSendAccessCode);
_logger.LogError($"{MessageKey.FailedToSendAccessCode.ToString()}");
_logger.LogServiceMessage(erResult);
return this.ViewEnvelopeNotFound();
}
}
catch(Exception ex)
{
_logger.LogError(ex, MessageKey.UnexpectedError.ToString());
_logger.LogEnvelopeError(envelopeEeceiverId: envelopeReceiverId, exception:ex, message: MessageKey.UnexpectedError.TranslateWith(_translator));
return this.ViewInnerServiceError();
}
return Redirect($"{envelopeReceiverId}/Locked");
}
[HttpGet("EnvelopeKey/{envelopeReceiverId}/Locked")]
public IActionResult EnvelopeLocked([FromRoute] string envelopeReceiverId)
public async Task<IActionResult> EnvelopeLocked([FromRoute] string envelopeReceiverId)
{
(string? uuid, string? signature) = envelopeReceiverId.DecodeEnvelopeReceiverId();
if (uuid is null || signature is null)
try
{
return View("_Error", new ErrorViewModel()
{
Title = "404",
Subtitle = "Anfrage fehlgeschlagen!",
Body = "Das angeforderte Umschlag wurde nicht gefunden."
});
var result = await _envRcvService.IsExisting(envelopeReceiverId: envelopeReceiverId);
bool isExisting = result.Data;
if (result.HasFlag(EnvelopeFlag.NonDecodableEnvelopeReceiverId) || !isExisting)
return this.ViewEnvelopeNotFound();
return View().WithData("EnvelopeKey", envelopeReceiverId);
}
catch(Exception ex)
{
_logger.LogEnvelopeError(envelopeEeceiverId: envelopeReceiverId, exception: ex);
return this.ViewInnerServiceError();
}
return View().WithData("EnvelopeKey", envelopeReceiverId);
}
[HttpPost("/EnvelopeKey/{envelopeReceiverId}/Locked")]
@@ -93,7 +107,7 @@ namespace EnvelopeGenerator.Web.Controllers
if(uuid is null || signature is null)
{
_logger.LogWarning($"{MessageKey.WrongEnvelopeReceiverId.ToString()}");
_logger.LogEnvelopeError(uuid: uuid, signature: signature, message: MessageKey.WrongEnvelopeReceiverId.TranslateWith(_translator));
return BadRequest(_envelopeService.CreateMessage(false, MessageKey.WrongEnvelopeReceiverId.ToString()));
}
@@ -117,7 +131,7 @@ namespace EnvelopeGenerator.Web.Controllers
{
if (envelopeOldService.ReceiverAlreadySigned(response.Envelope, response.Receiver.Id))
{
return Redirect($"/EnvelopeKey/{envelopeReceiverId}/Success");
return View("EnvelopeSigned");
}
var envelope = await _envelopeService.ReadByUuidAsync(uuid: uuid, signature: signature, withAll: true);
@@ -171,9 +185,29 @@ namespace EnvelopeGenerator.Web.Controllers
[HttpGet("/EnvelopeKey/{envelopeReceiverId}/Success")]
public async Task<IActionResult> EnvelopeSigned(string envelopeReceiverId)
{
await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);
ViewData["EnvelopeKey"] = envelopeReceiverId;
return View();
try
{
var result = await _envRcvService.IsExisting(envelopeReceiverId: envelopeReceiverId);
bool isExisting = result.Data;
if (result.HasFlag(EnvelopeFlag.NonDecodableEnvelopeReceiverId) || !isExisting)
return this.ViewEnvelopeNotFound();
EnvelopeResponse response = await envelopeOldService.LoadEnvelope(envelopeReceiverId);
if (!envelopeOldService.ReceiverAlreadySigned(response.Envelope, response.Receiver.Id))
{
return Redirect($"/EnvelopeKey/{envelopeReceiverId}/Locked");
}
await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);
ViewData["EnvelopeKey"] = envelopeReceiverId;
return View();
}
catch (Exception ex)
{
_logger.LogEnvelopeError(envelopeEeceiverId: envelopeReceiverId, exception: ex);
return this.ViewInnerServiceError();
}
}
[Authorize]
@@ -185,11 +219,6 @@ namespace EnvelopeGenerator.Web.Controllers
return Ok(new { EnvelopeUuid = envelopeUuid, ReceiverSignature = receiverSignature });
}
[HttpGet("Error")]
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
public IActionResult Error()
{
return View();
}
public IActionResult Error404() => this.ViewError404();
}
}