diff --git a/dashboard/lib/layouts.py b/dashboard/lib/layouts.py index 3fb230f314..6d1e7947fa 100644 --- a/dashboard/lib/layouts.py +++ b/dashboard/lib/layouts.py @@ -156,7 +156,7 @@ def create_layout_compliance( html.Img(src="assets/favicon.ico", className="w-5 mr-3"), html.Span("Subscribe to Prowler Cloud"), ], - href="https://cloud.prowler.com/", + href="https://cloud.prowler.com/sign-up?utm_source=prowler-local-dashboard&utm_content=compliance", target="_blank", className="text-prowler-stone-900 inline-flex px-4 py-2 text-xs font-bold uppercase transition-all rounded-lg text-gray-900 hover:bg-prowler-stone-900/10 border-solid border-1 hover:border-prowler-stone-900/10 hover:border-solid hover:border-1 border-prowler-stone-900/10", ), diff --git a/dashboard/pages/cloud.py b/dashboard/pages/cloud.py index 3a6ce48b62..49778f8e26 100644 --- a/dashboard/pages/cloud.py +++ b/dashboard/pages/cloud.py @@ -14,7 +14,9 @@ from dash import html CLOUD_SUBTITLE = "Discover more ways to protect and operate your cloud." # Base Prowler Cloud URL; the UTM content value identifies the feature. -CLOUD_CTA_BASE = "https://cloud.prowler.com/?utm_source=local-dashboard&utm_content=" +CLOUD_CTA_BASE = ( + "https://cloud.prowler.com/sign-up?utm_source=prowler-local-dashboard&utm_content=" +) # Path to the recolorable checkmark mask used for benefit bullets. CHECK_ICON = "/assets/images/icons/cloud/check.svg" diff --git a/dashboard/pages/overview.py b/dashboard/pages/overview.py index e705f15e9f..8f786412d9 100644 --- a/dashboard/pages/overview.py +++ b/dashboard/pages/overview.py @@ -1538,7 +1538,7 @@ def filter_data( html.Img(src="assets/favicon.ico", className="w-5 mr-3"), html.Span("Subscribe to Prowler Cloud"), ], - href="https://cloud.prowler.com/", + href="https://cloud.prowler.com/sign-up?utm_source=prowler-local-dashboard&utm_content=overview", target="_blank", className="text-prowler-stone-900 inline-flex px-4 py-2 text-xs font-bold uppercase transition-all rounded-lg text-gray-900 hover:bg-prowler-stone-900/10 border-solid border-1 hover:border-prowler-stone-900/10 hover:border-solid hover:border-1 border-prowler-stone-900/10", ), diff --git a/prowler/lib/banner.py b/prowler/lib/banner.py index 5b2332e772..e1c7fa5a35 100644 --- a/prowler/lib/banner.py +++ b/prowler/lib/banner.py @@ -2,6 +2,21 @@ from colorama import Fore, Style from prowler.config.config import banner_color, orange_color, prowler_version, timestamp +# Prowler Cloud landing URL used by the CLI banner. The visible text stays +# "cloud.prowler.com" while the clickable target carries the UTM source so +# terminals that support OSC 8 hyperlinks attribute the visit to the CLI. +CLOUD_DISPLAY_TEXT = "cloud.prowler.com" +CLOUD_BANNER_URL = "https://cloud.prowler.com/sign-up?utm_source=prowler-cli" + + +def _hyperlink(url: str, text: str) -> str: + """Wrap ``text`` in an OSC 8 terminal hyperlink pointing to ``url``. + + Terminals that support OSC 8 render ``text`` as a clickable link to ``url``; + those that do not simply display ``text`` unchanged. + """ + return f"\033]8;;{url}\033\\{text}\033]8;;\033\\" + def print_banner(legend: bool = False, provider: str = None): """ @@ -69,5 +84,5 @@ def print_prowler_cloud_banner(provider: str = None): {bar} {check} {Style.BRIGHT}Bulk Provisioning{Style.RESET_ALL} - add your entire AWS Organization in seconds. {bar} {check} {Style.BRIGHT}Integrations{Style.RESET_ALL} - Anything with our MCP + Jira, Slack, AWS Security Hub, Amazon S3, SSO and RBAC. {bar} -{bar} {banner_color}Start free at 👉 cloud.prowler.com{Style.RESET_ALL} +{bar} {banner_color}Start free at 👉 {_hyperlink(CLOUD_BANNER_URL, CLOUD_DISPLAY_TEXT)}{Style.RESET_ALL} """)