Skip to content

Commit 131bffa

Browse files
committed
configured the analytics cookie domain name
1 parent b50fd0b commit 131bffa

File tree

6 files changed

+39
-32
lines changed

6 files changed

+39
-32
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -360,4 +360,5 @@ MigrationBackup/
360360
.ionide/
361361

362362
# Fody - auto-generated XML schema
363-
FodyWeavers.xsd
363+
FodyWeavers.xsd
364+
/appsettings.Development.json

Controllers/CookieConsentController.cs

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,17 @@ public class CookieConsentController : Controller
1717
private readonly ICookiePolicyService? cookiePolicyService;
1818
private string CookieBannerConsentCookieName = "";
1919
private int CookieBannerConsentCookieExpiryDays = 0;
20-
private string[] CookieBannerDeleteConsentCookieNames;
20+
private string[] CookieBannerAnalyticsCookieNamesPrefix;
21+
private string AnalyticsCookiesDomainName = "";
2122

2223
public CookieConsentController(IConfiguration configuration, ICookiePolicyService? cookiePolicyService = null)
2324
{
2425
this.configuration = configuration;
2526
this.cookiePolicyService = cookiePolicyService;
2627
CookieBannerConsentCookieName = configuration.GetCookieBannerConsentCookieName();
2728
CookieBannerConsentCookieExpiryDays = configuration.GetCookieBannerConsentExpiryDays();
28-
CookieBannerDeleteConsentCookieNames = configuration.GetCookieBannerDeleteCookieNames();
29+
CookieBannerAnalyticsCookieNamesPrefix = configuration.GetCookieBannerDeleteCookieNames();
30+
AnalyticsCookiesDomainName = configuration.GetAnalyticsCookiesDomainName();
2931

3032
string cookieBannerCSName = configuration.GetCookiePolicyConnectionStringName();
3133
if (!string.IsNullOrEmpty(cookieBannerCSName))
@@ -50,6 +52,7 @@ public IActionResult CookiePolicy()
5052

5153
if (Request != null)
5254
{
55+
string domainName = HttpContext.Request.Host.Host;
5356
if (Request.Cookies.HasCookieBannerCookie(CookieBannerConsentCookieName, "true"))
5457
model.UserConsent = "true";
5558
else if (Request.Cookies.HasCookieBannerCookie(CookieBannerConsentCookieName, "false"))
@@ -105,8 +108,6 @@ public IActionResult ConfirmCookieConsent(string consent, bool setTempDataConsen
105108
if (Response != null)
106109
{
107110
string domainName = HttpContext.Request.Host.Host;
108-
if (domainName.StartsWith("www"))
109-
domainName = domainName.Substring(3);
110111

111112
if (consent == "true")
112113
Response.Cookies?.SetCookieBannerCookie(CookieBannerConsentCookieName, consent, domainName,
@@ -116,24 +117,21 @@ public IActionResult ConfirmCookieConsent(string consent, bool setTempDataConsen
116117
{
117118
Response.Cookies?.SetCookieBannerCookie(CookieBannerConsentCookieName, consent, domainName,
118119
DateTime.UtcNow.AddDays(CookieBannerConsentCookieExpiryDays));
119-
RemoveCookies();
120+
RemoveCookiesDefinedInConfig();
120121
}
121-
122+
122123
TempData["ObtainUserConsentToTrackPriorToPageLoad"] = consent;
123124

124125
if (setTempDataConsentViaBannerPost) TempData["consentViaBannerPost"] = consent; // Need this tempdata to display the confirmation banner
125126
}
126127
return Json("OK");
127128
}
128129

129-
private void RemoveCookies()
130+
private void RemoveCookiesDefinedInConfig()
130131
{
131-
// Get the domain name from the request URL without protocol or "www" prefix
132-
string domainName = HttpContext.Request.Host.Host;
133-
if (domainName.StartsWith("www"))
134-
domainName = domainName.Substring(3);
132+
string domainName = GetDomainName();
135133

136-
foreach (var removeCookieName in CookieBannerDeleteConsentCookieNames)
134+
foreach (var removeCookieName in CookieBannerAnalyticsCookieNamesPrefix)
137135
{
138136
// List and delete all cookies from config
139137
var cookies = Request.Cookies.Where(c => c.Key.StartsWith(removeCookieName)).ToList();
@@ -142,6 +140,21 @@ private void RemoveCookies()
142140
Response.Cookies.Delete(cookie.Key, new CookieOptions { Domain = domainName });
143141
}
144142
}
145-
}
143+
}
144+
145+
private string GetDomainName()
146+
{
147+
// Get the domain name from the request URL without protocol or "www" prefix
148+
string domainName = HttpContext.Request.Host.Host;
149+
if (!string.IsNullOrEmpty(AnalyticsCookiesDomainName))
150+
domainName = AnalyticsCookiesDomainName;
151+
else
152+
{
153+
int dotIndex = domainName.IndexOf(".");
154+
domainName = dotIndex >= 0 ? domainName.Substring(dotIndex) : domainName;
155+
}
156+
157+
return domainName;
158+
}
146159
}
147160
}

