Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 12 additions & 3 deletions SAPSec.Web/ViewComponents/CookiesViewComponent.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,20 @@ public class CookiesViewComponent : ViewComponent
{
public IViewComponentResult Invoke()
{
if (HttpContext.Request.Cookies.ContainsKey(LayoutConstants.CookieSettingsName))
var cookieValue = HttpContext.Request.Cookies[LayoutConstants.CookieSettingsName];
var bannerState = HttpContext.Request.Query["cookie-banner"].ToString().ToLowerInvariant();

if (!string.IsNullOrEmpty(cookieValue) &&
bannerState is not "accepted" and not "rejected")
{
return new EmptyContentView();
}

return View(new CookiesViewModel(LayoutConstants.CookieSettingsName));
if (string.IsNullOrEmpty(cookieValue))
{
bannerState = "unselected";
}

return View(new CookiesViewModel(LayoutConstants.CookieSettingsName, bannerState));
}
}
}
5 changes: 3 additions & 2 deletions SAPSec.Web/ViewModels/Components/CookiesViewModel.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
namespace SAPSec.Web.ViewModels.Components;

public class CookiesViewModel(string cookieName)
public class CookiesViewModel(string cookieName, string bannerState)
{
public string CookieName => cookieName;
}
public string BannerState => bannerState;
}
45 changes: 30 additions & 15 deletions SAPSec.Web/Views/Shared/Components/Cookies/Default.cshtml
Original file line number Diff line number Diff line change
@@ -1,70 +1,76 @@
@using SAPSec.Web.Constants
@model SAPSec.Web.ViewModels.Components.CookiesViewModel
<div class="govuk-cookie-banner" data-nosnippet role="region" aria-label="Cookies on @LayoutConstants.ServiceName" id="cookies-banner" hidden>
<div class="govuk-cookie-banner" data-nosnippet role="region" aria-label="Cookies on @LayoutConstants.ServiceName" id="cookies-banner" data-banner-state="@Model.BannerState" hidden>
<div class="govuk-cookie-banner__message govuk-width-container" id="unselected-cookies-banner">
<div class="govuk-grid-row">
<div class="govuk-grid-column-two-thirds">
<h2 class="govuk-cookie-banner__heading govuk-heading-m">
Cookies on @LayoutConstants.ServiceName
</h2>
<div class="govuk-cookie-banner__content">
<p class="govuk-body">We use some essential cookies to make this tool work.</p>
<p class="govuk-body">We'd also like to use analytics cookies so we can understand how you use the tool and make improvements.</p>
<p class="govuk-body">We use some essential cookies to make this service work.</p>
<p class="govuk-body">We'd also like to use analytics cookies so we can understand how you use the service and make improvements.</p>
</div>
</div>
</div>
<div class="govuk-button-group">
<button type="submit" class="govuk-button" data-module="govuk-button" id="accept-cookies" name="cookies-analytics" value="true">
<button type="button" class="govuk-button" data-module="govuk-button" id="accept-cookies" name="cookies-analytics" value="true">
Accept analytics cookies
</button>
<button type="submit" class="govuk-button" data-module="govuk-button" id="reject-cookies" name="cookies-analytics" value="false">
<button type="button" class="govuk-button" data-module="govuk-button" id="reject-cookies" name="cookies-analytics" value="false">
Reject analytics cookies
</button>
<a class="govuk-link" href="@Url.Action("Cookies", "StaticContent")">View cookies</a>
</div>
</div>
<div class="govuk-cookie-banner__message govuk-width-container" role="alert" hidden id="accepted-cookies-banner">
<div class="govuk-cookie-banner__message govuk-width-container" role="alert" hidden id="accepted-cookies-banner" tabindex="-1">
<div class="govuk-grid-row">
<div class="govuk-grid-column-two-thirds">
<div class="govuk-cookie-banner__content">
<p class="govuk-body">You've accepted analytics cookies. You can <a class="govuk-link" href="@Url.Action("Index", "Cookies")">change your cookie settings</a> at any time.</p>
<p class="govuk-body">You've accepted analytics cookies. You can <a class="govuk-link" href="@Url.Action("Cookies", "StaticContent")">change your cookie settings</a> at any time.</p>
</div>
</div>
</div>
<div class="govuk-button-group">
<button type="button" class="govuk-button hide-cookies" data-module="govuk-button">
Hide cookie message
Hide this message
</button>
</div>
</div>
<div class="govuk-cookie-banner__message govuk-width-container" role="alert" hidden id="rejected-cookies-banner">
<div class="govuk-cookie-banner__message govuk-width-container" role="alert" hidden id="rejected-cookies-banner" tabindex="-1">
<div class="govuk-grid-row">
<div class="govuk-grid-column-two-thirds">
<div class="govuk-cookie-banner__content">
<p class="govuk-body">You've rejected analytics cookies. You can <a class="govuk-link" href="@Url.Action("Index", "Cookies")">change your cookie settings</a> at any time.</p>
<p class="govuk-body">You've rejected analytics cookies. You can <a class="govuk-link" href="@Url.Action("Cookies", "StaticContent")">change your cookie settings</a> at any time.</p>
</div>
</div>
</div>
<div class="govuk-button-group">
<button type="button" class="govuk-button hide-cookies" data-module="govuk-button">
Hide cookie message
Hide this message
</button>
</div>
</div>
</div>

<script add-nonce="true">
function showBannerMessage(messageId) {
var bannerMessage = document.getElementById(messageId);
bannerMessage.removeAttribute("hidden");
bannerMessage.focus();
}

function acceptOrRejectClick(enabled) {
if (window.setAppInsightsCookieEnabled !== undefined) {
window.setAppInsightsCookieEnabled(enabled);
}

document.cookie = `@Model.CookieName=${enabled ? "enabled" : "disabled"}; path=/; max-age=${60 * 60 * 24 * 365}; secure;`;
document.cookie = `@Model.CookieName=${enabled ? "enabled" : "disabled"}; path=/; max-age=${60 * 60 * 24 * 365}; secure`;
document.getElementById("unselected-cookies-banner").setAttribute("hidden", "hidden");
if (enabled) {
document.getElementById("accepted-cookies-banner").removeAttribute("hidden");
showBannerMessage("accepted-cookies-banner");
} else {
document.getElementById("rejected-cookies-banner").removeAttribute("hidden");
showBannerMessage("rejected-cookies-banner");
if (enabled === false) {
document.cookie = "ai_session=; path=/; expires=Thu, 01 Jan 1970 00:00:01 GMT;";
document.cookie = "ai_user=; path=/; expires=Thu, 01 Jan 1970 00:00:01 GMT;";
Expand All @@ -75,6 +81,15 @@
var cookiesBanner = document.getElementById("cookies-banner");
if (cookiesBanner !== undefined) {
cookiesBanner.removeAttribute("hidden");
var bannerState = cookiesBanner.getAttribute("data-banner-state");

if (bannerState === "accepted") {
document.getElementById("unselected-cookies-banner").setAttribute("hidden", "hidden");
showBannerMessage("accepted-cookies-banner");
} else if (bannerState === "rejected") {
document.getElementById("unselected-cookies-banner").setAttribute("hidden", "hidden");
showBannerMessage("rejected-cookies-banner");
}

var acceptButton = document.getElementById("accept-cookies");
acceptButton.addEventListener("click", (e) => { e.preventDefault(); acceptOrRejectClick(true); });
Expand All @@ -87,4 +102,4 @@
hideCookiesButtons[i].addEventListener("click", () => cookiesBanner.setAttribute("hidden", "hidden"));
}
}
</script>
</script>
Loading
Loading