diff --git a/frontend/src/lib/components/InstanceSetting.svelte b/frontend/src/lib/components/InstanceSetting.svelte index 6b676131da..491a5775e3 100644 --- a/frontend/src/lib/components/InstanceSetting.svelte +++ b/frontend/src/lib/components/InstanceSetting.svelte @@ -124,6 +124,16 @@ } } + $effect(() => { + if (setting.key === 'license_key') { + const key = $values['license_key'] ?? '' + const { valid } = parseLicenseKey(key) + if (valid) { + $enterpriseLicense = key.split('.')[0] + } + } + }) + let pythonAvailableVersions: ListAvailablePythonVersionsResponse = $state([]) let isPyFetching = $state(false) diff --git a/frontend/src/lib/components/InstanceSettings.svelte b/frontend/src/lib/components/InstanceSettings.svelte index 12d389b160..24b41f8bcc 100644 --- a/frontend/src/lib/components/InstanceSettings.svelte +++ b/frontend/src/lib/components/InstanceSettings.svelte @@ -234,7 +234,7 @@ const jobSettings = settings['Jobs'] ?? [] const jobIsolation = jobSettings.find((s) => s.key === 'job_isolation') const retentionPeriod = jobSettings.find((s) => s.key === 'retention_period_secs') - const objectStorage = jobSettings.find((s) => s.key === 'object_store_cache_config') + const objectStorage = settings['Object Storage']?.find((s) => s.key === 'object_store_cache_config') return [...baseWithout, ...(jobIsolation ? [jobIsolation] : []), ...(licenseKey ? [licenseKey] : []), ...(retentionPeriod ? [retentionPeriod] : []), ...(objectStorage ? [objectStorage] : [])] } return base @@ -287,7 +287,8 @@ export function discardCategory(category: string) { if (category === 'Auth/OAuth/SAML') { for (const s of scimSamlSetting) { - $values[s.key] = JSON.parse(JSON.stringify(initialValues[s.key])) + const v = initialValues[s.key] + $values[s.key] = v !== undefined ? JSON.parse(JSON.stringify(v)) : undefined } oauths = JSON.parse(JSON.stringify(initialOauths)) requirePreexistingUserForOauth = initialRequirePreexistingUserForOauth @@ -297,7 +298,8 @@ } else { const categorySettings = getSettingsForCategory(category) for (const s of categorySettings) { - $values[s.key] = JSON.parse(JSON.stringify(initialValues[s.key])) + const v = initialValues[s.key] + $values[s.key] = v !== undefined ? JSON.parse(JSON.stringify(v)) : undefined } } } @@ -360,7 +362,8 @@ // Update only the saved category's initial values for (const s of categorySettings) { - initialValues[s.key] = JSON.parse(JSON.stringify($values[s.key])) + const v = $values[s.key] + initialValues[s.key] = v !== undefined ? JSON.parse(JSON.stringify(v)) : undefined } // Handle Auth/OAuth/SAML-specific saves @@ -561,7 +564,7 @@
{#each settings[category] as setting} - {#if setting.fieldType != 'slack_connect' && !(quickSetup && setting.hideInQuickSetup)} + {#if setting.fieldType != 'slack_connect' && !(quickSetup && setting.hideInQuickSetup) && !(quickSetup && category === 'Core' && setting.key === 'license_key')} closeDrawer?.()} @@ -574,7 +577,14 @@ {/if} {/each} {#if quickSetup && category === 'Core'} - {#each settings['Jobs'].filter((s) => s.key === 'job_isolation' || s.key === 'retention_period_secs') as setting} + {@const licenseKeySetting = settings['Core'].find((s) => s.key === 'license_key')} + {@const extraSettings = [ + ...settings['Jobs'].filter((s) => s.key === 'job_isolation'), + ...(licenseKeySetting ? [licenseKeySetting] : []), + ...settings['Jobs'].filter((s) => s.key === 'retention_period_secs'), + ...(settings['Object Storage']?.filter((s) => s.key === 'object_store_cache_config') ?? []) + ]} + {#each extraSettings as setting} closeDrawer?.()} diff --git a/frontend/src/lib/components/Login.svelte b/frontend/src/lib/components/Login.svelte index 6bb7693a26..b9c0de018d 100644 --- a/frontend/src/lib/components/Login.svelte +++ b/frontend/src/lib/components/Login.svelte @@ -201,6 +201,13 @@ loadLogins() + $effect(() => { + if (firstTime && !email && !password) { + email = 'admin@windmill.dev' + password = 'changeme' + } + }) + async function checkSmtpConfigured() { try { smtpConfigured = await UserService.isSmtpConfigured() @@ -361,9 +368,9 @@ {#if showPassword}
{#if firstTime} -
First time login: admin@windmill.dev / changeme
+

+ Welcome! Default credentials admin@windmill.dev / changeme have been prefilled. +

{/if}
{#if isCloudHosted()} diff --git a/frontend/src/lib/components/Toast.svelte b/frontend/src/lib/components/Toast.svelte index 4e963eea6e..44281db0d1 100644 --- a/frontend/src/lib/components/Toast.svelte +++ b/frontend/src/lib/components/Toast.svelte @@ -97,9 +97,9 @@ let showMore = $state(false) const MAX_MSG_LEN = 160 - let isLongMessage = $derived(message.length > MAX_MSG_LEN) + let isLongMessage = $derived((message ?? '').length > MAX_MSG_LEN) let displayMessage = $derived( - isLongMessage && !showMore ? message.slice(0, MAX_MSG_LEN) + '... ' : message + isLongMessage && !showMore ? (message ?? '').slice(0, MAX_MSG_LEN) + '... ' : (message ?? '') ) // let hover = $derived(Object.values(toastStates).some((state) => state.hover)) diff --git a/frontend/src/routes/(root)/(logged)/user/(user)/instance_settings/+page.svelte b/frontend/src/routes/(root)/(logged)/user/(user)/instance_settings/+page.svelte index 3716e1a4f8..b935ca8f80 100644 --- a/frontend/src/routes/(root)/(logged)/user/(user)/instance_settings/+page.svelte +++ b/frontend/src/routes/(root)/(logged)/user/(user)/instance_settings/+page.svelte @@ -163,7 +163,10 @@ accountError = '' accountSubmitting = true try { - const oldEmail = $superadmin + let oldEmail = $superadmin + if (!oldEmail) { + oldEmail = await UserService.getCurrentEmail() + } if (!oldEmail) { throw new Error('Could not determine current admin email') } @@ -211,7 +214,13 @@ sendUserToast('Account setup complete') goto( - '/user/logout?rd=' + encodeURIComponent('/user/login?email=' + encodeURIComponent(newEmail)) + '/user/logout?rd=' + + encodeURIComponent( + '/user/login?email=' + + encodeURIComponent(newEmail) + + '&password=' + + encodeURIComponent(newPassword) + ) ) } catch (e: any) { accountError = e?.body?.message || e?.body || e?.message || 'An error occurred' @@ -438,7 +447,10 @@ > Quick setup - + {/if}
diff --git a/frontend/src/routes/(root)/(logged)/user/(user)/logout/+page@.svelte b/frontend/src/routes/(root)/(logged)/user/(user)/logout/+page@.svelte index 818742ff45..dabbc233f0 100644 --- a/frontend/src/routes/(root)/(logged)/user/(user)/logout/+page@.svelte +++ b/frontend/src/routes/(root)/(logged)/user/(user)/logout/+page@.svelte @@ -1,27 +1,35 @@