diff --git a/backend/windmill-api/src/settings.rs b/backend/windmill-api/src/settings.rs index e8c000c788..3c71f22eb3 100644 --- a/backend/windmill-api/src/settings.rs +++ b/backend/windmill-api/src/settings.rs @@ -31,7 +31,7 @@ use windmill_common::{ error::{self, JsonResult, Result}, global_settings::{ AUTOMATE_USERNAME_CREATION_SETTING, EMAIL_DOMAIN_SETTING, ENV_SETTINGS, - HUB_BASE_URL_SETTING, + HUB_ACCESSIBLE_URL_SETTING, HUB_BASE_URL_SETTING, }, server::Smtp, utils::send_email, @@ -262,6 +262,7 @@ pub async fn get_global_setting( && !key.starts_with("default_success_handler_") && key != AUTOMATE_USERNAME_CREATION_SETTING && key != HUB_BASE_URL_SETTING + && key != HUB_ACCESSIBLE_URL_SETTING && key != EMAIL_DOMAIN_SETTING { require_super_admin(&db, &authed.email).await?; diff --git a/backend/windmill-common/src/global_settings.rs b/backend/windmill-common/src/global_settings.rs index 36b80c9fd7..b0420ca248 100644 --- a/backend/windmill-common/src/global_settings.rs +++ b/backend/windmill-common/src/global_settings.rs @@ -27,6 +27,7 @@ pub const OBJECT_STORE_CACHE_CONFIG_SETTING: &str = "object_store_cache_config"; pub const AUTOMATE_USERNAME_CREATION_SETTING: &str = "automate_username_creation"; pub const HUB_BASE_URL_SETTING: &str = "hub_base_url"; +pub const HUB_ACCESSIBLE_URL_SETTING: &str = "hub_accessible_url"; pub const CRITICAL_ERROR_CHANNELS_SETTING: &str = "critical_error_channels"; pub const DEV_INSTANCE_SETTING: &str = "dev_instance"; pub const JWT_SECRET_SETTING: &str = "jwt_secret"; diff --git a/frontend/src/lib/components/InstanceSettings.svelte b/frontend/src/lib/components/InstanceSettings.svelte index 8709a9f478..e5f4bb0b4d 100644 --- a/frontend/src/lib/components/InstanceSettings.svelte +++ b/frontend/src/lib/components/InstanceSettings.svelte @@ -13,7 +13,7 @@ import KeycloakSetting from './KeycloakSetting.svelte' import Alert from './common/alert/Alert.svelte' import { isCloudHosted } from '$lib/cloud' - import { capitalize, classNames } from '$lib/utils' + import { capitalize, classNames, sleep } from '$lib/utils' import { enterpriseLicense } from '$lib/stores' import CustomOauth from './CustomOauth.svelte' import { @@ -111,6 +111,7 @@ } export async function saveSettings() { + let shouldReloadPage = false if (values) { const allSettings = Object.values(settings).flatMap((x) => Object.entries(x)) let licenseKeySet = false @@ -129,6 +130,9 @@ if (x.key == 'license_key') { licenseKeySet = true } + if (x.requiresReloadOnChange) { + shouldReloadPage = true + } return await SettingService.setGlobal({ key: x.key, requestBody: { value: values?.[x.key] } @@ -158,8 +162,14 @@ } else { console.error('Values not loaded') } - sendUserToast('Settings updated') - dispatch('saved') + if (shouldReloadPage) { + sendUserToast('Settings updated, reloading page...') + await sleep(1000) + window.location.reload() + } else { + sendUserToast('Settings updated') + dispatch('saved') + } } let oauths: Record = {} @@ -548,7 +558,7 @@
{#each settings[category] as setting} - {#if (!setting.cloudonly || isCloudHosted()) && showSetting(setting.key, values)} + {#if (!setting.cloudonly || isCloudHosted()) && showSetting(setting.key, values) && !(setting.hiddenIfNull && values[setting.key] == null)} {#if setting.ee_only != undefined && !$enterpriseLicense}
@@ -579,6 +589,20 @@ : ''} bind:value={values[setting.key]} /> + {#if setting.advancedToggle} +
+ { + if (setting.advancedToggle) { + values = setting.advancedToggle.onChange(values) + } + }} + /> +
+ {/if} {:else if setting.fieldType == 'textarea'}