From e7931bba7b54455981e5dbbd556ca322b00a77e3 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 28 Feb 2026 03:21:34 +0000 Subject: [PATCH 01/13] Initial plan From b3c74950bd62a4dec1f100372dbda60b5bd072f8 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 28 Feb 2026 03:42:39 +0000 Subject: [PATCH 02/13] fix: resolve popup support/privacy branding link fallbacks Co-authored-by: Zacgoose <107489668+Zacgoose@users.noreply.github.com> --- popup/popup.js | 9 +++++++-- scripts/modules/config-manager.js | 16 ++++++++++++++-- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/popup/popup.js b/popup/popup.js index 7d841e62..24ea5fa2 100644 --- a/popup/popup.js +++ b/popup/popup.js @@ -1087,10 +1087,15 @@ class CheckPopup { let url = ""; switch (linkType) { case "support": - url = this.brandingConfig.supportUrl; + url = + this.brandingConfig.supportUrl || + (this.brandingConfig.supportEmail + ? `mailto:${this.brandingConfig.supportEmail}` + : ""); break; case "privacy": - url = this.brandingConfig.privacyPolicyUrl; + url = + this.brandingConfig.privacyPolicyUrl || this.brandingConfig.companyURL; break; case "about": url = chrome.runtime.getURL("options/options.html#about"); diff --git a/scripts/modules/config-manager.js b/scripts/modules/config-manager.js index 2627a06c..7f869395 100644 --- a/scripts/modules/config-manager.js +++ b/scripts/modules/config-manager.js @@ -462,8 +462,12 @@ export class ConfigManager { await this.loadConfig(); } - // Start with the base branding config - let finalBranding = await this.getBrandingConfig(); + // Start with defaults to ensure required branding links are always available + const defaultBranding = this.getDefaultBrandingConfig(); + let finalBranding = { + ...defaultBranding, + ...(await this.getBrandingConfig()), + }; // If enterprise has custom branding, merge it in (takes precedence) if (this.enterpriseConfig && this.enterpriseConfig.customBranding) { @@ -480,6 +484,14 @@ export class ConfigManager { finalBranding.genericWebhook = currentConfig.genericWebhook; } + // Derive support/privacy URLs when only partial branding is configured + if (!finalBranding.supportUrl && finalBranding.supportEmail) { + finalBranding.supportUrl = `mailto:${finalBranding.supportEmail}`; + } + if (!finalBranding.privacyPolicyUrl && finalBranding.companyURL) { + finalBranding.privacyPolicyUrl = finalBranding.companyURL; + } + return finalBranding; } From 83804f4414b56e2f56d9d26e734ab5bacf9cda07 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 28 Feb 2026 03:43:19 +0000 Subject: [PATCH 03/13] refactor: keep branding link fallback logic in config manager only Co-authored-by: Zacgoose <107489668+Zacgoose@users.noreply.github.com> --- popup/popup.js | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/popup/popup.js b/popup/popup.js index 24ea5fa2..7d841e62 100644 --- a/popup/popup.js +++ b/popup/popup.js @@ -1087,15 +1087,10 @@ class CheckPopup { let url = ""; switch (linkType) { case "support": - url = - this.brandingConfig.supportUrl || - (this.brandingConfig.supportEmail - ? `mailto:${this.brandingConfig.supportEmail}` - : ""); + url = this.brandingConfig.supportUrl; break; case "privacy": - url = - this.brandingConfig.privacyPolicyUrl || this.brandingConfig.companyURL; + url = this.brandingConfig.privacyPolicyUrl; break; case "about": url = chrome.runtime.getURL("options/options.html#about"); From e924e08e7dd01e51db3e80b2930b16a1dd21410b Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 28 Feb 2026 05:20:52 +0000 Subject: [PATCH 04/13] feat: add configurable support/privacy links for branding and enterprise policy Co-authored-by: Zacgoose <107489668+Zacgoose@users.noreply.github.com> --- config/branding.json | 2 + config/managed_schema.json | 16 +- enterprise/Check-Extension-Policy.reg | 30 ++-- enterprise/Deploy-Windows-Chrome-and-Edge.ps1 | 6 +- enterprise/Remove-Windows-Chrome-and-Edge.ps1 | 2 + enterprise/admx/Check-Extension.admx | 148 ++++++++++++------ enterprise/admx/en-US/Check-Extension.adml | 126 ++++++++++----- enterprise/firefox/policies.json | 4 +- .../macos-linux/chrome-managed-policy.json | 5 +- .../macos-linux/edge-managed-policy.json | 5 +- options/options.html | 16 ++ options/options.js | 21 ++- scripts/modules/config-manager.js | 3 + tests/config-persistence.test.js | 45 ++++++ 14 files changed, 324 insertions(+), 105 deletions(-) diff --git a/config/branding.json b/config/branding.json index c09a76b4..26426b5f 100644 --- a/config/branding.json +++ b/config/branding.json @@ -2,6 +2,8 @@ "companyName": "CyberDrain", "companyURL": "https://cyberdrain.com/", "productName": "Check", + "supportUrl": "https://support.cyberdrain.com", + "privacyPolicyUrl": "https://cyberdrain.com/privacy", "version": "1.1.0", "description": "Protect against phishing attacks targeting Microsoft 365 login pages with enterprise-grade detection", "branding": { diff --git a/config/managed_schema.json b/config/managed_schema.json index fa279af6..96d32089 100644 --- a/config/managed_schema.json +++ b/config/managed_schema.json @@ -145,6 +145,20 @@ "format": "email", "default": "" }, + "supportUrl": { + "title": "Support URL", + "description": "URL opened by the popup Support link", + "type": "string", + "format": "uri", + "default": "" + }, + "privacyPolicyUrl": { + "title": "Privacy URL", + "description": "URL opened by the popup Privacy link", + "type": "string", + "format": "uri", + "default": "" + }, "primaryColor": { "title": "Primary Color", "description": "Primary theme color (hex code)", @@ -162,4 +176,4 @@ } } } -} \ No newline at end of file +} diff --git a/enterprise/Check-Extension-Policy.reg b/enterprise/Check-Extension-Policy.reg index fce2f70c..d94bdb5f 100644 --- a/enterprise/Check-Extension-Policy.reg +++ b/enterprise/Check-Extension-Policy.reg @@ -21,12 +21,15 @@ Windows Registry Editor Version 5.00 "enableDebugLogging"=dword:00000000 ; Custom branding configuration -[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Edge\3rdparty\extensions\knepjpocdagponkonnbggpcnhnaikajg\policy\customBranding] -"companyName"="CyberDrain" -"productName"="Check" -"supportEmail"="" -"primaryColor"="#F77F00" -"logoUrl"="" +[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Edge\3rdparty\extensions\knepjpocdagponkonnbggpcnhnaikajg\policy\customBranding] +"companyName"="CyberDrain" +"companyURL"="https://cyberdrain.com/" +"productName"="Check" +"supportEmail"="" +"supportUrl"="" +"privacyPolicyUrl"="" +"primaryColor"="#F77F00" +"logoUrl"="" ; Optional: Prevent users from disabling the extension [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Edge\ExtensionSettings] @@ -53,12 +56,15 @@ Windows Registry Editor Version 5.00 "enableDebugLogging"=dword:00000000 ; Custom branding configuration for Chrome -[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome\3rdparty\extensions\benimdeioplgkhanklclahllklceahbe\policy\customBranding] -"companyName"="CyberDrain" -"productName"="Check" -"supportEmail"="" -"primaryColor"="#F77F00" -"logoUrl"="" +[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome\3rdparty\extensions\benimdeioplgkhanklclahllklceahbe\policy\customBranding] +"companyName"="CyberDrain" +"companyURL"="https://cyberdrain.com/" +"productName"="Check" +"supportEmail"="" +"supportUrl"="" +"privacyPolicyUrl"="" +"primaryColor"="#F77F00" +"logoUrl"="" ; Optional: Prevent users from disabling the extension in Chrome [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome\ExtensionSettings] diff --git a/enterprise/Deploy-Windows-Chrome-and-Edge.ps1 b/enterprise/Deploy-Windows-Chrome-and-Edge.ps1 index b886eb8a..b5320852 100644 --- a/enterprise/Deploy-Windows-Chrome-and-Edge.ps1 +++ b/enterprise/Deploy-Windows-Chrome-and-Edge.ps1 @@ -34,6 +34,8 @@ $companyName = "CyberDrain" # This will set the "Company Name" option in the Cus $companyURL = "https://cyberdrain.com" # This will set the Company URL option in the Custom Branding settings; default is "https://cyberdrain.com"; Must include the protocol (e.g., https://). $productName = "Check - Phishing Protection" # This will set the "Product Name" option in the Custom Branding settings; default is "Check - Phishing Protection". $supportEmail = "" # This will set the "Support Email" option in the Custom Branding settings; default is blank. +$supportUrl = "" # This will set the "Support URL" option in the Custom Branding settings; default is blank. +$privacyPolicyUrl = "" # This will set the "Privacy URL" option in the Custom Branding settings; default is blank. $primaryColor = "#F77F00" # This will set the "Primary Color" option in the Custom Branding settings; default is "#F77F00"; must be a valid hex color code (e.g., #FFFFFF). $logoUrl = "" # This will set the "Logo URL" option in the Custom Branding settings; default is blank. Must be a valid URL including the protocol (e.g., https://example.com/logo.png); protocol must be https; recommended size is 48x48 pixels with a maximum of 128x128. @@ -93,6 +95,8 @@ function Configure-ExtensionSettings { New-ItemProperty -Path $customBrandingKey -Name "companyURL" -PropertyType String -Value $companyURL -Force | Out-Null New-ItemProperty -Path $customBrandingKey -Name "productName" -PropertyType String -Value $productName -Force | Out-Null New-ItemProperty -Path $customBrandingKey -Name "supportEmail" -PropertyType String -Value $supportEmail -Force | Out-Null + New-ItemProperty -Path $customBrandingKey -Name "supportUrl" -PropertyType String -Value $supportUrl -Force | Out-Null + New-ItemProperty -Path $customBrandingKey -Name "privacyPolicyUrl" -PropertyType String -Value $privacyPolicyUrl -Force | Out-Null New-ItemProperty -Path $customBrandingKey -Name "primaryColor" -PropertyType String -Value $primaryColor -Force | Out-Null New-ItemProperty -Path $customBrandingKey -Name "logoUrl" -PropertyType String -Value $logoUrl -Force | Out-Null @@ -145,4 +149,4 @@ function Configure-ExtensionSettings { # Configure settings for Chrome and Edge Configure-ExtensionSettings -ExtensionId $chromeExtensionId -UpdateUrl $chromeUpdateUrl -ManagedStorageKey $chromeManagedStorageKey -ExtensionSettingsKey $chromeExtensionSettingsKey -Configure-ExtensionSettings -ExtensionId $edgeExtensionId -UpdateUrl $edgeUpdateUrl -ManagedStorageKey $edgeManagedStorageKey -ExtensionSettingsKey $edgeExtensionSettingsKey \ No newline at end of file +Configure-ExtensionSettings -ExtensionId $edgeExtensionId -UpdateUrl $edgeUpdateUrl -ManagedStorageKey $edgeManagedStorageKey -ExtensionSettingsKey $edgeExtensionSettingsKey diff --git a/enterprise/Remove-Windows-Chrome-and-Edge.ps1 b/enterprise/Remove-Windows-Chrome-and-Edge.ps1 index fed3c9d9..a3b65dbf 100644 --- a/enterprise/Remove-Windows-Chrome-and-Edge.ps1 +++ b/enterprise/Remove-Windows-Chrome-and-Edge.ps1 @@ -66,6 +66,8 @@ function Remove-ExtensionSettings { "companyURL", "productName", "supportEmail", + "supportUrl", + "privacyPolicyUrl", "primaryColor", "logoUrl" ) diff --git a/enterprise/admx/Check-Extension.admx b/enterprise/admx/Check-Extension.admx index d69c2620..a0f8f5e2 100644 --- a/enterprise/admx/Check-Extension.admx +++ b/enterprise/admx/Check-Extension.admx @@ -149,35 +149,62 @@ - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + @@ -333,34 +360,61 @@ - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/enterprise/admx/en-US/Check-Extension.adml b/enterprise/admx/en-US/Check-Extension.adml index 078a8c12..e99d5b73 100644 --- a/enterprise/admx/en-US/Check-Extension.adml +++ b/enterprise/admx/en-US/Check-Extension.adml @@ -201,15 +201,29 @@ Support email address - - This policy specifies the email address users should contact for support with the extension. - - Example: security@contoso.com - - This email address is displayed in the extension interface and help documentation. - - - Primary theme color + + This policy specifies the email address users should contact for support with the extension. + + Example: security@contoso.com + + This email address is displayed in the extension interface and help documentation. + + + Support URL + + This policy specifies the support URL opened by the extension Support link. + + Example: https://support.contoso.com + + + Privacy URL + + This policy specifies the privacy policy URL opened by the extension Privacy link. + + Example: https://contoso.com/privacy + + + Primary theme color This policy specifies the primary theme color for the extension interface using a hex color code. @@ -350,15 +364,29 @@ Support email address (Chrome) - - This policy specifies the email address users should contact for support with the extension in Google Chrome. - - Example: security@contoso.com - - This email address is displayed in the extension interface and help documentation. - - - Primary theme color (Chrome) + + This policy specifies the email address users should contact for support with the extension in Google Chrome. + + Example: security@contoso.com + + This email address is displayed in the extension interface and help documentation. + + + Support URL (Chrome) + + This policy specifies the support URL opened by the extension Support link in Google Chrome. + + Example: https://support.contoso.com + + + Privacy URL (Chrome) + + This policy specifies the privacy policy URL opened by the extension Privacy link in Google Chrome. + + Example: https://contoso.com/privacy + + + Primary theme color (Chrome) This policy specifies the primary theme color for the extension interface using a hex color code in Google Chrome. @@ -419,16 +447,26 @@ - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + @@ -468,16 +506,26 @@ - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + @@ -491,4 +539,4 @@ - \ No newline at end of file + diff --git a/enterprise/firefox/policies.json b/enterprise/firefox/policies.json index be564a92..b98be793 100644 --- a/enterprise/firefox/policies.json +++ b/enterprise/firefox/policies.json @@ -34,6 +34,8 @@ "companyURL": "https://cyberdrain.com/", "productName": "", "supportEmail": "", + "supportUrl": "", + "privacyPolicyUrl": "", "primaryColor": "#F77F00", "logoUrl": "" }, @@ -50,4 +52,4 @@ } } } -} \ No newline at end of file +} diff --git a/enterprise/macos-linux/chrome-managed-policy.json b/enterprise/macos-linux/chrome-managed-policy.json index 58ac0eb7..efaeace8 100644 --- a/enterprise/macos-linux/chrome-managed-policy.json +++ b/enterprise/macos-linux/chrome-managed-policy.json @@ -20,8 +20,11 @@ "enableDebugLogging": false, "customBranding": { "companyName": "", + "companyURL": "https://cyberdrain.com/", "productName": "", "supportEmail": "", + "supportUrl": "", + "privacyPolicyUrl": "", "primaryColor": "#F77F00", "logoUrl": "" }, @@ -37,4 +40,4 @@ } } } -} \ No newline at end of file +} diff --git a/enterprise/macos-linux/edge-managed-policy.json b/enterprise/macos-linux/edge-managed-policy.json index fc44bd0d..c3535504 100644 --- a/enterprise/macos-linux/edge-managed-policy.json +++ b/enterprise/macos-linux/edge-managed-policy.json @@ -20,8 +20,11 @@ "enableDebugLogging": false, "customBranding": { "companyName": "", + "companyURL": "https://cyberdrain.com/", "productName": "", "supportEmail": "", + "supportUrl": "", + "privacyPolicyUrl": "", "primaryColor": "#F77F00", "logoUrl": "" }, @@ -37,4 +40,4 @@ } } } -} \ No newline at end of file +} diff --git a/options/options.html b/options/options.html index 7a69aead..e692024c 100644 --- a/options/options.html +++ b/options/options.html @@ -405,6 +405,22 @@

Company Information

Email address for user support

+ +
+ +

URL opened by the popup Support button

+
+ +
+ +

URL opened by the popup Privacy button

+
diff --git a/options/options.js b/options/options.js index a24dc1f0..f317c566 100644 --- a/options/options.js +++ b/options/options.js @@ -98,6 +98,8 @@ class CheckOptions { this.elements.companyURL = document.getElementById("companyURL"); this.elements.productName = document.getElementById("productName"); this.elements.supportEmail = document.getElementById("supportEmail"); + this.elements.supportUrl = document.getElementById("supportUrl"); + this.elements.privacyPolicyUrl = document.getElementById("privacyPolicyUrl"); this.elements.primaryColor = document.getElementById("primaryColor"); this.elements.logoUrl = document.getElementById("logoUrl"); this.elements.brandingPreview = document.getElementById("brandingPreview"); @@ -187,6 +189,8 @@ class CheckOptions { this.elements.companyName, this.elements.companyURL, this.elements.productName, + this.elements.supportUrl, + this.elements.privacyPolicyUrl, this.elements.primaryColor, this.elements.logoUrl, ]; @@ -476,8 +480,10 @@ class CheckOptions { console.warn("Options: Using fallback branding configuration"); this.brandingConfig = { companyName: "CyberDrain", - companyURL: "https://cyberdrain.com/", + companyURL: "https://cyberdrain.com/", productName: "Check", + supportUrl: "https://support.cyberdrain.com", + privacyPolicyUrl: "https://cyberdrain.com/privacy", primaryColor: "#F77F00", logoUrl: "images/icon48.png", }; @@ -485,8 +491,10 @@ class CheckOptions { console.error("Error loading branding configuration:", error); this.brandingConfig = { companyName: "CyberDrain", - companyURL: "https://cyberdrain.com/", + companyURL: "https://cyberdrain.com/", productName: "Check", + supportUrl: "https://support.cyberdrain.com", + privacyPolicyUrl: "https://cyberdrain.com/privacy", primaryColor: "#F77F00", logoUrl: "images/icon48.png", }; @@ -1014,6 +1022,9 @@ class CheckOptions { this.elements.companyURL.value = this.brandingConfig?.companyURL || ""; this.elements.productName.value = this.brandingConfig?.productName || ""; this.elements.supportEmail.value = this.brandingConfig?.supportEmail || ""; + this.elements.supportUrl.value = this.brandingConfig?.supportUrl || ""; + this.elements.privacyPolicyUrl.value = + this.brandingConfig?.privacyPolicyUrl || ""; this.elements.primaryColor.value = this.brandingConfig?.primaryColor || "#F77F00"; this.elements.logoUrl.value = this.brandingConfig?.logoUrl || ""; @@ -1342,6 +1353,8 @@ class CheckOptions { companyURL: this.elements.companyURL.value, productName: this.elements.productName.value, supportEmail: this.elements.supportEmail.value, + supportUrl: this.elements.supportUrl.value, + privacyPolicyUrl: this.elements.privacyPolicyUrl.value, primaryColor: this.elements.primaryColor.value, logoUrl: this.elements.logoUrl.value, }; @@ -2459,6 +2472,8 @@ class CheckOptions { companyName: "CyberDrain", companyURL: "https://cyberdrain.com/", productName: "Check Enterprise", + supportUrl: "https://support.cyberdrain.com", + privacyPolicyUrl: "https://cyberdrain.com/privacy", primaryColor: "#F77F00", logoUrl: "https://cyberdrain.com/images/favicon_hu_20e77b0e20e363e.png", @@ -2601,6 +2616,8 @@ class CheckOptions { companyURL: this.elements.companyURL, productName: this.elements.productName, supportEmail: this.elements.supportEmail, + supportUrl: this.elements.supportUrl, + privacyPolicyUrl: this.elements.privacyPolicyUrl, primaryColor: this.elements.primaryColor, logoUrl: this.elements.logoUrl, }; diff --git a/scripts/modules/config-manager.js b/scripts/modules/config-manager.js index 7f869395..3ff3ea9e 100644 --- a/scripts/modules/config-manager.js +++ b/scripts/modules/config-manager.js @@ -116,7 +116,10 @@ export class ConfigManager { // Custom branding (matches managed_schema.json structure) customBranding: { companyName: "CyberDrain", + companyURL: "https://cyberdrain.com/", productName: "Check Enterprise", + supportUrl: "https://support.cyberdrain.com", + privacyPolicyUrl: "https://cyberdrain.com/privacy", primaryColor: "#F77F00", logoUrl: "https://cyberdrain.com/images/favicon_hu_20e77b0e20e363e.png", diff --git a/tests/config-persistence.test.js b/tests/config-persistence.test.js index b991d5fc..aa5efed5 100644 --- a/tests/config-persistence.test.js +++ b/tests/config-persistence.test.js @@ -235,3 +235,48 @@ test('ConfigManager - merge precedence', async (t) => { delete global.fetch; teardownGlobalChrome(); }); + +test('ConfigManager - branding links for manual and enterprise config', async (t) => { + const chromeMock = setupGlobalChrome(); + + global.fetch = async () => ({ + ok: false, + status: 404 + }); + + const { ConfigManager } = await import('../scripts/modules/config-manager.js'); + + await t.test('should honor explicit support/privacy URLs from enterprise custom branding', async () => { + chromeMock.storage.managed.set({ + customBranding: { + companyURL: 'https://enterprise.example', + supportUrl: 'https://enterprise.example/support', + privacyPolicyUrl: 'https://enterprise.example/privacy' + } + }); + + const configManager = new ConfigManager(); + const branding = await configManager.getFinalBrandingConfig(); + + assert.strictEqual(branding.supportUrl, 'https://enterprise.example/support'); + assert.strictEqual(branding.privacyPolicyUrl, 'https://enterprise.example/privacy'); + }); + + await t.test('should derive support/privacy links from supportEmail/companyURL when URLs are not set', async () => { + await chromeMock.storage.local.set({ + brandingConfig: { + companyURL: 'https://manual.example', + supportEmail: 'help@manual.example' + } + }); + + const configManager = new ConfigManager(); + const branding = await configManager.getFinalBrandingConfig(); + + assert.strictEqual(branding.supportUrl, 'mailto:help@manual.example'); + assert.strictEqual(branding.privacyPolicyUrl, 'https://manual.example'); + }); + + delete global.fetch; + teardownGlobalChrome(); +}); From 3afc8a4ddb6ad68c11808ed9310881fb28ddc57d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 28 Feb 2026 05:32:47 +0000 Subject: [PATCH 05/13] feat: add configurable about url for popup footer and enterprise policies Co-authored-by: Zacgoose <107489668+Zacgoose@users.noreply.github.com> --- config/branding.json | 1 + config/managed_schema.json | 7 ++++++ enterprise/Check-Extension-Policy.reg | 2 ++ enterprise/Deploy-Windows-Chrome-and-Edge.ps1 | 2 ++ enterprise/Remove-Windows-Chrome-and-Edge.ps1 | 1 + enterprise/admx/Check-Extension.admx | 18 ++++++++++++++ enterprise/admx/en-US/Check-Extension.adml | 24 +++++++++++++++++++ enterprise/firefox/policies.json | 1 + .../macos-linux/chrome-managed-policy.json | 1 + .../macos-linux/edge-managed-policy.json | 1 + options/options.html | 8 +++++++ options/options.js | 8 +++++++ popup/popup.js | 9 ++++++- scripts/modules/config-manager.js | 2 ++ tests/config-persistence.test.js | 7 ++++-- 15 files changed, 89 insertions(+), 3 deletions(-) diff --git a/config/branding.json b/config/branding.json index 26426b5f..25b40943 100644 --- a/config/branding.json +++ b/config/branding.json @@ -4,6 +4,7 @@ "productName": "Check", "supportUrl": "https://support.cyberdrain.com", "privacyPolicyUrl": "https://cyberdrain.com/privacy", + "aboutUrl": "https://cyberdrain.com/about", "version": "1.1.0", "description": "Protect against phishing attacks targeting Microsoft 365 login pages with enterprise-grade detection", "branding": { diff --git a/config/managed_schema.json b/config/managed_schema.json index 96d32089..e3a27b63 100644 --- a/config/managed_schema.json +++ b/config/managed_schema.json @@ -159,6 +159,13 @@ "format": "uri", "default": "" }, + "aboutUrl": { + "title": "About URL", + "description": "URL opened by the popup About link", + "type": "string", + "format": "uri", + "default": "" + }, "primaryColor": { "title": "Primary Color", "description": "Primary theme color (hex code)", diff --git a/enterprise/Check-Extension-Policy.reg b/enterprise/Check-Extension-Policy.reg index d94bdb5f..3df93e0b 100644 --- a/enterprise/Check-Extension-Policy.reg +++ b/enterprise/Check-Extension-Policy.reg @@ -28,6 +28,7 @@ Windows Registry Editor Version 5.00 "supportEmail"="" "supportUrl"="" "privacyPolicyUrl"="" +"aboutUrl"="" "primaryColor"="#F77F00" "logoUrl"="" @@ -63,6 +64,7 @@ Windows Registry Editor Version 5.00 "supportEmail"="" "supportUrl"="" "privacyPolicyUrl"="" +"aboutUrl"="" "primaryColor"="#F77F00" "logoUrl"="" diff --git a/enterprise/Deploy-Windows-Chrome-and-Edge.ps1 b/enterprise/Deploy-Windows-Chrome-and-Edge.ps1 index b5320852..22b91f87 100644 --- a/enterprise/Deploy-Windows-Chrome-and-Edge.ps1 +++ b/enterprise/Deploy-Windows-Chrome-and-Edge.ps1 @@ -36,6 +36,7 @@ $productName = "Check - Phishing Protection" # This will set the "Product Name" $supportEmail = "" # This will set the "Support Email" option in the Custom Branding settings; default is blank. $supportUrl = "" # This will set the "Support URL" option in the Custom Branding settings; default is blank. $privacyPolicyUrl = "" # This will set the "Privacy URL" option in the Custom Branding settings; default is blank. +$aboutUrl = "" # This will set the "About URL" option in the Custom Branding settings; default is blank. $primaryColor = "#F77F00" # This will set the "Primary Color" option in the Custom Branding settings; default is "#F77F00"; must be a valid hex color code (e.g., #FFFFFF). $logoUrl = "" # This will set the "Logo URL" option in the Custom Branding settings; default is blank. Must be a valid URL including the protocol (e.g., https://example.com/logo.png); protocol must be https; recommended size is 48x48 pixels with a maximum of 128x128. @@ -97,6 +98,7 @@ function Configure-ExtensionSettings { New-ItemProperty -Path $customBrandingKey -Name "supportEmail" -PropertyType String -Value $supportEmail -Force | Out-Null New-ItemProperty -Path $customBrandingKey -Name "supportUrl" -PropertyType String -Value $supportUrl -Force | Out-Null New-ItemProperty -Path $customBrandingKey -Name "privacyPolicyUrl" -PropertyType String -Value $privacyPolicyUrl -Force | Out-Null + New-ItemProperty -Path $customBrandingKey -Name "aboutUrl" -PropertyType String -Value $aboutUrl -Force | Out-Null New-ItemProperty -Path $customBrandingKey -Name "primaryColor" -PropertyType String -Value $primaryColor -Force | Out-Null New-ItemProperty -Path $customBrandingKey -Name "logoUrl" -PropertyType String -Value $logoUrl -Force | Out-Null diff --git a/enterprise/Remove-Windows-Chrome-and-Edge.ps1 b/enterprise/Remove-Windows-Chrome-and-Edge.ps1 index a3b65dbf..b05fefc2 100644 --- a/enterprise/Remove-Windows-Chrome-and-Edge.ps1 +++ b/enterprise/Remove-Windows-Chrome-and-Edge.ps1 @@ -68,6 +68,7 @@ function Remove-ExtensionSettings { "supportEmail", "supportUrl", "privacyPolicyUrl", + "aboutUrl", "primaryColor", "logoUrl" ) diff --git a/enterprise/admx/Check-Extension.admx b/enterprise/admx/Check-Extension.admx index a0f8f5e2..dc6a89a5 100644 --- a/enterprise/admx/Check-Extension.admx +++ b/enterprise/admx/Check-Extension.admx @@ -203,6 +203,15 @@ + + + + + + + + + @@ -414,6 +423,15 @@ + + + + + + + + + diff --git a/enterprise/admx/en-US/Check-Extension.adml b/enterprise/admx/en-US/Check-Extension.adml index e99d5b73..483261fd 100644 --- a/enterprise/admx/en-US/Check-Extension.adml +++ b/enterprise/admx/en-US/Check-Extension.adml @@ -222,6 +222,13 @@ Example: https://contoso.com/privacy + + About URL + + This policy specifies the about URL opened by the extension About link. + + Example: https://contoso.com/about + Primary theme color @@ -385,6 +392,13 @@ Example: https://contoso.com/privacy + + About URL (Chrome) + + This policy specifies the about URL opened by the extension About link in Google Chrome. + + Example: https://contoso.com/about + Primary theme color (Chrome) @@ -462,6 +476,11 @@ + + + + + @@ -521,6 +540,11 @@ + + + + + diff --git a/enterprise/firefox/policies.json b/enterprise/firefox/policies.json index b98be793..4b8013a8 100644 --- a/enterprise/firefox/policies.json +++ b/enterprise/firefox/policies.json @@ -36,6 +36,7 @@ "supportEmail": "", "supportUrl": "", "privacyPolicyUrl": "", + "aboutUrl": "", "primaryColor": "#F77F00", "logoUrl": "" }, diff --git a/enterprise/macos-linux/chrome-managed-policy.json b/enterprise/macos-linux/chrome-managed-policy.json index efaeace8..caec2369 100644 --- a/enterprise/macos-linux/chrome-managed-policy.json +++ b/enterprise/macos-linux/chrome-managed-policy.json @@ -25,6 +25,7 @@ "supportEmail": "", "supportUrl": "", "privacyPolicyUrl": "", + "aboutUrl": "", "primaryColor": "#F77F00", "logoUrl": "" }, diff --git a/enterprise/macos-linux/edge-managed-policy.json b/enterprise/macos-linux/edge-managed-policy.json index c3535504..778e5feb 100644 --- a/enterprise/macos-linux/edge-managed-policy.json +++ b/enterprise/macos-linux/edge-managed-policy.json @@ -25,6 +25,7 @@ "supportEmail": "", "supportUrl": "", "privacyPolicyUrl": "", + "aboutUrl": "", "primaryColor": "#F77F00", "logoUrl": "" }, diff --git a/options/options.html b/options/options.html index e692024c..5638330a 100644 --- a/options/options.html +++ b/options/options.html @@ -421,6 +421,14 @@

Company Information

URL opened by the popup Privacy button

+ +
+ +

URL opened by the popup About button (leave empty to use extension About page)

+
diff --git a/options/options.js b/options/options.js index f317c566..8884cd1b 100644 --- a/options/options.js +++ b/options/options.js @@ -100,6 +100,7 @@ class CheckOptions { this.elements.supportEmail = document.getElementById("supportEmail"); this.elements.supportUrl = document.getElementById("supportUrl"); this.elements.privacyPolicyUrl = document.getElementById("privacyPolicyUrl"); + this.elements.aboutUrl = document.getElementById("aboutUrl"); this.elements.primaryColor = document.getElementById("primaryColor"); this.elements.logoUrl = document.getElementById("logoUrl"); this.elements.brandingPreview = document.getElementById("brandingPreview"); @@ -191,6 +192,7 @@ class CheckOptions { this.elements.productName, this.elements.supportUrl, this.elements.privacyPolicyUrl, + this.elements.aboutUrl, this.elements.primaryColor, this.elements.logoUrl, ]; @@ -484,6 +486,7 @@ class CheckOptions { productName: "Check", supportUrl: "https://support.cyberdrain.com", privacyPolicyUrl: "https://cyberdrain.com/privacy", + aboutUrl: "https://cyberdrain.com/about", primaryColor: "#F77F00", logoUrl: "images/icon48.png", }; @@ -495,6 +498,7 @@ class CheckOptions { productName: "Check", supportUrl: "https://support.cyberdrain.com", privacyPolicyUrl: "https://cyberdrain.com/privacy", + aboutUrl: "https://cyberdrain.com/about", primaryColor: "#F77F00", logoUrl: "images/icon48.png", }; @@ -1025,6 +1029,7 @@ class CheckOptions { this.elements.supportUrl.value = this.brandingConfig?.supportUrl || ""; this.elements.privacyPolicyUrl.value = this.brandingConfig?.privacyPolicyUrl || ""; + this.elements.aboutUrl.value = this.brandingConfig?.aboutUrl || ""; this.elements.primaryColor.value = this.brandingConfig?.primaryColor || "#F77F00"; this.elements.logoUrl.value = this.brandingConfig?.logoUrl || ""; @@ -1355,6 +1360,7 @@ class CheckOptions { supportEmail: this.elements.supportEmail.value, supportUrl: this.elements.supportUrl.value, privacyPolicyUrl: this.elements.privacyPolicyUrl.value, + aboutUrl: this.elements.aboutUrl.value, primaryColor: this.elements.primaryColor.value, logoUrl: this.elements.logoUrl.value, }; @@ -2474,6 +2480,7 @@ class CheckOptions { productName: "Check Enterprise", supportUrl: "https://support.cyberdrain.com", privacyPolicyUrl: "https://cyberdrain.com/privacy", + aboutUrl: "https://cyberdrain.com/about", primaryColor: "#F77F00", logoUrl: "https://cyberdrain.com/images/favicon_hu_20e77b0e20e363e.png", @@ -2618,6 +2625,7 @@ class CheckOptions { supportEmail: this.elements.supportEmail, supportUrl: this.elements.supportUrl, privacyPolicyUrl: this.elements.privacyPolicyUrl, + aboutUrl: this.elements.aboutUrl, primaryColor: this.elements.primaryColor, logoUrl: this.elements.logoUrl, }; diff --git a/popup/popup.js b/popup/popup.js index 7d841e62..262a9de8 100644 --- a/popup/popup.js +++ b/popup/popup.js @@ -389,6 +389,7 @@ class CheckPopup { logoUrl: "images/icon32.png", supportUrl: "https://support.cyberdrain.com", privacyPolicyUrl: "https://cyberdrain.com/privacy", + aboutUrl: "https://cyberdrain.com/about", primaryColor: "#F77F00", }; } catch (error) { @@ -400,6 +401,7 @@ class CheckPopup { logoUrl: "images/icon32.png", supportUrl: "https://support.cyberdrain.com", privacyPolicyUrl: "https://cyberdrain.com/privacy", + aboutUrl: "https://cyberdrain.com/about", primaryColor: "#F77F00", }; } @@ -450,6 +452,9 @@ class CheckPopup { if (this.brandingConfig.privacyPolicyUrl) { this.elements.privacyLink.href = this.brandingConfig.privacyPolicyUrl; } + if (this.brandingConfig.aboutUrl) { + this.elements.aboutLink.href = this.brandingConfig.aboutUrl; + } // Apply primary color if available if (this.brandingConfig.primaryColor) { @@ -1093,7 +1098,9 @@ class CheckPopup { url = this.brandingConfig.privacyPolicyUrl; break; case "about": - url = chrome.runtime.getURL("options/options.html#about"); + url = + this.brandingConfig.aboutUrl || + chrome.runtime.getURL("options/options.html#about"); break; case "company": url = this.brandingConfig.companyURL; diff --git a/scripts/modules/config-manager.js b/scripts/modules/config-manager.js index 3ff3ea9e..31ba61ba 100644 --- a/scripts/modules/config-manager.js +++ b/scripts/modules/config-manager.js @@ -120,6 +120,7 @@ export class ConfigManager { productName: "Check Enterprise", supportUrl: "https://support.cyberdrain.com", privacyPolicyUrl: "https://cyberdrain.com/privacy", + aboutUrl: "https://cyberdrain.com/about", primaryColor: "#F77F00", logoUrl: "https://cyberdrain.com/images/favicon_hu_20e77b0e20e363e.png", @@ -336,6 +337,7 @@ export class ConfigManager { supportEmail: "support@check.com", supportUrl: "https://support.check.com", privacyPolicyUrl: "https://check.com/privacy", + aboutUrl: "https://check.com/about", termsOfServiceUrl: "https://check.com/terms", // Customizable text diff --git a/tests/config-persistence.test.js b/tests/config-persistence.test.js index aa5efed5..43238b70 100644 --- a/tests/config-persistence.test.js +++ b/tests/config-persistence.test.js @@ -246,12 +246,13 @@ test('ConfigManager - branding links for manual and enterprise config', async (t const { ConfigManager } = await import('../scripts/modules/config-manager.js'); - await t.test('should honor explicit support/privacy URLs from enterprise custom branding', async () => { + await t.test('should honor explicit support/privacy/about URLs from enterprise custom branding', async () => { chromeMock.storage.managed.set({ customBranding: { companyURL: 'https://enterprise.example', supportUrl: 'https://enterprise.example/support', - privacyPolicyUrl: 'https://enterprise.example/privacy' + privacyPolicyUrl: 'https://enterprise.example/privacy', + aboutUrl: 'https://enterprise.example/about' } }); @@ -260,6 +261,7 @@ test('ConfigManager - branding links for manual and enterprise config', async (t assert.strictEqual(branding.supportUrl, 'https://enterprise.example/support'); assert.strictEqual(branding.privacyPolicyUrl, 'https://enterprise.example/privacy'); + assert.strictEqual(branding.aboutUrl, 'https://enterprise.example/about'); }); await t.test('should derive support/privacy links from supportEmail/companyURL when URLs are not set', async () => { @@ -275,6 +277,7 @@ test('ConfigManager - branding links for manual and enterprise config', async (t assert.strictEqual(branding.supportUrl, 'mailto:help@manual.example'); assert.strictEqual(branding.privacyPolicyUrl, 'https://manual.example'); + assert.strictEqual(branding.aboutUrl, 'https://check.com/about'); }); delete global.fetch; From 5b89c4c90b2e7b4b2292810c84e4be375cd321a9 Mon Sep 17 00:00:00 2001 From: Zacgoose <107489668+Zacgoose@users.noreply.github.com> Date: Sat, 28 Feb 2026 13:35:40 +0800 Subject: [PATCH 06/13] remove default URL --- config/branding.json | 2 +- options/options.js | 6 +++--- popup/popup.js | 4 ++-- scripts/modules/config-manager.js | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/config/branding.json b/config/branding.json index 25b40943..0d6ba246 100644 --- a/config/branding.json +++ b/config/branding.json @@ -4,7 +4,7 @@ "productName": "Check", "supportUrl": "https://support.cyberdrain.com", "privacyPolicyUrl": "https://cyberdrain.com/privacy", - "aboutUrl": "https://cyberdrain.com/about", + "aboutUrl": "", "version": "1.1.0", "description": "Protect against phishing attacks targeting Microsoft 365 login pages with enterprise-grade detection", "branding": { diff --git a/options/options.js b/options/options.js index 8884cd1b..ae981e28 100644 --- a/options/options.js +++ b/options/options.js @@ -486,7 +486,7 @@ class CheckOptions { productName: "Check", supportUrl: "https://support.cyberdrain.com", privacyPolicyUrl: "https://cyberdrain.com/privacy", - aboutUrl: "https://cyberdrain.com/about", + aboutUrl: "", primaryColor: "#F77F00", logoUrl: "images/icon48.png", }; @@ -498,7 +498,7 @@ class CheckOptions { productName: "Check", supportUrl: "https://support.cyberdrain.com", privacyPolicyUrl: "https://cyberdrain.com/privacy", - aboutUrl: "https://cyberdrain.com/about", + aboutUrl: "", primaryColor: "#F77F00", logoUrl: "images/icon48.png", }; @@ -2480,7 +2480,7 @@ class CheckOptions { productName: "Check Enterprise", supportUrl: "https://support.cyberdrain.com", privacyPolicyUrl: "https://cyberdrain.com/privacy", - aboutUrl: "https://cyberdrain.com/about", + aboutUrl: "", primaryColor: "#F77F00", logoUrl: "https://cyberdrain.com/images/favicon_hu_20e77b0e20e363e.png", diff --git a/popup/popup.js b/popup/popup.js index 262a9de8..7951c509 100644 --- a/popup/popup.js +++ b/popup/popup.js @@ -389,7 +389,7 @@ class CheckPopup { logoUrl: "images/icon32.png", supportUrl: "https://support.cyberdrain.com", privacyPolicyUrl: "https://cyberdrain.com/privacy", - aboutUrl: "https://cyberdrain.com/about", + aboutUrl: "", primaryColor: "#F77F00", }; } catch (error) { @@ -401,7 +401,7 @@ class CheckPopup { logoUrl: "images/icon32.png", supportUrl: "https://support.cyberdrain.com", privacyPolicyUrl: "https://cyberdrain.com/privacy", - aboutUrl: "https://cyberdrain.com/about", + aboutUrl: "", primaryColor: "#F77F00", }; } diff --git a/scripts/modules/config-manager.js b/scripts/modules/config-manager.js index 31ba61ba..93a8ceeb 100644 --- a/scripts/modules/config-manager.js +++ b/scripts/modules/config-manager.js @@ -120,7 +120,7 @@ export class ConfigManager { productName: "Check Enterprise", supportUrl: "https://support.cyberdrain.com", privacyPolicyUrl: "https://cyberdrain.com/privacy", - aboutUrl: "https://cyberdrain.com/about", + aboutUrl: "", primaryColor: "#F77F00", logoUrl: "https://cyberdrain.com/images/favicon_hu_20e77b0e20e363e.png", From ba3cd4a3f9dbc6f92acfda105ab97d3938d591a8 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 28 Feb 2026 05:47:26 +0000 Subject: [PATCH 07/13] refactor: remove obsolete companyurl branding configuration Co-authored-by: Zacgoose <107489668+Zacgoose@users.noreply.github.com> --- config/branding.json | 1 - config/managed_schema.json | 6 ---- docs/settings/branding.md | 8 ++--- enterprise/Check-Extension-Policy.reg | 2 -- enterprise/Deploy-Windows-Chrome-and-Edge.ps1 | 2 -- enterprise/Remove-Windows-Chrome-and-Edge.ps1 | 1 - enterprise/Test-Extension-Policy.ps1 | 1 - enterprise/admx/Check-Extension.admx | 18 ---------- enterprise/admx/en-US/Check-Extension.adml | 36 +++---------------- enterprise/firefox/policies.json | 1 - .../macos-linux/chrome-managed-policy.json | 1 - .../macos-linux/edge-managed-policy.json | 7 ++-- options/options.html | 8 ----- options/options.js | 12 ------- popup/popup.html | 2 +- popup/popup.js | 9 ----- scripts/modules/config-manager.js | 6 +--- tests/config-persistence.test.js | 6 ++-- 18 files changed, 13 insertions(+), 114 deletions(-) diff --git a/config/branding.json b/config/branding.json index 0d6ba246..1e54978d 100644 --- a/config/branding.json +++ b/config/branding.json @@ -1,6 +1,5 @@ { "companyName": "CyberDrain", - "companyURL": "https://cyberdrain.com/", "productName": "Check", "supportUrl": "https://support.cyberdrain.com", "privacyPolicyUrl": "https://cyberdrain.com/privacy", diff --git a/config/managed_schema.json b/config/managed_schema.json index e3a27b63..5cc63bcb 100644 --- a/config/managed_schema.json +++ b/config/managed_schema.json @@ -125,12 +125,6 @@ "description": "Company name to display in the extension", "type": "string", "default": "" - }, - "companyURL": { - "title": "Company URL", - "description": "Company URL used in the extension", - "type": "string", - "default": "https://cyberdrain.com/" }, "productName": { "title": "Product Name", diff --git a/docs/settings/branding.md b/docs/settings/branding.md index a4dce7b6..60b0918c 100644 --- a/docs/settings/branding.md +++ b/docs/settings/branding.md @@ -30,9 +30,8 @@ If some settings do not appear on your version, it means your organization's IT You can customize the following properties: 1. **Company Name** - Enter your organization's name. This appears in the extension interface and blocked page messages (displayed as "Protected by \[Company Name]"). -2. **Company URL** - Your company website URL (e.g., `https://yourcompany.com`). Used in extension branding and contact information. _(Firefox: required, Chrome/Edge: optional)_ -3. **Product Name** - What you want to call the extension (like "Contoso Security" instead of "Check"). This replaces the default "Check" branding throughout the interface. -4. **Support Email** - Where users should go for help. This email address is used in the "Contact Admin" button when phishing sites are blocked. +2. **Product Name** - What you want to call the extension (like "Contoso Security" instead of "Check"). This replaces the default "Check" branding throughout the interface. +3. **Support Email** - Where users should go for help. This email address is used in the "Contact Admin" button when phishing sites are blocked. ## Visual Customization @@ -106,7 +105,6 @@ For Firefox deployments, configure branding through the `policies.json` file: "check@cyberdrain.com": { "customBranding": { "companyName": "Your Company", - "companyURL": "https://yourcompany.com", "productName": "Security Extension", "supportEmail": "security@example.com", "primaryColor": "#FF5733", @@ -201,7 +199,6 @@ Enterprise policies always take precedence over manual settings. * Uses extension ID: `check@cyberdrain.com` * Configuration is managed through `policies.json` file -* Supports additional `companyURL` property * Policies file location varies by operating system ### Chrome & Edge @@ -305,7 +302,6 @@ Logo URL: https://assets.globalmfg.com/security/gmi-logo-48.png "check@cyberdrain.com": { "customBranding": { "companyName": "Contoso Corporation", - "companyURL": "https://contoso.com", "productName": "Contoso Defender", "logoUrl": "https://contoso.com/assets/logo.png", "primaryColor": "#0078D4", diff --git a/enterprise/Check-Extension-Policy.reg b/enterprise/Check-Extension-Policy.reg index 3df93e0b..9f2f0044 100644 --- a/enterprise/Check-Extension-Policy.reg +++ b/enterprise/Check-Extension-Policy.reg @@ -23,7 +23,6 @@ Windows Registry Editor Version 5.00 ; Custom branding configuration [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Edge\3rdparty\extensions\knepjpocdagponkonnbggpcnhnaikajg\policy\customBranding] "companyName"="CyberDrain" -"companyURL"="https://cyberdrain.com/" "productName"="Check" "supportEmail"="" "supportUrl"="" @@ -59,7 +58,6 @@ Windows Registry Editor Version 5.00 ; Custom branding configuration for Chrome [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome\3rdparty\extensions\benimdeioplgkhanklclahllklceahbe\policy\customBranding] "companyName"="CyberDrain" -"companyURL"="https://cyberdrain.com/" "productName"="Check" "supportEmail"="" "supportUrl"="" diff --git a/enterprise/Deploy-Windows-Chrome-and-Edge.ps1 b/enterprise/Deploy-Windows-Chrome-and-Edge.ps1 index 22b91f87..1e991b78 100644 --- a/enterprise/Deploy-Windows-Chrome-and-Edge.ps1 +++ b/enterprise/Deploy-Windows-Chrome-and-Edge.ps1 @@ -31,7 +31,6 @@ $webhookEvents = @() # This will set the "Event Types" to send to the webhook; d # Custom Branding Settings $companyName = "CyberDrain" # This will set the "Company Name" option in the Custom Branding settings; default is "CyberDrain". -$companyURL = "https://cyberdrain.com" # This will set the Company URL option in the Custom Branding settings; default is "https://cyberdrain.com"; Must include the protocol (e.g., https://). $productName = "Check - Phishing Protection" # This will set the "Product Name" option in the Custom Branding settings; default is "Check - Phishing Protection". $supportEmail = "" # This will set the "Support Email" option in the Custom Branding settings; default is blank. $supportUrl = "" # This will set the "Support URL" option in the Custom Branding settings; default is blank. @@ -93,7 +92,6 @@ function Configure-ExtensionSettings { # Set custom branding settings New-ItemProperty -Path $customBrandingKey -Name "companyName" -PropertyType String -Value $companyName -Force | Out-Null - New-ItemProperty -Path $customBrandingKey -Name "companyURL" -PropertyType String -Value $companyURL -Force | Out-Null New-ItemProperty -Path $customBrandingKey -Name "productName" -PropertyType String -Value $productName -Force | Out-Null New-ItemProperty -Path $customBrandingKey -Name "supportEmail" -PropertyType String -Value $supportEmail -Force | Out-Null New-ItemProperty -Path $customBrandingKey -Name "supportUrl" -PropertyType String -Value $supportUrl -Force | Out-Null diff --git a/enterprise/Remove-Windows-Chrome-and-Edge.ps1 b/enterprise/Remove-Windows-Chrome-and-Edge.ps1 index b05fefc2..b221b231 100644 --- a/enterprise/Remove-Windows-Chrome-and-Edge.ps1 +++ b/enterprise/Remove-Windows-Chrome-and-Edge.ps1 @@ -63,7 +63,6 @@ function Remove-ExtensionSettings { if (Test-Path $customBrandingKey) { $brandingPropertiesToRemove = @( "companyName", - "companyURL", "productName", "supportEmail", "supportUrl", diff --git a/enterprise/Test-Extension-Policy.ps1 b/enterprise/Test-Extension-Policy.ps1 index 6a07d23e..eaa3218a 100644 --- a/enterprise/Test-Extension-Policy.ps1 +++ b/enterprise/Test-Extension-Policy.ps1 @@ -26,7 +26,6 @@ $testConfig = @{ # Custom branding test values $testBranding = @{ companyName = "Test Company" - companyURL = "https://example.com" productName = "Test Product" supportEmail = "test@example.com" primaryColor = "#FF6B00" diff --git a/enterprise/admx/Check-Extension.admx b/enterprise/admx/Check-Extension.admx index dc6a89a5..2c937226 100644 --- a/enterprise/admx/Check-Extension.admx +++ b/enterprise/admx/Check-Extension.admx @@ -158,15 +158,6 @@ - - - - - - - - - @@ -378,15 +369,6 @@ - - - - - - - - - diff --git a/enterprise/admx/en-US/Check-Extension.adml b/enterprise/admx/en-US/Check-Extension.adml index 483261fd..3a217d8b 100644 --- a/enterprise/admx/en-US/Check-Extension.adml +++ b/enterprise/admx/en-US/Check-Extension.adml @@ -181,16 +181,7 @@ The company name appears in the extension popup and settings pages. - - Company URL - - This policy specifies the company URL used in the extension for branding and navigation purposes. - - Example: https://contoso.com - - The company URL is used for linking back to the company website from the extension interface. - - + Product name This policy specifies a custom product name for the extension. @@ -351,16 +342,7 @@ The company name appears in the extension popup and settings pages. - - Company URL (Chrome) - - This policy specifies the company URL used in the extension for branding and navigation purposes in Google Chrome. - - Example: https://contoso.com - - The company URL is used for linking back to the company website from the extension interface. - - + Product name (Chrome) This policy specifies a custom product name for the extension in Google Chrome. @@ -451,12 +433,7 @@ - - - - - - + @@ -515,12 +492,7 @@ - - - - - - + diff --git a/enterprise/firefox/policies.json b/enterprise/firefox/policies.json index 4b8013a8..16f7e491 100644 --- a/enterprise/firefox/policies.json +++ b/enterprise/firefox/policies.json @@ -31,7 +31,6 @@ "enableDebugLogging": false, "customBranding": { "companyName": "", - "companyURL": "https://cyberdrain.com/", "productName": "", "supportEmail": "", "supportUrl": "", diff --git a/enterprise/macos-linux/chrome-managed-policy.json b/enterprise/macos-linux/chrome-managed-policy.json index caec2369..190df728 100644 --- a/enterprise/macos-linux/chrome-managed-policy.json +++ b/enterprise/macos-linux/chrome-managed-policy.json @@ -20,7 +20,6 @@ "enableDebugLogging": false, "customBranding": { "companyName": "", - "companyURL": "https://cyberdrain.com/", "productName": "", "supportEmail": "", "supportUrl": "", diff --git a/enterprise/macos-linux/edge-managed-policy.json b/enterprise/macos-linux/edge-managed-policy.json index 778e5feb..acdee00a 100644 --- a/enterprise/macos-linux/edge-managed-policy.json +++ b/enterprise/macos-linux/edge-managed-policy.json @@ -18,10 +18,9 @@ "customRulesUrl": "", "updateInterval": 24, "enableDebugLogging": false, - "customBranding": { - "companyName": "", - "companyURL": "https://cyberdrain.com/", - "productName": "", + "customBranding": { + "companyName": "", + "productName": "", "supportEmail": "", "supportUrl": "", "privacyPolicyUrl": "", diff --git a/options/options.html b/options/options.html index 5638330a..0162651f 100644 --- a/options/options.html +++ b/options/options.html @@ -382,14 +382,6 @@

Company Information

Company name displayed in the extension

-
- -

Your company website URL

-
-
- CyberDrain + CyberDrain
diff --git a/popup/popup.js b/popup/popup.js index 7951c509..a8d88812 100644 --- a/popup/popup.js +++ b/popup/popup.js @@ -67,7 +67,6 @@ class CheckPopup { this.elements.aboutLink = document.getElementById("aboutLink"); this.elements.companyBranding = document.getElementById("companyBranding"); this.elements.companyName = document.getElementById("companyName"); - this.elements.companyLink = document.getElementById("companyLink"); // Debug section this.elements.debugSection = document.getElementById("debugSection"); @@ -144,9 +143,6 @@ class CheckPopup { this.elements.aboutLink.addEventListener("click", (e) => this.handleFooterLink(e, "about") ); - this.elements.companyLink.addEventListener("click", (e) => - this.handleFooterLink(e, "company") - ); // Notification close listener this.elements.notificationClose.addEventListener("click", () => @@ -384,7 +380,6 @@ class CheckPopup { console.warn("Popup: Using fallback branding configuration"); this.brandingConfig = { companyName: "CyberDrain", - companyURL: "https://cyberdrain.com/", productName: "Check", logoUrl: "images/icon32.png", supportUrl: "https://support.cyberdrain.com", @@ -396,7 +391,6 @@ class CheckPopup { console.error("Error loading branding configuration:", error); this.brandingConfig = { companyName: "CyberDrain", - companyURL: "https://cyberdrain.com/", productName: "Check", logoUrl: "images/icon32.png", supportUrl: "https://support.cyberdrain.com", @@ -1102,9 +1096,6 @@ class CheckPopup { this.brandingConfig.aboutUrl || chrome.runtime.getURL("options/options.html#about"); break; - case "company": - url = this.brandingConfig.companyURL; - break; } if (url) { diff --git a/scripts/modules/config-manager.js b/scripts/modules/config-manager.js index 93a8ceeb..1b5f1af4 100644 --- a/scripts/modules/config-manager.js +++ b/scripts/modules/config-manager.js @@ -116,7 +116,6 @@ export class ConfigManager { // Custom branding (matches managed_schema.json structure) customBranding: { companyName: "CyberDrain", - companyURL: "https://cyberdrain.com/", productName: "Check Enterprise", supportUrl: "https://support.cyberdrain.com", privacyPolicyUrl: "https://cyberdrain.com/privacy", @@ -489,13 +488,10 @@ export class ConfigManager { finalBranding.genericWebhook = currentConfig.genericWebhook; } - // Derive support/privacy URLs when only partial branding is configured + // Derive support URL when only partial branding is configured if (!finalBranding.supportUrl && finalBranding.supportEmail) { finalBranding.supportUrl = `mailto:${finalBranding.supportEmail}`; } - if (!finalBranding.privacyPolicyUrl && finalBranding.companyURL) { - finalBranding.privacyPolicyUrl = finalBranding.companyURL; - } return finalBranding; } diff --git a/tests/config-persistence.test.js b/tests/config-persistence.test.js index 43238b70..5320d06b 100644 --- a/tests/config-persistence.test.js +++ b/tests/config-persistence.test.js @@ -249,7 +249,6 @@ test('ConfigManager - branding links for manual and enterprise config', async (t await t.test('should honor explicit support/privacy/about URLs from enterprise custom branding', async () => { chromeMock.storage.managed.set({ customBranding: { - companyURL: 'https://enterprise.example', supportUrl: 'https://enterprise.example/support', privacyPolicyUrl: 'https://enterprise.example/privacy', aboutUrl: 'https://enterprise.example/about' @@ -264,10 +263,9 @@ test('ConfigManager - branding links for manual and enterprise config', async (t assert.strictEqual(branding.aboutUrl, 'https://enterprise.example/about'); }); - await t.test('should derive support/privacy links from supportEmail/companyURL when URLs are not set', async () => { + await t.test('should derive support link from supportEmail when URLs are not set', async () => { await chromeMock.storage.local.set({ brandingConfig: { - companyURL: 'https://manual.example', supportEmail: 'help@manual.example' } }); @@ -276,7 +274,7 @@ test('ConfigManager - branding links for manual and enterprise config', async (t const branding = await configManager.getFinalBrandingConfig(); assert.strictEqual(branding.supportUrl, 'mailto:help@manual.example'); - assert.strictEqual(branding.privacyPolicyUrl, 'https://manual.example'); + assert.strictEqual(branding.privacyPolicyUrl, 'https://check.com/privacy'); assert.strictEqual(branding.aboutUrl, 'https://check.com/about'); }); From a0a92cf6fd9dc0a340275ece0479cee63fe6f333 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 28 Feb 2026 05:50:11 +0000 Subject: [PATCH 08/13] test: tie privacy/about fallback assertions to default branding config Co-authored-by: Zacgoose <107489668+Zacgoose@users.noreply.github.com> --- tests/config-persistence.test.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/config-persistence.test.js b/tests/config-persistence.test.js index 5320d06b..e0630e07 100644 --- a/tests/config-persistence.test.js +++ b/tests/config-persistence.test.js @@ -272,10 +272,11 @@ test('ConfigManager - branding links for manual and enterprise config', async (t const configManager = new ConfigManager(); const branding = await configManager.getFinalBrandingConfig(); + const defaultBranding = configManager.getDefaultBrandingConfig(); assert.strictEqual(branding.supportUrl, 'mailto:help@manual.example'); - assert.strictEqual(branding.privacyPolicyUrl, 'https://check.com/privacy'); - assert.strictEqual(branding.aboutUrl, 'https://check.com/about'); + assert.strictEqual(branding.privacyPolicyUrl, defaultBranding.privacyPolicyUrl); + assert.strictEqual(branding.aboutUrl, defaultBranding.aboutUrl); }); delete global.fetch; From 79e72d7d362d769ca5776482afcf8330f8f8851a Mon Sep 17 00:00:00 2001 From: Zacgoose <107489668+Zacgoose@users.noreply.github.com> Date: Sat, 28 Feb 2026 13:50:59 +0800 Subject: [PATCH 09/13] Update edge-managed-policy.json --- enterprise/macos-linux/edge-managed-policy.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/enterprise/macos-linux/edge-managed-policy.json b/enterprise/macos-linux/edge-managed-policy.json index acdee00a..59394080 100644 --- a/enterprise/macos-linux/edge-managed-policy.json +++ b/enterprise/macos-linux/edge-managed-policy.json @@ -18,9 +18,9 @@ "customRulesUrl": "", "updateInterval": 24, "enableDebugLogging": false, - "customBranding": { - "companyName": "", - "productName": "", + "customBranding": { + "companyName": "", + "productName": "", "supportEmail": "", "supportUrl": "", "privacyPolicyUrl": "", From 664431ed3b8b34ef4acf506cc601b211dcf425c5 Mon Sep 17 00:00:00 2001 From: Zacgoose <107489668+Zacgoose@users.noreply.github.com> Date: Sat, 28 Feb 2026 13:54:00 +0800 Subject: [PATCH 10/13] Update config-manager.js --- scripts/modules/config-manager.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/modules/config-manager.js b/scripts/modules/config-manager.js index 1b5f1af4..5d29715b 100644 --- a/scripts/modules/config-manager.js +++ b/scripts/modules/config-manager.js @@ -336,7 +336,7 @@ export class ConfigManager { supportEmail: "support@check.com", supportUrl: "https://support.check.com", privacyPolicyUrl: "https://check.com/privacy", - aboutUrl: "https://check.com/about", + aboutUrl: "", termsOfServiceUrl: "https://check.com/terms", // Customizable text From 39360fef5dc90392d5d16a73b56c7913d90b671d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 28 Feb 2026 05:59:24 +0000 Subject: [PATCH 11/13] docs: align branding docs with support privacy and about urls Co-authored-by: Zacgoose <107489668+Zacgoose@users.noreply.github.com> --- docs/settings/branding.md | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/docs/settings/branding.md b/docs/settings/branding.md index 60b0918c..d7b8c563 100644 --- a/docs/settings/branding.md +++ b/docs/settings/branding.md @@ -32,6 +32,9 @@ You can customize the following properties: 1. **Company Name** - Enter your organization's name. This appears in the extension interface and blocked page messages (displayed as "Protected by \[Company Name]"). 2. **Product Name** - What you want to call the extension (like "Contoso Security" instead of "Check"). This replaces the default "Check" branding throughout the interface. 3. **Support Email** - Where users should go for help. This email address is used in the "Contact Admin" button when phishing sites are blocked. +4. **Support URL** - URL opened by the popup **Support** link (for example, `https://support.yourcompany.com`). +5. **Privacy URL** (`privacyPolicyUrl`) - URL opened by the popup **Privacy** link (for example, `https://yourcompany.com/privacy`). +6. **About URL** (`aboutUrl`) - URL opened by the popup **About** link. Leave empty to use the built-in extension About page. ## Visual Customization @@ -59,6 +62,9 @@ The branding preview shows you exactly how your customizations will appear to us * Logo (upload or provide URL) * Primary Color * Support Email + * Support URL + * Privacy URL + * About URL 4. Click "Save" Your branding will be immediately applied to all components. @@ -77,7 +83,10 @@ For enterprise deployments using Windows Group Policy: "companyName": "Your Company", "logoUrl": "https://example.com/logo.png", "primaryColor": "#FF5733", - "supportEmail": "security@example.com" + "supportEmail": "security@example.com", + "supportUrl": "https://support.example.com", + "privacyPolicyUrl": "https://example.com/privacy", + "aboutUrl": "https://example.com/about" } } ``` @@ -107,6 +116,9 @@ For Firefox deployments, configure branding through the `policies.json` file: "companyName": "Your Company", "productName": "Security Extension", "supportEmail": "security@example.com", + "supportUrl": "https://support.example.com", + "privacyPolicyUrl": "https://example.com/privacy", + "aboutUrl": "https://example.com/about", "primaryColor": "#FF5733", "logoUrl": "https://example.com/logo.png" } @@ -135,7 +147,10 @@ For organizations using Microsoft Intune with Chrome/Edge: "companyName": "Your Company", "logoUrl": "https://example.com/logo.png", "primaryColor": "#FF5733", - "supportEmail": "security@example.com" + "supportEmail": "security@example.com", + "supportUrl": "https://support.example.com", + "privacyPolicyUrl": "https://example.com/privacy", + "aboutUrl": "https://example.com/about" } } ``` @@ -287,7 +302,10 @@ Logo URL: https://assets.globalmfg.com/security/gmi-logo-48.png "productName": "Contoso Defender", "logoUrl": "https://contoso.com/assets/logo.png", "primaryColor": "#0078D4", - "supportEmail": "security@contoso.com" + "supportEmail": "security@contoso.com", + "supportUrl": "https://support.contoso.com", + "privacyPolicyUrl": "https://contoso.com/privacy", + "aboutUrl": "https://contoso.com/about" } } ``` @@ -305,7 +323,10 @@ Logo URL: https://assets.globalmfg.com/security/gmi-logo-48.png "productName": "Contoso Defender", "logoUrl": "https://contoso.com/assets/logo.png", "primaryColor": "#0078D4", - "supportEmail": "security@contoso.com" + "supportEmail": "security@contoso.com", + "supportUrl": "https://support.contoso.com", + "privacyPolicyUrl": "https://contoso.com/privacy", + "aboutUrl": "https://contoso.com/about" } } } From 581b6b88a51d4332e9691463292c3cb85a87ffbb Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 28 Feb 2026 05:59:51 +0000 Subject: [PATCH 12/13] docs: use privacy policy url naming consistency Co-authored-by: Zacgoose <107489668+Zacgoose@users.noreply.github.com> --- docs/settings/branding.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/settings/branding.md b/docs/settings/branding.md index d7b8c563..cad94fa5 100644 --- a/docs/settings/branding.md +++ b/docs/settings/branding.md @@ -33,7 +33,7 @@ You can customize the following properties: 2. **Product Name** - What you want to call the extension (like "Contoso Security" instead of "Check"). This replaces the default "Check" branding throughout the interface. 3. **Support Email** - Where users should go for help. This email address is used in the "Contact Admin" button when phishing sites are blocked. 4. **Support URL** - URL opened by the popup **Support** link (for example, `https://support.yourcompany.com`). -5. **Privacy URL** (`privacyPolicyUrl`) - URL opened by the popup **Privacy** link (for example, `https://yourcompany.com/privacy`). +5. **Privacy Policy URL** (`privacyPolicyUrl`) - URL opened by the popup **Privacy** link (for example, `https://yourcompany.com/privacy`). 6. **About URL** (`aboutUrl`) - URL opened by the popup **About** link. Leave empty to use the built-in extension About page. ## Visual Customization From fbcb4931b68b08e133d3a21fab29af5494eb99ad Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 28 Feb 2026 06:00:17 +0000 Subject: [PATCH 13/13] docs: align privacy policy url label in manual settings list Co-authored-by: Zacgoose <107489668+Zacgoose@users.noreply.github.com> --- docs/settings/branding.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/settings/branding.md b/docs/settings/branding.md index cad94fa5..9ba3fed7 100644 --- a/docs/settings/branding.md +++ b/docs/settings/branding.md @@ -63,7 +63,7 @@ The branding preview shows you exactly how your customizations will appear to us * Primary Color * Support Email * Support URL - * Privacy URL + * Privacy Policy URL * About URL 4. Click "Save"