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 627158a6f3..0000000000 Binary files a/_docs/latest/cloud/images/migrate-button.png and /dev/null differ 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; }, }}