diff --git a/EnvelopeGenerator.Application/Resources/Resource.de-DE.resx b/EnvelopeGenerator.Application/Resources/Resource.de-DE.resx
index 6633ca51..976138c9 100644
--- a/EnvelopeGenerator.Application/Resources/Resource.de-DE.resx
+++ b/EnvelopeGenerator.Application/Resources/Resource.de-DE.resx
@@ -120,6 +120,9 @@
Abschließen
+
+ Konfirmation
+
Deutch
@@ -135,6 +138,9 @@
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.
+
+ Abschließen
+
Öffnen
@@ -156,8 +162,11 @@
Ablehnen
+
+ Überprüfung
+
- Durch Auswahl von Übernehmen und signieren stimme ich zu, dass die Signatur und die Initialen als elektronische Darstellung meiner Signatur und meiner Initialen in den Fällen gelten, in denen ich (oder mein Beauftragter) sie auf Dokumenten, einschließlich rechtsgültiger Verträge, verwende.
+ 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.
Dokument unterschreiben
diff --git a/EnvelopeGenerator.Application/Resources/Resource.en-US.resx b/EnvelopeGenerator.Application/Resources/Resource.en-US.resx
index 250a108a..310d7e16 100644
--- a/EnvelopeGenerator.Application/Resources/Resource.en-US.resx
+++ b/EnvelopeGenerator.Application/Resources/Resource.en-US.resx
@@ -120,6 +120,9 @@
Complete
+
+ Confirmation
+
German
@@ -135,6 +138,9 @@
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>.
+
+ Finalize
+
Open
@@ -156,8 +162,11 @@
Reject
+
+ Review
+
- By selecting accept and sign, I agree that the signature and the initials are considered as electronic representations of my signature and my initials in cases where I (or my agent) use them on documents, including legally valid contracts.
+ 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.
Sign document
diff --git a/EnvelopeGenerator.Web/Controllers/LocalizationController.cs b/EnvelopeGenerator.Web/Controllers/LocalizationController.cs
new file mode 100644
index 00000000..e4aad5af
--- /dev/null
+++ b/EnvelopeGenerator.Web/Controllers/LocalizationController.cs
@@ -0,0 +1,33 @@
+using EnvelopeGenerator.Application.Resources;
+using Ganss.Xss;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Localization;
+
+namespace EnvelopeGenerator.Web.Controllers
+{
+ [ApiController]
+ [Route("api/[controller]")]
+ public class LocalizationController : ControllerBase
+ {
+ private readonly IStringLocalizer _localizer;
+ private readonly ILogger _logger;
+ private readonly HtmlSanitizer _sanitizer;
+
+ public LocalizationController(IStringLocalizer localizer, ILogger logger, HtmlSanitizer sanitizer)
+ {
+ _localizer = localizer;
+ _logger = logger;
+ _sanitizer = sanitizer;
+ }
+
+ [HttpGet]
+ public IActionResult GetLocalized([FromQuery] string[]? name = null, [FromQuery] string[]? ignore = null)
+ {
+ ignore ??= Array.Empty();
+ var pairs = name?.ToDictionary(n => n, n => _localizer[n].Value)
+ ?? _localizer.GetAllStrings().Where(ls => !ignore.Contains(ls.Name)).ToDictionary(ls => ls.Name, ls => ls.Value); ;
+ return Ok(pairs);
+ }
+ }
+}
diff --git a/EnvelopeGenerator.Web/Controllers/Test/TestLocalizerController.cs b/EnvelopeGenerator.Web/Controllers/Test/TestLocalizerController.cs
index 4c50d6e9..dac5d26d 100644
--- a/EnvelopeGenerator.Web/Controllers/Test/TestLocalizerController.cs
+++ b/EnvelopeGenerator.Web/Controllers/Test/TestLocalizerController.cs
@@ -28,11 +28,5 @@ namespace EnvelopeGenerator.Web.Controllers.Test
[HttpGet("culture")]
public IActionResult GetCultures(string? lang = null) => lang is null ? Ok(_cultures) : Ok(_cultures[lang]);
-
- [HttpGet("to-culture-info")]
- public IActionResult ToCultureInfo(string locale) => Ok(locale.ToCultureInfo());
-
- [HttpGet("two-letter-iso-language-name")]
- public IActionResult TwoLetterISOLanguageName(string locale) => Ok(locale.TwoLetterISOLanguageName());
}
}
diff --git a/EnvelopeGenerator.Web/Views/Home/ShowEnvelope.cshtml b/EnvelopeGenerator.Web/Views/Home/ShowEnvelope.cshtml
index 96be2ac8..b61c5770 100644
--- a/EnvelopeGenerator.Web/Views/Home/ShowEnvelope.cshtml
+++ b/EnvelopeGenerator.Web/Views/Home/ShowEnvelope.cshtml
@@ -3,6 +3,8 @@
}
@using DigitalData.Core.DTO;
@using EnvelopeGenerator.Application.DTOs;
+@using Newtonsoft.Json
+@using Newtonsoft.Json.Serialization
@model EnvelopeReceiverDto;
@{
ViewData["Title"] = _localizer[WebKey.SignDoc];
@@ -88,11 +90,11 @@
}
@if (ViewData["DocumentBytes"] is byte[] documentBytes)
{
- var settings = new Newtonsoft.Json.JsonSerializerSettings
+ var settings = new JsonSerializerSettings
{
- ContractResolver = new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver()
+ ContractResolver = new CamelCasePropertyNamesContractResolver()
};
- var envelopeReceiverJson = Newtonsoft.Json.JsonConvert.SerializeObject(Model, settings);
+ var envelopeReceiverJson = JsonConvert.SerializeObject(Model, settings);
var documentBase64String = Convert.ToBase64String(documentBytes);
var envelopeKey = ViewData["EnvelopeKey"] as string;
diff --git a/EnvelopeGenerator.Web/Views/Shared/_Layout.cshtml b/EnvelopeGenerator.Web/Views/Shared/_Layout.cshtml
index 9ff549ba..6ade942d 100644
--- a/EnvelopeGenerator.Web/Views/Shared/_Layout.cshtml
+++ b/EnvelopeGenerator.Web/Views/Shared/_Layout.cshtml
@@ -1,4 +1,9 @@
-
+@using DigitalData.Core.API
+@using Newtonsoft.Json
+@{
+ var nonce = _accessor.HttpContext?.Items["csp-nonce"] as string;
+}
+
@@ -24,6 +29,13 @@
@await RenderSectionAsync("Scripts", required: false)
+ @{
+ var lStrsJson = JsonConvert.SerializeObject(_localizer.ToDictionary()).TrySanitize(_sanitizer);
+ }
+
+
@RenderBody()
diff --git a/EnvelopeGenerator.Web/wwwroot/js/app.js b/EnvelopeGenerator.Web/wwwroot/js/app.js
index 22c3a7f9..98580a11 100644
--- a/EnvelopeGenerator.Web/wwwroot/js/app.js
+++ b/EnvelopeGenerator.Web/wwwroot/js/app.js
@@ -177,52 +177,68 @@ class App {
icon: 'warning',
})
return false
-
}
- // Save changes before doing anything
- try {
- await this.Instance.save()
- } catch (e) {
- Swal.fire({
- title: 'Fehler',
- text: 'Umschlag konnte nicht signiert werden!',
- icon: 'error',
- })
- return false
- }
+ return Swal.fire({
+ title: localized.Confirmation,
+ html: `${localized.SigAgree}
`,
+ icon: "question",
+ showCancelButton: true,
+ confirmButtonColor: "#3085d6",
+ cancelButtonColor: "#d33",
+ confirmButtonText: localized.Finalize,
+ cancelButtonText: localized.Review
+ }).then(async (result) => {
+ if (result.isConfirmed) {
+ //---
+ // Save changes before doing anything
+ try {
+ await this.Instance.save()
+ } catch (e) {
+ Swal.fire({
+ title: 'Fehler',
+ text: 'Umschlag konnte nicht signiert werden!',
+ icon: 'error',
+ })
+ return false
+ }
- // Export annotation data and save to database
- try {
- const json = await this.Instance.exportInstantJSON()
- const postEnvelopeResult = await this.Network.postEnvelope(
- this.envelopeKey,
- this.currentDocument.id,
- json
- )
+ // Export annotation data and save to database
+ try {
+ const json = await this.Instance.exportInstantJSON()
+ const postEnvelopeResult = await this.Network.postEnvelope(
+ this.envelopeKey,
+ this.currentDocument.id,
+ json
+ )
- if (postEnvelopeResult.fatal) {
- Swal.fire({
- title: 'Fehler',
- text: 'Umschlag konnte nicht signiert werden!',
- icon: 'error',
- })
- return false
+ if (postEnvelopeResult.fatal) {
+ Swal.fire({
+ title: 'Fehler',
+ text: 'Umschlag konnte nicht signiert werden!',
+ icon: 'error',
+ })
+ return false
+ }
+
+ if (postEnvelopeResult.error) {
+ Swal.fire({
+ title: 'Warnung',
+ text: 'Umschlag ist nicht mehr verfügbar.',
+ icon: 'warning',
+ })
+ return false
+ }
+
+ return true
+ } catch (e) {
+ return false
+ }
+ //---
}
-
- if (postEnvelopeResult.error) {
- Swal.fire({
- title: 'Warnung',
- text: 'Umschlag ist nicht mehr verfügbar.',
- icon: 'warning',
- })
- return false
- }
-
- return true
- } catch (e) {
- return false
- }
+ else
+ return false;
+ });
}