From 3ec3d255813639030ed911e82c9cef08d4cb0f10 Mon Sep 17 00:00:00 2001 From: Metabase Automation User Date: Sat, 12 Sep 2026 02:12:29 +0000 Subject: [PATCH] Update docs for v63,62 --- _docs/latest/api.json | 257 +----------------- _docs/latest/cloud/images/migrate-button.png | Bin 42054 -> 0 bytes _docs/latest/cloud/migrate/guide.md | 19 +- .../configuring-metabase/config-template.md | 2 + .../environment-variables.md | 27 ++ _docs/latest/embedding/chart.md | 2 +- .../interactive-question-click-actions.tsx | 6 +- _docs/v0.63/api.json | 257 +----------------- .../configuring-metabase/config-template.md | 2 + .../environment-variables.md | 27 ++ _docs/v0.63/embedding/chart.md | 2 +- .../interactive-question-click-actions.tsx | 6 +- 12 files changed, 79 insertions(+), 528 deletions(-) delete mode 100644 _docs/latest/cloud/images/migrate-button.png diff --git a/_docs/latest/api.json b/_docs/latest/api.json index e66d4f738a..f562768769 100644 --- a/_docs/latest/api.json +++ b/_docs/latest/api.json @@ -11720,7 +11720,7 @@ "additionalProperties" : false }, "metabase.notification.api.notification.CreateNotificationParams" : { - "description" : "[[::NotificationApiInput]] for a create request: no `:id` at any level, so a caller cannot pick a primary key.", + "description" : "Notification schema for a create request, or for sending one that was never saved. Like\n FullyHydratedNotification but restricts templates to user-provided types only (no handlebars-resource),\n and carries no ids since the body has no row of its own.", "oneOf" : [ { "type" : "object", "properties" : { @@ -11811,13 +11811,6 @@ "payload" : { "$ref" : "#/components/schemas/metabase.notification.models.CreateNotificationCardParams" }, - "payload_id" : { - "oneOf" : [ { - "type" : "integer" - }, { - "type" : "null" - } ] - }, "payload_type" : { "type" : "string", "enum" : [ "notification/dashboard", "notification/system-event", "notification/testing", "notification/card" ] @@ -11917,13 +11910,6 @@ "required" : [ "channel_type" ] } }, - "payload_id" : { - "oneOf" : [ { - "type" : "integer" - }, { - "type" : "null" - } ] - }, "payload_type" : { "type" : "string", "enum" : [ "notification/dashboard", "notification/system-event", "notification/testing", "notification/card" ] @@ -11938,245 +11924,8 @@ "required" : [ "payload_type" ] } ] }, - "metabase.notification.api.notification.NotificationApiInput" : { - "description" : "Notification schema for API input. Like FullyHydratedNotification but restricts templates\n to user-provided types only (no handlebars-resource).", - "oneOf" : [ { - "type" : "object", - "properties" : { - "payload_type" : { - "type" : "string", - "enum" : [ "notification/dashboard", "notification/system-event", "notification/testing", "notification/card" ] - }, - "payload_id" : { - "oneOf" : [ { - "type" : "integer" - }, { - "type" : "null" - } ] - }, - "handlers" : { - "type" : "array", - "items" : { - "type" : "object", - "properties" : { - "template_id" : { - "oneOf" : [ { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, { - "type" : "null" - } ] - }, - "channel_id" : { - "oneOf" : [ { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, { - "type" : "null" - } ] - }, - "id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "recipients" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.notification.models.NotificationRecipient" - } - }, - "template" : { - "oneOf" : [ { - "$ref" : "#/components/schemas/metabase.channel.models.channel.ChannelTemplateUserProvided" - }, { - "type" : "null" - } ] - }, - "channel_type" : { }, - "channel" : { - "oneOf" : [ { - "$ref" : "#/components/schemas/metabase.channel.models.channel.Channel" - }, { - "type" : "null" - } ] - }, - "notification_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "active" : { - "oneOf" : [ { - "type" : "boolean" - }, { - "type" : "null" - } ] - } - }, - "required" : [ "channel_type" ] - } - }, - "id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "creator" : { - "oneOf" : [ { - "description" : "Value must be a map.", - "type" : "object", - "properties" : { } - }, { - "type" : "null" - } ] - }, - "active" : { - "oneOf" : [ { - "type" : "boolean" - }, { - "type" : "null" - } ] - }, - "payload" : { - "$ref" : "#/components/schemas/metabase.notification.models.NotificationCard" - }, - "creator_id" : { - "oneOf" : [ { - "type" : "integer" - }, { - "type" : "null" - } ] - }, - "subscriptions" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.notification.models.NotificationSubscription" - } - } - }, - "required" : [ "payload_type", "payload" ] - }, { - "type" : "object", - "properties" : { - "active" : { - "oneOf" : [ { - "type" : "boolean" - }, { - "type" : "null" - } ] - }, - "creator" : { - "oneOf" : [ { - "description" : "Value must be a map.", - "type" : "object", - "properties" : { } - }, { - "type" : "null" - } ] - }, - "creator_id" : { - "oneOf" : [ { - "type" : "integer" - }, { - "type" : "null" - } ] - }, - "handlers" : { - "type" : "array", - "items" : { - "type" : "object", - "properties" : { - "template_id" : { - "oneOf" : [ { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, { - "type" : "null" - } ] - }, - "channel_id" : { - "oneOf" : [ { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, { - "type" : "null" - } ] - }, - "id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "recipients" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.notification.models.NotificationRecipient" - } - }, - "template" : { - "oneOf" : [ { - "$ref" : "#/components/schemas/metabase.channel.models.channel.ChannelTemplateUserProvided" - }, { - "type" : "null" - } ] - }, - "channel_type" : { }, - "channel" : { - "oneOf" : [ { - "$ref" : "#/components/schemas/metabase.channel.models.channel.Channel" - }, { - "type" : "null" - } ] - }, - "notification_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "active" : { - "oneOf" : [ { - "type" : "boolean" - }, { - "type" : "null" - } ] - } - }, - "required" : [ "channel_type" ] - } - }, - "id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "payload_id" : { - "oneOf" : [ { - "type" : "integer" - }, { - "type" : "null" - } ] - }, - "payload_type" : { - "type" : "string", - "enum" : [ "notification/dashboard", "notification/system-event", "notification/testing", "notification/card" ] - }, - "subscriptions" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.notification.models.NotificationSubscription" - } - } - }, - "required" : [ "payload_type" ] - } ] - }, "metabase.notification.api.notification.NotificationApiUpdateInput" : { - "description" : "::NotificationApiInput restricted to what `notification-update-spec` writes. On PUT the URL,\n not the body, identifies the target (RFC 9110 §9.3.4), so a client-sent id is stripped.", + "description" : "Notification schema for an update request, restricted to what `notification-update-spec` writes. On PUT\n the URL, not the body, identifies the target (RFC 9110 §9.3.4), so a client-sent id is stripped.", "oneOf" : [ { "type" : "object", "properties" : { @@ -39687,7 +39436,7 @@ "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/metabase.notification.api.notification.NotificationApiInput" + "$ref" : "#/components/schemas/metabase.notification.api.notification.CreateNotificationParams" } } } diff --git a/_docs/latest/cloud/images/migrate-button.png b/_docs/latest/cloud/images/migrate-button.png deleted file mode 100644 index 627158a6f39c63407b795f4e3a6f599e725468bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42054 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 diff --git a/_docs/latest/cloud/migrate/guide.md b/_docs/latest/cloud/migrate/guide.md index 9c5147d045..c100110919 100644 --- a/_docs/latest/cloud/migrate/guide.md +++ b/_docs/latest/cloud/migrate/guide.md @@ -34,21 +34,16 @@ You'll kick off the migration process in your self-hosted Metabase, and finish u ### Initiate your migration -In your Metabase, go to **Admin** > **Settings** > **Cloud**. +1. In your Metabase, go to **Admin** > **Settings**. +2. In the left sidebar, click **Cloud** and then **Try for free**. +3. Metabase will prompt you with a modal to let you know that your Metabase will be read-only while it automates the migration. Click **Migrate now**. +4. Metabase will take a snapshot of your application database (all your questions, models, dashboards, etc.). While it's snapshotting, it'll display a banner to let people know that they won't be able to create anything new. People will still be able to view questions and dashboards during this time. -In the **Migrate to Metabase Cloud** section, click on the **Get started** button. + ![Read-only banner](../images/read-only-banner.png) -![Migrate to Metabase Cloud button](../images/migrate-button.png) + Once the snapshot upload completes: -Metabase will prompt you with a modal to let you know that your Metabase will be read-only while it automates the migration. Click **Migrate now**. - -Metabase will take a snapshot of your application database (all your questions, models, dashboards, etc.). While it's snapshotting, it'll display a banner to let people know that they won't be able to create anything new. People will still be able to view questions and dashboards during this time. - -![Read-only banner](../images/read-only-banner.png) - -Once the snapshot upload completes: - -![Snapshot uploaded](../images/snapshot-uploaded.png) + ![Snapshot uploaded](../images/snapshot-uploaded.png) ### Set up your account and choose your plan and deployment diff --git a/_docs/latest/configuring-metabase/config-template.md b/_docs/latest/configuring-metabase/config-template.md index df15cb0219..e3b8f0849a 100644 --- a/_docs/latest/configuring-metabase/config-template.md +++ b/_docs/latest/configuring-metabase/config-template.md @@ -209,8 +209,10 @@ config: ldap-port: 389 ldap-security: none ldap-sync-user-attributes: true + ldap-sync-user-attributes-allowlist: '' ldap-sync-user-attributes-blacklist: userPassword,dn,distinguishedName ldap-timeout-seconds: 15.0 + ldap-trust-store: null ldap-user-base: null ldap-user-filter: (&(objectClass=inetOrgPerson)(|(uid={login})(mail={login}))) ldap-user-provisioning-enabled: true diff --git a/_docs/latest/configuring-metabase/environment-variables.md b/_docs/latest/configuring-metabase/environment-variables.md index 8ff1f598e5..70a7e28589 100644 --- a/_docs/latest/configuring-metabase/environment-variables.md +++ b/_docs/latest/configuring-metabase/environment-variables.md @@ -1241,6 +1241,14 @@ Use SSL, TLS or plain text. Should we sync user attributes when someone logs in via LDAP? +### `MB_LDAP_SYNC_USER_ATTRIBUTES_ALLOWLIST` + +- Type: csv +- Default: `` +- [Configuration file name](./config-file): `ldap-sync-user-attributes-allowlist` + +Comma-separated list of user attributes to sync for LDAP users. Only these attributes are synced; leave blank to sync none. + ### `MB_LDAP_SYNC_USER_ATTRIBUTES_BLACKLIST` - Type: csv @@ -1257,6 +1265,14 @@ Comma-separated list of user attributes to skip syncing for LDAP users. Maximum time, in seconds, to wait for LDAP server before falling back to local authentication. +### `MB_LDAP_TRUST_STORE` + +- Type: string +- Default: `null` +- [Configuration file name](./config-file): `ldap-trust-store` + +Path to a JKS trust store of CA certificates used to validate the LDAP server's TLS certificate. Leave blank to use the JVM default trust store. + ### `MB_LDAP_USER_BASE` - Type: string @@ -2435,6 +2451,10 @@ This URL is used for things like creating links in emails, auth redirects, and i This URL is critical for things like SSO authentication, email links, embedding and more. Even difference with `http://` vs `https://` can cause problems. Make sure that the address defined is how Metabase is being accessed. + If left unset, Metabase learns this value from the request headers of the first authenticated + admin, so an operator who completes setup in a browser doesn't have to configure it. Deployments + that provision headlessly, run multi-tenant, or otherwise never sign in as an admin should set + `MB_SITE_URL` explicitly. ### `MB_SLACK_APP_TOKEN` @@ -2985,6 +3005,13 @@ Default: `null` Used during development of third-party drivers. Set the value to have that plugin manifest get loaded during startup. Specify multiple plugin manifests by comma-separating them. +### `MB_DISABLE_LEGACY_STARTUP_ENCRYPTION` + +Type: boolean
+Default: `false` + +By default, when [MB_ENCRYPTION_SECRET_KEY](#mb_encryption_secret_key) is set, Metabase encrypts on startup any values that an older version of Metabase stored unencrypted, and logs a warning for each column it had to encrypt. When `true`, Metabase will refuse to start instead of encrypting such values, including settings saved by an older version. + ### `MB_DISABLE_SCHEDULER` Type: boolean
diff --git a/_docs/latest/embedding/chart.md b/_docs/latest/embedding/chart.md index c83d067a61..df581e3fa9 100644 --- a/_docs/latest/embedding/chart.md +++ b/_docs/latest/embedding/chart.md @@ -233,7 +233,7 @@ In the embedding wizard, this corresponds to the **Allow people to save new ques Customizing click behavior is only available in the [Modular embedding SDK](./sdk/introduction) for now. -When people click a data point in an interactive chart, Metabase shows a menu of actions. The [`mapQuestionClickActions`](./sdk/plugins) plugin lets you customize this: open the default menu, add custom actions, or perform an immediate action without a menu. +When people click a data point in an interactive chart, Metabase shows a menu of actions. The [`mapQuestionClickActions`](./sdk/api/MetabasePluginsConfig#mapquestionclickactions) SDK [plugin](./sdk/plugins) lets you customize this: add custom actions alongside the default ones, perform an immediate action without a menu, or prevent default actions from happening. Use it globally on `MetabaseProvider`, or on individual `InteractiveQuestion` components: diff --git a/_docs/latest/embedding/sdk/snippets/questions/interactive-question-click-actions.tsx b/_docs/latest/embedding/sdk/snippets/questions/interactive-question-click-actions.tsx index 5dbf82636a..be3bacb52b 100644 --- a/_docs/latest/embedding/sdk/snippets/questions/interactive-question-click-actions.tsx +++ b/_docs/latest/embedding/sdk/snippets/questions/interactive-question-click-actions.tsx @@ -16,7 +16,7 @@ const Example = () => { pluginsConfig={{ mapQuestionClickActions: (clickActions, clicked) => { if (clicked?.column?.display_name === "Last Name") { - // This adds a custom action to the menu when clicked on on "Last Name" column + // This adds a custom action to the menu return [ ...clickActions, { @@ -29,12 +29,12 @@ const Example = () => { } if (clicked?.column?.display_name === "Plan") { - // This performs an immediate action on "Plan" column instead of opening the menu + // This performs an immediate action instead of opening the menu return { onClick: () => alert("You clicked the Plan column!"), }; } - // default behavior (open Metabase's default click menu) on other columns + // default behavior (open Metabase's default click menu) return clickActions; }, }} diff --git a/_docs/v0.63/api.json b/_docs/v0.63/api.json index e66d4f738a..f562768769 100644 --- a/_docs/v0.63/api.json +++ b/_docs/v0.63/api.json @@ -11720,7 +11720,7 @@ "additionalProperties" : false }, "metabase.notification.api.notification.CreateNotificationParams" : { - "description" : "[[::NotificationApiInput]] for a create request: no `:id` at any level, so a caller cannot pick a primary key.", + "description" : "Notification schema for a create request, or for sending one that was never saved. Like\n FullyHydratedNotification but restricts templates to user-provided types only (no handlebars-resource),\n and carries no ids since the body has no row of its own.", "oneOf" : [ { "type" : "object", "properties" : { @@ -11811,13 +11811,6 @@ "payload" : { "$ref" : "#/components/schemas/metabase.notification.models.CreateNotificationCardParams" }, - "payload_id" : { - "oneOf" : [ { - "type" : "integer" - }, { - "type" : "null" - } ] - }, "payload_type" : { "type" : "string", "enum" : [ "notification/dashboard", "notification/system-event", "notification/testing", "notification/card" ] @@ -11917,13 +11910,6 @@ "required" : [ "channel_type" ] } }, - "payload_id" : { - "oneOf" : [ { - "type" : "integer" - }, { - "type" : "null" - } ] - }, "payload_type" : { "type" : "string", "enum" : [ "notification/dashboard", "notification/system-event", "notification/testing", "notification/card" ] @@ -11938,245 +11924,8 @@ "required" : [ "payload_type" ] } ] }, - "metabase.notification.api.notification.NotificationApiInput" : { - "description" : "Notification schema for API input. Like FullyHydratedNotification but restricts templates\n to user-provided types only (no handlebars-resource).", - "oneOf" : [ { - "type" : "object", - "properties" : { - "payload_type" : { - "type" : "string", - "enum" : [ "notification/dashboard", "notification/system-event", "notification/testing", "notification/card" ] - }, - "payload_id" : { - "oneOf" : [ { - "type" : "integer" - }, { - "type" : "null" - } ] - }, - "handlers" : { - "type" : "array", - "items" : { - "type" : "object", - "properties" : { - "template_id" : { - "oneOf" : [ { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, { - "type" : "null" - } ] - }, - "channel_id" : { - "oneOf" : [ { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, { - "type" : "null" - } ] - }, - "id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "recipients" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.notification.models.NotificationRecipient" - } - }, - "template" : { - "oneOf" : [ { - "$ref" : "#/components/schemas/metabase.channel.models.channel.ChannelTemplateUserProvided" - }, { - "type" : "null" - } ] - }, - "channel_type" : { }, - "channel" : { - "oneOf" : [ { - "$ref" : "#/components/schemas/metabase.channel.models.channel.Channel" - }, { - "type" : "null" - } ] - }, - "notification_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "active" : { - "oneOf" : [ { - "type" : "boolean" - }, { - "type" : "null" - } ] - } - }, - "required" : [ "channel_type" ] - } - }, - "id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "creator" : { - "oneOf" : [ { - "description" : "Value must be a map.", - "type" : "object", - "properties" : { } - }, { - "type" : "null" - } ] - }, - "active" : { - "oneOf" : [ { - "type" : "boolean" - }, { - "type" : "null" - } ] - }, - "payload" : { - "$ref" : "#/components/schemas/metabase.notification.models.NotificationCard" - }, - "creator_id" : { - "oneOf" : [ { - "type" : "integer" - }, { - "type" : "null" - } ] - }, - "subscriptions" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.notification.models.NotificationSubscription" - } - } - }, - "required" : [ "payload_type", "payload" ] - }, { - "type" : "object", - "properties" : { - "active" : { - "oneOf" : [ { - "type" : "boolean" - }, { - "type" : "null" - } ] - }, - "creator" : { - "oneOf" : [ { - "description" : "Value must be a map.", - "type" : "object", - "properties" : { } - }, { - "type" : "null" - } ] - }, - "creator_id" : { - "oneOf" : [ { - "type" : "integer" - }, { - "type" : "null" - } ] - }, - "handlers" : { - "type" : "array", - "items" : { - "type" : "object", - "properties" : { - "template_id" : { - "oneOf" : [ { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, { - "type" : "null" - } ] - }, - "channel_id" : { - "oneOf" : [ { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, { - "type" : "null" - } ] - }, - "id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "recipients" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.notification.models.NotificationRecipient" - } - }, - "template" : { - "oneOf" : [ { - "$ref" : "#/components/schemas/metabase.channel.models.channel.ChannelTemplateUserProvided" - }, { - "type" : "null" - } ] - }, - "channel_type" : { }, - "channel" : { - "oneOf" : [ { - "$ref" : "#/components/schemas/metabase.channel.models.channel.Channel" - }, { - "type" : "null" - } ] - }, - "notification_id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "active" : { - "oneOf" : [ { - "type" : "boolean" - }, { - "type" : "null" - } ] - } - }, - "required" : [ "channel_type" ] - } - }, - "id" : { - "description" : "value must be an integer greater than zero.", - "type" : "integer", - "minimum" : 1 - }, - "payload_id" : { - "oneOf" : [ { - "type" : "integer" - }, { - "type" : "null" - } ] - }, - "payload_type" : { - "type" : "string", - "enum" : [ "notification/dashboard", "notification/system-event", "notification/testing", "notification/card" ] - }, - "subscriptions" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/metabase.notification.models.NotificationSubscription" - } - } - }, - "required" : [ "payload_type" ] - } ] - }, "metabase.notification.api.notification.NotificationApiUpdateInput" : { - "description" : "::NotificationApiInput restricted to what `notification-update-spec` writes. On PUT the URL,\n not the body, identifies the target (RFC 9110 §9.3.4), so a client-sent id is stripped.", + "description" : "Notification schema for an update request, restricted to what `notification-update-spec` writes. On PUT\n the URL, not the body, identifies the target (RFC 9110 §9.3.4), so a client-sent id is stripped.", "oneOf" : [ { "type" : "object", "properties" : { @@ -39687,7 +39436,7 @@ "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/metabase.notification.api.notification.NotificationApiInput" + "$ref" : "#/components/schemas/metabase.notification.api.notification.CreateNotificationParams" } } } diff --git a/_docs/v0.63/configuring-metabase/config-template.md b/_docs/v0.63/configuring-metabase/config-template.md index c682f2bb6b..947ad81078 100644 --- a/_docs/v0.63/configuring-metabase/config-template.md +++ b/_docs/v0.63/configuring-metabase/config-template.md @@ -207,8 +207,10 @@ config: ldap-port: 389 ldap-security: none ldap-sync-user-attributes: true + ldap-sync-user-attributes-allowlist: '' ldap-sync-user-attributes-blacklist: userPassword,dn,distinguishedName ldap-timeout-seconds: 15.0 + ldap-trust-store: null ldap-user-base: null ldap-user-filter: (&(objectClass=inetOrgPerson)(|(uid={login})(mail={login}))) ldap-user-provisioning-enabled: true diff --git a/_docs/v0.63/configuring-metabase/environment-variables.md b/_docs/v0.63/configuring-metabase/environment-variables.md index 4663f0a7e2..5b9b311d42 100644 --- a/_docs/v0.63/configuring-metabase/environment-variables.md +++ b/_docs/v0.63/configuring-metabase/environment-variables.md @@ -1239,6 +1239,14 @@ Use SSL, TLS or plain text. Should we sync user attributes when someone logs in via LDAP? +### `MB_LDAP_SYNC_USER_ATTRIBUTES_ALLOWLIST` + +- Type: csv +- Default: `` +- [Configuration file name](./config-file): `ldap-sync-user-attributes-allowlist` + +Comma-separated list of user attributes to sync for LDAP users. Only these attributes are synced; leave blank to sync none. + ### `MB_LDAP_SYNC_USER_ATTRIBUTES_BLACKLIST` - Type: csv @@ -1255,6 +1263,14 @@ Comma-separated list of user attributes to skip syncing for LDAP users. Maximum time, in seconds, to wait for LDAP server before falling back to local authentication. +### `MB_LDAP_TRUST_STORE` + +- Type: string +- Default: `null` +- [Configuration file name](./config-file): `ldap-trust-store` + +Path to a JKS trust store of CA certificates used to validate the LDAP server's TLS certificate. Leave blank to use the JVM default trust store. + ### `MB_LDAP_USER_BASE` - Type: string @@ -2433,6 +2449,10 @@ This URL is used for things like creating links in emails, auth redirects, and i This URL is critical for things like SSO authentication, email links, embedding and more. Even difference with `http://` vs `https://` can cause problems. Make sure that the address defined is how Metabase is being accessed. + If left unset, Metabase learns this value from the request headers of the first authenticated + admin, so an operator who completes setup in a browser doesn't have to configure it. Deployments + that provision headlessly, run multi-tenant, or otherwise never sign in as an admin should set + `MB_SITE_URL` explicitly. ### `MB_SLACK_APP_TOKEN` @@ -2983,6 +3003,13 @@ Default: `null` Used during development of third-party drivers. Set the value to have that plugin manifest get loaded during startup. Specify multiple plugin manifests by comma-separating them. +### `MB_DISABLE_LEGACY_STARTUP_ENCRYPTION` + +Type: boolean
+Default: `false` + +By default, when [MB_ENCRYPTION_SECRET_KEY](#mb_encryption_secret_key) is set, Metabase encrypts on startup any values that an older version of Metabase stored unencrypted, and logs a warning for each column it had to encrypt. When `true`, Metabase will refuse to start instead of encrypting such values, including settings saved by an older version. + ### `MB_DISABLE_SCHEDULER` Type: boolean
diff --git a/_docs/v0.63/embedding/chart.md b/_docs/v0.63/embedding/chart.md index 3fc7fda5b0..a8b408ca96 100644 --- a/_docs/v0.63/embedding/chart.md +++ b/_docs/v0.63/embedding/chart.md @@ -230,7 +230,7 @@ In the embedding wizard, this corresponds to the **Allow people to save new ques Customizing click behavior is only available in the [Modular embedding SDK](./sdk/introduction) for now. -When people click a data point in an interactive chart, Metabase shows a menu of actions. The [`mapQuestionClickActions`](./sdk/plugins) plugin lets you customize this: open the default menu, add custom actions, or perform an immediate action without a menu. +When people click a data point in an interactive chart, Metabase shows a menu of actions. The [`mapQuestionClickActions`](./sdk/api/MetabasePluginsConfig#mapquestionclickactions) SDK [plugin](./sdk/plugins) lets you customize this: add custom actions alongside the default ones, perform an immediate action without a menu, or prevent default actions from happening. Use it globally on `MetabaseProvider`, or on individual `InteractiveQuestion` components: diff --git a/_docs/v0.63/embedding/sdk/snippets/questions/interactive-question-click-actions.tsx b/_docs/v0.63/embedding/sdk/snippets/questions/interactive-question-click-actions.tsx index 5dbf82636a..be3bacb52b 100644 --- a/_docs/v0.63/embedding/sdk/snippets/questions/interactive-question-click-actions.tsx +++ b/_docs/v0.63/embedding/sdk/snippets/questions/interactive-question-click-actions.tsx @@ -16,7 +16,7 @@ const Example = () => { pluginsConfig={{ mapQuestionClickActions: (clickActions, clicked) => { if (clicked?.column?.display_name === "Last Name") { - // This adds a custom action to the menu when clicked on on "Last Name" column + // This adds a custom action to the menu return [ ...clickActions, { @@ -29,12 +29,12 @@ const Example = () => { } if (clicked?.column?.display_name === "Plan") { - // This performs an immediate action on "Plan" column instead of opening the menu + // This performs an immediate action instead of opening the menu return { onClick: () => alert("You clicked the Plan column!"), }; } - // default behavior (open Metabase's default click menu) on other columns + // default behavior (open Metabase's default click menu) return clickActions; }, }}