Extensions/ConfigurationExtensions.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ public static class ConfigurationExtensions
44
{
55
private const string CookieBannerConsentCookieName = "CookieBannerConsent:CookieName";
66
private const string CookieBannerConsentExpiryDays = "CookieBannerConsent:ExpiryDays";
7-
private const string CookieBannerDeleteCookieNames = "CookieBannerConsent:DeleteCookieNamesPrefix";
7+
private const string CookieBannerDeleteCookieNames = "CookieBannerConsent:AnalyticsCookieNamesPrefix";
8+
private const string CookieBannerAnalyticsCookiesDomainName = "CookieBannerConsent:AnalyticsCookiesDomainName";
89

910
private const string CookiePolicyConnectionStringName = "CookiePolicy:ConnectionStringName";
1011
private const string CookiePolicySQL = "CookiePolicy:CookiePolicySQL";
@@ -27,6 +28,10 @@ public static string[] GetCookieBannerDeleteCookieNames(this IConfiguration conf
2728
var deleteCookieNames = config.GetSection(CookieBannerDeleteCookieNames);
2829
return deleteCookieNames.GetChildren().Select(x => x.Value).ToArray();
2930
}
31+
public static string GetAnalyticsCookiesDomainName(this IConfiguration config)
32+
{
33+
return config[CookieBannerAnalyticsCookiesDomainName];
34+
}
3035
public static int GetCookieBannerConsentExpiryDays(this IConfiguration config)
3136
{
3237
int.TryParse(config[CookieBannerConsentExpiryDays], out int expiryDays);

Helpers/CookieBannerHelper.cs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,6 @@ DateTime expiry
1818
new CookieOptions
1919
{
2020
Domain= domainName,
21-
HttpOnly = true,
22-
Secure = true, // Set to true if using HTTPS
23-
SameSite = SameSiteMode.Strict,
2421
Expires = expiry
2522
}
2623
);

appsettings.Development.json

Lines changed: 0 additions & 8 deletions
This file was deleted.

appsettings.json

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,16 @@
77
},
88
"AllowedHosts": "*",
99
"ConnectionStrings": {
10-
"DefaultConnection": "Data Source=localhost;Initial Catalog=mbdbx101_uar;Integrated Security=True;",
11-
"DWConnection": "Data Source=localhost;Initial Catalog=mbdw;Integrated Security=True;"
10+
"DefaultConnection": "Data Source=localhost;Initial Catalog=mbdbx101_uar;Integrated Security=True;"
1211
},
1312

1413
"CookieBannerConsent": {
1514
"CookieBannerContent": "<p>We've put some small files called cookies on your device to make our site work.</p> <p>We'd also like to use analytics cookies. These send anonymous information about how our site is used to a service called Google Analytics & Hotjar Analytics. We use this information to improve our site.</p>",
16-
//"CookieBannerContent": "<p>We've put some small files called cookies on your device to make our site work.</p> <p>We'd also like to use analytics cookies. These send anonymous information about how our site is used to a service called Google Analytics & Hotjar Analytics. We use this information to improve our site.</p> <p>Let us know if this is OK. We'll use a cookie to save your choice. You can <a id= nhsuk-cookie-banner__link\" target=\"_blank\" href=\"@Url.Action(@policyActionName,@policyControllerName)\" tabindex=\"1\">read more about our cookies</a> before you choose.</p>",
1715
"ApplicationName": "Digital Learning Solutions",
1816
"CookieName": "Dls-cookie-consent",
1917
"ExpiryDays": "365",
20-
"DeleteCookieNamesPrefix": [ "_ga", "_hj" ]
18+
"AnalyticsCookieNamesPrefix": [ "_ga", "_hj" ],
19+
"AnalyticsCookiesDomainName": ""
2120
},
2221

2322
// Get cookie policy content from SQL based source
@@ -33,8 +32,8 @@
3332
// "CookiePolicy": {
3433
// "ControllerName": "",
3534
// "ActionName": "",
36-
// "ApiUrl": "https://lh-userapi.dev.local/api/",
37-
// "CookiePolicyRequestURI": "TermsAndConditions/LatestVersion/10",
35+
// "ApiUrl": "",
36+
// "CookiePolicyRequestURI": "",
3837
// "ClientIdentityKey": ""
3938
// }
4039
}

0 commit comments

Comments
 (0)