diff --git a/enterprise/backend/src/metabase_enterprise/billing/billing.clj b/enterprise/backend/src/metabase_enterprise/billing/billing.clj index e715be5396b5900eab17c61c3a88fb173b70cbf0..fbba5137aa111a41847b31b4c9dde27f391bf648 100644 --- a/enterprise/backend/src/metabase_enterprise/billing/billing.clj +++ b/enterprise/backend/src/metabase_enterprise/billing/billing.clj @@ -52,7 +52,7 @@ :content [{:name "Users included in your plan" :value max-users :format "integer" :display "value"} {:name "Users available" :value (- max-users total-users) :format "integer" :display "value"} {:name "Token expiration date" :value (valid-thru) :format "string" :display "value"} - {:name "Plan" :value "Metabase Enterprise Airgap" :format "string" :display "value"}]})) + {:name "Plan" :value "Enterprise Airgap" :format "string" :display "value"}]})) (api/defendpoint GET "/" "Get billing information. This acts as a proxy between `metabase-billing-info-url` and the client, diff --git a/enterprise/frontend/src/metabase-enterprise/license/components/BillingInfo/BillingInfoTable.tsx b/enterprise/frontend/src/metabase-enterprise/license/components/BillingInfo/BillingInfoTable.tsx index ed60bf4b3ca2681b778de13b2eab63e428be8212..ffdddbfc6d3f59246371b20d5fa5595b9ee9ade6 100644 --- a/enterprise/frontend/src/metabase-enterprise/license/components/BillingInfo/BillingInfoTable.tsx +++ b/enterprise/frontend/src/metabase-enterprise/license/components/BillingInfo/BillingInfoTable.tsx @@ -2,6 +2,7 @@ import { t } from "ttag"; import ErrorBoundary from "metabase/ErrorBoundary"; import { SectionHeader } from "metabase/admin/settings/components/SettingsLicense"; +import { useSetting } from "metabase/common/hooks"; import { Text } from "metabase/ui"; import type { BillingInfo, BillingInfoLineItem } from "metabase-types/api"; @@ -115,6 +116,7 @@ export const BillingInfoTable = ({ }: { billingInfo: BillingInfo; }) => { + const airgap_enabled = useSetting("airgap-enabled"); return ( <> <SectionHeader>{t`Billing`}</SectionHeader> @@ -127,7 +129,7 @@ export const BillingInfoTable = ({ /> ))} </BillingInfoCard> - <StillNeedHelp /> + {airgap_enabled && <StillNeedHelp />} </> ); }; diff --git a/frontend/src/metabase-types/api/mocks/settings.ts b/frontend/src/metabase-types/api/mocks/settings.ts index 0bdd813da4c65bc5019ac54adb8654bd5f914e96..20f57779a9c583fd3cf713b468bfab73df05fa52 100644 --- a/frontend/src/metabase-types/api/mocks/settings.ts +++ b/frontend/src/metabase-types/api/mocks/settings.ts @@ -145,6 +145,7 @@ export const createMockSettings = ( opts?: Partial<Settings | EnterpriseSettings>, ): EnterpriseSettings => ({ "admin-email": "admin@metabase.test", + "airgap-enabled": false, "allowed-iframe-hosts": "*", "anon-tracking-enabled": false, "application-colors": {}, diff --git a/frontend/src/metabase-types/api/settings.ts b/frontend/src/metabase-types/api/settings.ts index 6f3d6dcc03fa95478de87bb6a770835ec2ae47af..315403e1832b104944aa1d371238af322346d702 100644 --- a/frontend/src/metabase-types/api/settings.ts +++ b/frontend/src/metabase-types/api/settings.ts @@ -340,6 +340,7 @@ interface PublicSettings { "update-channel": UpdateChannel; version: Version; "version-info-last-checked": string | null; + "airgap-enabled": boolean; } export type UserSettings = { diff --git a/frontend/src/metabase/admin/settings/selectors/selectors.js b/frontend/src/metabase/admin/settings/selectors/selectors.js index c4613cb0d3ee4870219b0cb0b6defd7912b1ad12..5ac1c972ad8e4e5865a014f30cd53048a45d239f 100644 --- a/frontend/src/metabase/admin/settings/selectors/selectors.js +++ b/frontend/src/metabase/admin/settings/selectors/selectors.js @@ -520,7 +520,10 @@ export const ADMIN_SETTINGS_SECTIONS = { }, cloud: { name: t`Cloud`, - getHidden: settings => settings["token-features"]?.hosting === true, + getHidden: settings => { + settings["token-features"]?.hosting === true && + !settings["airgap-enabled"]; + }, order: 132, component: CloudPanel, settings: [], diff --git a/src/metabase/public_settings/premium_features.clj b/src/metabase/public_settings/premium_features.clj index 8d4c9a730f230aace5189924b58746fc84904083..b66d7912ccd5281daa2044c93eda9d1a984ebdef 100644 --- a/src/metabase/public_settings/premium_features.clj +++ b/src/metabase/public_settings/premium_features.clj @@ -315,10 +315,14 @@ {:message (.getMessage e), :status-code 400} (ex-data e)))))))) ; merge in error-details if present -(defn is-airgapped? +(defsetting airgap-enabled "Returns true if the current instance is airgapped." - [] - (mc/validate AirgapToken (premium-embedding-token))) + :type :boolean + :visibility :public + :setter :none + :audit :never + :export? false + :getter (fn [] (mc/validate AirgapToken (premium-embedding-token)))) (let [cached-logger (memoize/ttl ^{::memoize/args-fn (fn [[token _e]] [token])} diff --git a/src/metabase/troubleshooting.clj b/src/metabase/troubleshooting.clj index 9e13877dded25ef5195d5290ce5591c55d99d211..62f705edc0396530fc1d6952bc0238beb414f416 100644 --- a/src/metabase/troubleshooting.clj +++ b/src/metabase/troubleshooting.clj @@ -44,7 +44,7 @@ :version (.getDatabaseProductVersion metadata)} :jdbc-driver {:name (.getDriverName metadata) :version (.getDriverVersion metadata)}}))}) - (when (premium-features/is-airgapped?) + (when (premium-features/airgap-enabled) {:airgap-token :enabled :max-users (premium-features/max-users-allowed) :current-user-count (premium-features/cached-active-users-count)