diff --git a/EnvelopeGenerator.Application/Resources/Resource.de-DE.resx b/EnvelopeGenerator.Application/Resources/Resource.de-DE.resx index e15f5066..16e01cec 100644 --- a/EnvelopeGenerator.Application/Resources/Resource.de-DE.resx +++ b/EnvelopeGenerator.Application/Resources/Resource.de-DE.resx @@ -145,10 +145,10 @@ Englisch - Sie müssen {0} Vorgang unterzeichen. Bitte prüfen Sie die Seite {1}. + Sie müssen {0} Vorgang unterzeichen. <span class="highlight highlight-envelope-info-1">Bitte prüfen Sie die Seite {1}</span>. - 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. + Erstellt am {0} von {1}. Sie können den Absender über <span class="highlight highlight-envelope-info-2"><a href="mailto:{2}?subject={3}&body=Sehr%20geehrter%20{4}%20{5},%0A%0A%0A">{6}</a></span> kontaktieren. Abschließen diff --git a/EnvelopeGenerator.Application/Resources/Resource.en-US.resx b/EnvelopeGenerator.Application/Resources/Resource.en-US.resx index 48217dd7..b95cb7e4 100644 --- a/EnvelopeGenerator.Application/Resources/Resource.en-US.resx +++ b/EnvelopeGenerator.Application/Resources/Resource.en-US.resx @@ -145,10 +145,10 @@ English - You have to sign {0} process. Please check page {1}. + You have to sign {0} process. <span class="highlight highlight-envelope-info-1">Please check page {1}</span>. - 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>. + Created on {0} by {1}. You can contact the sender via <span class="highlight highlight-envelope-info-2"><a href="mailto:{2}?subject={3}&body=Dear%20{4}%20{5},%0A%0A%0A">{6}</a></span>. Finalize diff --git a/EnvelopeGenerator.Web/Program.cs b/EnvelopeGenerator.Web/Program.cs index 431c989e..f5064f51 100644 --- a/EnvelopeGenerator.Web/Program.cs +++ b/EnvelopeGenerator.Web/Program.cs @@ -16,6 +16,7 @@ using Microsoft.Extensions.Options; using EnvelopeGenerator.Application; using DigitalData.EmailProfilerDispatcher; using EnvelopeGenerator.Infrastructure; +using EnvelopeGenerator.Web.Sanitizers; var logger = LogManager.Setup().LoadConfigurationFromAppSettings().GetCurrentClassLogger(); logger.Info("Logging initialized!"); @@ -126,11 +127,15 @@ try builder.Services.AddSingleton(HtmlEncoder.Default); builder.Services.AddSingleton(UrlEncoder.Default); - builder.Services.AddSingleton(_ => + builder.Services.AddSanitizer(); + builder.Services.AddSanitizer(s => { - var sanitizer = new HtmlSanitizer(); - //configure sanitzer - return sanitizer; + s.AllowedTags.Add("a"); + s.AllowedAttributes.Add("href"); + s.AllowedAttributes.Add("class"); + s.AllowedClasses.Add("highlight"); + s.AllowedClasses.Add("highlight-envelope-info-1"); + s.AllowedClasses.Add("highlight-envelope-info-2"); }); // Register the FlagIconCssClass instance as a singleton diff --git a/EnvelopeGenerator.Web/Sanitizers/DIExtensions.cs b/EnvelopeGenerator.Web/Sanitizers/DIExtensions.cs new file mode 100644 index 00000000..65dccfc5 --- /dev/null +++ b/EnvelopeGenerator.Web/Sanitizers/DIExtensions.cs @@ -0,0 +1,17 @@ +using Ganss.Xss; +using Microsoft.Extensions.DependencyInjection; + +namespace EnvelopeGenerator.Web.Sanitizers +{ + public static class DIExtensions + { + public static IServiceCollection AddSanitizer(this IServiceCollection services, Action? optionActions = null) + where THtmlSanitizer : HtmlSanitizer => services + .AddSingleton(serviceProvider => + { + var sanitizer = ActivatorUtilities.CreateInstance(serviceProvider); + optionActions?.Invoke(sanitizer); + return sanitizer; + }); + } +} \ No newline at end of file diff --git a/EnvelopeGenerator.Web/Sanitizers/HighlightHtmlSanitizer.cs b/EnvelopeGenerator.Web/Sanitizers/HighlightHtmlSanitizer.cs new file mode 100644 index 00000000..9a3cb148 --- /dev/null +++ b/EnvelopeGenerator.Web/Sanitizers/HighlightHtmlSanitizer.cs @@ -0,0 +1,8 @@ +using Ganss.Xss; + +namespace EnvelopeGenerator.Web.Sanitizers +{ + public class HighlightHtmlSanitizer : HtmlSanitizer + { + } +} \ No newline at end of file diff --git a/EnvelopeGenerator.Web/Views/Home/ShowEnvelope.cshtml b/EnvelopeGenerator.Web/Views/Home/ShowEnvelope.cshtml index c91d1334..3a9bc1cd 100644 --- a/EnvelopeGenerator.Web/Views/Home/ShowEnvelope.cshtml +++ b/EnvelopeGenerator.Web/Views/Home/ShowEnvelope.cshtml @@ -38,15 +38,12 @@
@($"{envelope?.Title.TrySanitize(_sanitizer)}")
-

@(string.Format(_localizer[WebKey.EnvelopeInfo1], pages.Count(), stPageIndexes.TrySanitize(_sanitizer)))

-

@Html.Raw(string.Format(_localizer[WebKey.EnvelopeInfo2], - envelope?.AddedWhen.ToString(userCulture?.Info?.DateTimeFormat), - $"{sender?.Prename} {sender?.Name}".TrySanitize(_sanitizer), - sender?.Email.TryEncode(_encoder), - envelope?.Title.TryEncode(_encoder), - sender?.Prename.TryEncode(_encoder), - sender?.Name.TryEncode(_encoder), - sender?.Email.TryEncode(_encoder)).TrySanitize(_sanitizer))

+

@Html.Raw(string.Format(_localizer[WebKey.EnvelopeInfo1], pages.Count(), stPageIndexes).TrySanitize(_hlSanitizer))

+

+ + @Html.Raw(string.Format(_localizer[WebKey.EnvelopeInfo2], envelope?.AddedWhen.ToString(userCulture?.Info?.DateTimeFormat), $"{sender?.Prename} {sender?.Name}", sender?.Email, envelope?.Title, sender?.Prename, sender?.Name, sender?.Email).TrySanitize(_hlSanitizer)) + +

diff --git a/EnvelopeGenerator.Web/Views/_ViewImports.cshtml b/EnvelopeGenerator.Web/Views/_ViewImports.cshtml index 7d1c9b1d..25a878c5 100644 --- a/EnvelopeGenerator.Web/Views/_ViewImports.cshtml +++ b/EnvelopeGenerator.Web/Views/_ViewImports.cshtml @@ -1,10 +1,12 @@ @using EnvelopeGenerator.Web @using EnvelopeGenerator.Web.Models +@using EnvelopeGenerator.Web.Sanitizers @using Microsoft.Extensions.Localization @using EnvelopeGenerator.Application.Resources @inject IStringLocalizer _localizer @inject System.Text.Encodings.Web.UrlEncoder _encoder @inject Ganss.Xss.HtmlSanitizer _sanitizer +@inject HighlightHtmlSanitizer _hlSanitizer @inject Microsoft.AspNetCore.Http.IHttpContextAccessor _accessor @inject Cultures _cultures @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers \ No newline at end of file diff --git a/EnvelopeGenerator.Web/wwwroot/css/site.css b/EnvelopeGenerator.Web/wwwroot/css/site.css index b9614890..ee387b54 100644 --- a/EnvelopeGenerator.Web/wwwroot/css/site.css +++ b/EnvelopeGenerator.Web/wwwroot/css/site.css @@ -201,7 +201,13 @@ footer#page-footer { min-width: 4vw; } -/* Additional styles for better mobile responsiveness */ +.highlight { + font-weight: 700; + font-size: 13px; +} + + +/* styles for mobile responsiveness */ @media (max-width: 767px) { .navbar { flex-direction: column; @@ -256,3 +262,11 @@ footer#page-footer { max-width: 90%; } } +@media (max-height: 850px) { + .collapse .card-text, .collapsing .card-text { + font-size: 0.5rem; /* Font size reduced */ + margin: 0rem; + padding: 0rem; + } +} + diff --git a/EnvelopeGenerator.Web/wwwroot/js.7z b/EnvelopeGenerator.Web/wwwroot/js.7z deleted file mode 100644 index 79a0f9cf..00000000 Binary files a/EnvelopeGenerator.Web/wwwroot/js.7z and /dev/null differ