From 429ef9559cc35767b9b5e371d9e9786cae926aff Mon Sep 17 00:00:00 2001 From: Adela Almasan <88068998+adela-almasan@users.noreply.github.com> Date: Thu, 7 Mar 2024 08:49:37 -0600 Subject: [PATCH] FeatureToggles: Allow changing prod env safe feature toggles via URL (#84034) --- packages/grafana-runtime/src/config.ts | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/packages/grafana-runtime/src/config.ts b/packages/grafana-runtime/src/config.ts index 30719098512..0e28eb5831a 100644 --- a/packages/grafana-runtime/src/config.ts +++ b/packages/grafana-runtime/src/config.ts @@ -203,10 +203,7 @@ export class GrafanaBootConfig implements GrafanaConfig { systemDateFormats.update(this.dateFormats); } - if (this.buildInfo.env === 'development') { - overrideFeatureTogglesFromUrl(this); - } - + overrideFeatureTogglesFromUrl(this); overrideFeatureTogglesFromLocalStorage(this); if (this.featureToggles.disableAngular) { @@ -243,11 +240,28 @@ function overrideFeatureTogglesFromUrl(config: GrafanaBootConfig) { return; } + const isLocalDevEnv = config.buildInfo.env === 'development'; + + const prodUrlAllowedFeatureFlags = new Set([ + 'autoMigrateOldPanels', + 'autoMigrateGraphPanel', + 'autoMigrateTablePanel', + 'autoMigratePiechartPanel', + 'autoMigrateWorldmapPanel', + 'autoMigrateStatPanel', + 'disableAngular', + ]); + const params = new URLSearchParams(window.location.search); params.forEach((value, key) => { if (key.startsWith('__feature.')) { const featureToggles = config.featureToggles as Record; const featureName = key.substring(10); + + if (!isLocalDevEnv && !prodUrlAllowedFeatureFlags.has(featureName)) { + return; + } + const toggleState = value === 'true' || value === ''; // browser rewrites true as '' if (toggleState !== featureToggles[key]) { featureToggles[featureName] = toggleState;