diff --git a/EnvelopeGenerator.Application/Resources/Resource.de-DE.resx b/EnvelopeGenerator.Application/Resources/Resource.de-DE.resx index 4e6ce44e..1744f5bf 100644 --- a/EnvelopeGenerator.Application/Resources/Resource.de-DE.resx +++ b/EnvelopeGenerator.Application/Resources/Resource.de-DE.resx @@ -150,9 +150,6 @@ Erstellt am {0} von {1}. Sie können den Absender über <a href="mailto:{2}?subject={3}&body=Sehr%20geehrter%20{4}%20{5},%0A%0A%0A">{6}</a> kontaktieren. - - Ihr Einspruch wurde weitergeleitet! - Abschließen @@ -183,11 +180,14 @@ Ablehnung + + Ihre Ablehnung wurde weitergeleitet! + - Ihr Einspruch wurde an {0} weitergeleitet. Sie können über <a href="mailto:{1}?subject={2}&body=Dear%20{0},%0A%0A%0A">{1}</a> Kontakt aufnehmen. + Sie können bei Bedarf mit {0}, <a href="mailto:{1}?subject={2}&body=Dear%20{0},%0A%0A%0A">{1}</a> Kontakt aufnehmen. - Warum lehnen Sie den Vertrag ab? + Bitte geben Sie einen Grund an: Durch Klick auf Abschließen stimme ich zu, dass die abgebildete und übermittelte Signatur als elektronische Darstellung meiner Signatur in den Fällen gelten, in denen ich sie auf Dokumenten, einschließlich rechtsgültiger Verträge verwende. diff --git a/EnvelopeGenerator.Application/Resources/Resource.en-US.resx b/EnvelopeGenerator.Application/Resources/Resource.en-US.resx index 4f2862c8..1a0bda54 100644 --- a/EnvelopeGenerator.Application/Resources/Resource.en-US.resx +++ b/EnvelopeGenerator.Application/Resources/Resource.en-US.resx @@ -150,9 +150,6 @@ Created on {0} by {1}. You can contact the sender via <a href="mailto:{2}?subject={3}&body=Dear%20{4}%20{5},%0A%0A%0A">{6}</a>. - - Your objection has been forwarded! - Finalize @@ -183,11 +180,14 @@ Rejection + + Your rejection has been forwarded! + - Your objection has been forwarded to {0}. You can contact via <a href="mailto:{1}?subject={2}&body=Dear%20{0},%0A%0A%0A">{1}</a>. + You can contact {0}, <a href="mailto:{1}?subject={2}&body=Dear%20{0},%0A%0A%0A">{1}</a> if required. - Why do you reject the contract? + Please give a reason: By clicking on Finalize, I agree that the signature shown and submitted is an electronic representation of my signature in cases where I use it on documents, including legally binding contracts. diff --git a/EnvelopeGenerator.Web/Controllers/HomeController.cs b/EnvelopeGenerator.Web/Controllers/HomeController.cs index 1da9f5b0..0a62549f 100644 --- a/EnvelopeGenerator.Web/Controllers/HomeController.cs +++ b/EnvelopeGenerator.Web/Controllers/HomeController.cs @@ -1,5 +1,4 @@ using EnvelopeGenerator.Application.Contracts; -using EnvelopeGenerator.Application.Services; using EnvelopeGenerator.Common; using EnvelopeGenerator.Web.Services; using Microsoft.AspNetCore.Authentication.Cookies; @@ -16,9 +15,6 @@ using Microsoft.AspNetCore.Localization; using System.Text.Encodings.Web; using EnvelopeGenerator.Web.Models; using EnvelopeGenerator.Application.Resources; -using Microsoft.EntityFrameworkCore.ChangeTracking.Internal; -using System.Text.RegularExpressions; -using EnvelopeGenerator.Domain.Entities; namespace EnvelopeGenerator.Web.Controllers { @@ -121,7 +117,7 @@ namespace EnvelopeGenerator.Web.Controllers envelopeReceiverId = _urlEncoder.Encode(envelopeReceiverId); (string? uuid, string? signature) = envelopeReceiverId.DecodeEnvelopeReceiverId(); - if(uuid is null || signature is null) + if (uuid is null || signature is null) { _logger.LogEnvelopeError(uuid: uuid, signature: signature, message: _localizer[WebKey.WrongEnvelopeReceiverId]); return Unauthorized(); @@ -129,83 +125,84 @@ namespace EnvelopeGenerator.Web.Controllers _logger.LogInformation($"Envelope UUID: [{uuid}]\nReceiver Signature: [{signature}]"); - return await _envRcvService.VerifyAccessCodeAsync(uuid: uuid, signature: signature, accessCode: access_code).ThenAsync( - SuccessAsync: async isVerified => - { - EnvelopeResponse response = await envelopeOldService.LoadEnvelope(envelopeReceiverId); - if (isVerified) + //check access code + EnvelopeResponse response = await envelopeOldService.LoadEnvelope(envelopeReceiverId); + var verification = await _envRcvService.VerifyAccessCodeAsync(uuid: uuid, signature: signature, accessCode: access_code); + if (verification.IsFailed) + { + _logger.LogNotice(verification.Notices); + Response.StatusCode = StatusCodes.Status401Unauthorized; + return View("EnvelopeLocked") + .WithData("UserLanguage", UserLanguage ?? _cultures.Default.Language) + .WithData("ErrorMessage", _localizer[WebKey.WrongAccessCode].Value); + } + else if (verification.IsWrong()) + { + database.Services.actionService.EnterIncorrectAccessCode(response.Envelope, response.Receiver); //for history + Response.StatusCode = StatusCodes.Status401Unauthorized; + return View("EnvelopeLocked") + .WithData("UserLanguage", UserLanguage ?? _cultures.Default.Language) + .WithData("ErrorMessage", _localizer[WebKey.WrongAccessCode].Value); + } + else + { + ViewData["EnvelopeKey"] = envelopeReceiverId; + } + + //show envelope + database.Services.actionService.EnterCorrectAccessCode(response.Envelope, response.Receiver); //for history + return await _envRcvService.ReadByUuidSignatureAsync(uuid: uuid, signature: signature).ThenAsync( + SuccessAsync: async er => { - database.Services.actionService.EnterCorrectAccessCode(response.Envelope, response.Receiver); //for history - ViewData["EnvelopeKey"] = envelopeReceiverId; + if (await _historyService.IsRejected(envelopeId: er.Envelope!.Id)) + return View("EnvelopeRejected", er); - return await _envRcvService.ReadByUuidSignatureAsync(uuid: uuid, signature: signature).ThenAsync( - SuccessAsync: async er => - { - if(await _historyService.IsSigned(envelopeId: er.Envelope!.Id, userReference: er.Receiver!.EmailAddress)) - return View("EnvelopeSigned"); + if (await _historyService.IsSigned(envelopeId: er.Envelope!.Id, userReference: er.Receiver!.EmailAddress)) + return View("EnvelopeSigned"); - if (response.Envelope.Documents.Count > 0) - { - var document = await envelopeOldService.GetDocument(response.Envelope.Documents[0].Id, envelopeReceiverId); - byte[] bytes = await envelopeOldService.GetDocumentContents(document); - ViewData["DocumentBytes"] = bytes; - } - else - { - return this.ViewDocumentNotFound(); - } + if (response.Envelope.Documents.Count > 0) + { + var document = await envelopeOldService.GetDocument(response.Envelope.Documents[0].Id, envelopeReceiverId); + byte[] bytes = await envelopeOldService.GetDocumentContents(document); + ViewData["DocumentBytes"] = bytes; + } + else + return this.ViewDocumentNotFound(); - var claims = new List { + var claims = new List { new(ClaimTypes.NameIdentifier, uuid), new(ClaimTypes.Hash, signature), new(ClaimTypes.Name, er.Name ?? string.Empty), new(ClaimTypes.Email, er.Receiver.EmailAddress), new(EnvelopeClaimTypes.Title, er.Envelope.Title) - }; + }; - var claimsIdentity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme); - var authProperties = new AuthenticationProperties { - AllowRefresh = false, - IsPersistent = false - }; + var claimsIdentity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme); + var authProperties = new AuthenticationProperties + { + AllowRefresh = false, + IsPersistent = false + }; - await HttpContext.SignInAsync( - CookieAuthenticationDefaults.AuthenticationScheme, - new ClaimsPrincipal(claimsIdentity), - authProperties); + await HttpContext.SignInAsync( + CookieAuthenticationDefaults.AuthenticationScheme, + new ClaimsPrincipal(claimsIdentity), + authProperties); - //add PSPDFKit licence key - ViewData["PSPDFKitLicenseKey"] = _configuration["PSPDFKitLicenseKey"]; - ViewData["UserCulture"] = _cultures[UserLanguage]; + //add PSPDFKit licence key + ViewData["PSPDFKitLicenseKey"] = _configuration["PSPDFKitLicenseKey"]; + ViewData["UserCulture"] = _cultures[UserLanguage]; - return View("ShowEnvelope", er); - }, - Fail: (messages, notices) => - { - _logger.LogNotice(notices); - return this.ViewEnvelopeNotFound(); - } - ); - } - else + return View("ShowEnvelope", er); + }, + Fail: (messages, notices) => { - database.Services.actionService.EnterIncorrectAccessCode(response.Envelope, response.Receiver); //for history - Response.StatusCode = StatusCodes.Status401Unauthorized; - return View("EnvelopeLocked") - .WithData("UserLanguage", UserLanguage ?? _cultures.Default.Language) - .WithData("ErrorMessage", _localizer[WebKey.WrongAccessCode].Value); + _logger.LogNotice(notices); + return this.ViewEnvelopeNotFound(); } - }, - Fail: (messages, notices) => - { - _logger.LogNotice(notices); - Response.StatusCode = StatusCodes.Status401Unauthorized; - return View("EnvelopeLocked") - .WithData("UserLanguage", UserLanguage ?? _cultures.Default.Language) - .WithData("ErrorMessage", _localizer[WebKey.WrongAccessCode].Value); - }); + ); } - catch(Exception ex) + catch (Exception ex) { _logger.LogEnvelopeError(envelopeEeceiverId: envelopeReceiverId, exception: ex); return this.ViewInnerServiceError(); diff --git a/EnvelopeGenerator.Web/Views/Home/EnvelopeRejected.cshtml b/EnvelopeGenerator.Web/Views/Home/EnvelopeRejected.cshtml index 243398a2..19dadebe 100644 --- a/EnvelopeGenerator.Web/Views/Home/EnvelopeRejected.cshtml +++ b/EnvelopeGenerator.Web/Views/Home/EnvelopeRejected.cshtml @@ -54,7 +54,7 @@ c-5.791,5.79-15.176,5.79-20.969,0l-30.32-30.322l-11.676,11.676l30.32,30.32c5.79,5.79,5.79,15.178,0,20.969L299.11,404.045z"/> -

@_localizer[WebKey.EnvelopeObjectionTitle].TrySanitize(_sanitizer)

+

@_localizer[WebKey.RejectionInfo1].TrySanitize(_sanitizer)

@@ -62,8 +62,8 @@ @Html.Raw(string.Format(_localizer[WebKey.RejectionInfo2], $"{sender?.Prename} {sender?.Name}".TrySanitize(_sanitizer), - sender?.Email.TryEncode(_encoder), - envelope?.Title.TryEncode(_encoder))) + sender?.Email.TrySanitize(_sanitizer), + envelope?.Title.TrySanitize(_sanitizer)))

diff --git a/EnvelopeGenerator.Web/WebKey.cs b/EnvelopeGenerator.Web/WebKey.cs index 4b179d2f..02b24b6d 100644 --- a/EnvelopeGenerator.Web/WebKey.cs +++ b/EnvelopeGenerator.Web/WebKey.cs @@ -28,7 +28,7 @@ public static readonly string Reject = nameof(Reject); public static readonly string and = nameof(and); public static readonly string Hello = nameof(Hello); - public static readonly string EnvelopeObjectionTitle = nameof(EnvelopeObjectionTitle); + public static readonly string RejectionInfo1 = nameof(RejectionInfo1); public static readonly string RejectionInfo2 = nameof(RejectionInfo2); } } \ No newline at end of file diff --git a/EnvelopeGenerator.Web/wwwroot/js/event-binder.js b/EnvelopeGenerator.Web/wwwroot/js/event-binder.js index 72ef8694..88ad44e3 100644 --- a/EnvelopeGenerator.Web/wwwroot/js/event-binder.js +++ b/EnvelopeGenerator.Web/wwwroot/js/event-binder.js @@ -28,7 +28,6 @@ $('.btn_reject').click(_ => if (!result.isConfirmed) return; const res = result.value; - console.log(res) if (res.ok) { redirRejected() }