windmill-components 1.695.0 → 1.698.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/sharedUtils/assets/tokens/colorTokensConfig.d.ts +2 -0
- package/dist/sharedUtils/base.d.ts +1 -0
- package/dist/sharedUtils/cloud.d.ts +1 -0
- package/dist/sharedUtils/common.d.ts +111 -0
- package/dist/sharedUtils/components/apps/components/display/dbtable/queries/count.d.ts +5 -0
- package/dist/sharedUtils/components/apps/components/display/dbtable/queries/delete.d.ts +5 -0
- package/dist/sharedUtils/components/apps/components/display/dbtable/queries/insert.d.ts +5 -0
- package/dist/sharedUtils/components/apps/components/display/dbtable/queries/select.d.ts +13 -0
- package/dist/sharedUtils/components/apps/components/display/dbtable/queries/update.d.ts +11 -0
- package/dist/sharedUtils/components/apps/components/display/dbtable/utils.d.ts +95 -0
- package/dist/sharedUtils/components/apps/editor/appPolicy.d.ts +6 -0
- package/dist/sharedUtils/components/apps/editor/appUtilsCore.d.ts +7 -0
- package/dist/sharedUtils/components/apps/editor/appUtilsS3.d.ts +33 -0
- package/dist/sharedUtils/components/apps/editor/commonAppUtils.d.ts +10 -0
- package/dist/sharedUtils/components/apps/editor/component/components.d.ts +5371 -0
- package/dist/sharedUtils/components/apps/editor/component/default-codes.d.ts +3 -0
- package/dist/sharedUtils/components/apps/editor/component/index.d.ts +3 -0
- package/dist/sharedUtils/components/apps/editor/component/sets.d.ts +7 -0
- package/dist/sharedUtils/components/apps/editor/componentsPanel/componentDefaultProps.d.ts +3 -0
- package/dist/sharedUtils/components/apps/gridUtils.d.ts +14 -0
- package/dist/sharedUtils/components/apps/inputType.d.ts +178 -0
- package/dist/sharedUtils/components/apps/rx.d.ts +29 -0
- package/dist/sharedUtils/components/apps/sharedTypes.d.ts +21 -0
- package/dist/sharedUtils/components/apps/types.d.ts +274 -0
- package/dist/sharedUtils/components/assets/lib.d.ts +25 -0
- package/dist/sharedUtils/components/common/alert/model.d.ts +2 -0
- package/dist/sharedUtils/components/common/badge/model.d.ts +8 -0
- package/dist/sharedUtils/components/common/button/model.d.ts +45 -0
- package/dist/sharedUtils/components/common/fileInput/model.d.ts +1 -0
- package/dist/sharedUtils/components/common/index.d.ts +24 -0
- package/dist/sharedUtils/components/common/skeleton/model.d.ts +21 -0
- package/dist/sharedUtils/components/dbTypes.d.ts +14 -0
- package/dist/sharedUtils/components/diff_drawer.d.ts +26 -0
- package/dist/sharedUtils/components/ducklake.d.ts +1 -0
- package/dist/sharedUtils/components/flows/scheduleUtils.d.ts +7 -0
- package/dist/sharedUtils/components/icons/index.d.ts +101 -0
- package/dist/sharedUtils/components/random_positive_adjetive.d.ts +1 -0
- package/dist/sharedUtils/components/raw_apps/rawAppPolicy.d.ts +10 -0
- package/dist/sharedUtils/components/raw_apps/utils.d.ts +15 -0
- package/dist/sharedUtils/components/triggers/email/utils.d.ts +4 -0
- package/dist/sharedUtils/components/triggers/gcp/utils.d.ts +2 -0
- package/dist/sharedUtils/components/triggers/http/utils.d.ts +11 -0
- package/dist/sharedUtils/components/triggers/kafka/utils.d.ts +2 -0
- package/dist/sharedUtils/components/triggers/mqtt/utils.d.ts +2 -0
- package/dist/sharedUtils/components/triggers/nats/utils.d.ts +2 -0
- package/dist/sharedUtils/components/triggers/postgres/utils.d.ts +8 -0
- package/dist/sharedUtils/components/triggers/sqs/utils.d.ts +2 -0
- package/dist/sharedUtils/components/triggers/triggers.svelte.d.ts +32 -0
- package/dist/sharedUtils/components/triggers/utils.d.ts +80 -0
- package/dist/sharedUtils/components/triggers/websocket/utils.d.ts +2 -0
- package/dist/sharedUtils/components/triggers.d.ts +20 -0
- package/dist/sharedUtils/gen/core/ApiError.d.ts +10 -0
- package/dist/sharedUtils/gen/core/ApiRequestOptions.d.ts +13 -0
- package/dist/sharedUtils/gen/core/ApiResult.d.ts +7 -0
- package/dist/sharedUtils/gen/core/CancelablePromise.d.ts +26 -0
- package/dist/sharedUtils/gen/core/OpenAPI.d.ts +27 -0
- package/dist/sharedUtils/gen/core/request.d.ts +29 -0
- package/dist/sharedUtils/gen/index.d.ts +6 -0
- package/dist/sharedUtils/gen/schemas.gen.d.ts +7036 -0
- package/dist/sharedUtils/gen/services.gen.d.ts +6047 -0
- package/dist/sharedUtils/gen/types.gen.d.ts +21881 -0
- package/dist/sharedUtils/history.svelte.d.ts +9 -0
- package/dist/sharedUtils/hub.d.ts +49 -0
- package/dist/sharedUtils/jsr.json +6 -0
- package/dist/sharedUtils/lib.d.ts +5 -0
- package/dist/sharedUtils/lib.es.js +1588 -0
- package/dist/sharedUtils/package.json +12 -0
- package/dist/sharedUtils/schema.d.ts +3 -0
- package/dist/sharedUtils/stores.d.ts +97 -0
- package/dist/sharedUtils/svelte5Utils.svelte.d.ts +80 -0
- package/dist/sharedUtils/toast.d.ts +8 -0
- package/dist/sharedUtils/utils.d.ts +265 -0
- package/package/components/AppConnectInner.svelte +38 -5
- package/package/components/CompareWorkspaces.svelte +142 -486
- package/package/components/Editor.svelte +5 -4
- package/package/components/Editor.svelte.d.ts +1 -0
- package/package/components/FilterSearchbar.svelte +3 -1
- package/package/components/FilterSearchbar.svelte.d.ts +1 -0
- package/package/components/ForkWorkspaceBanner.svelte +16 -0
- package/package/components/LogViewer.svelte +51 -60
- package/package/components/OnBehalfOfSelector.svelte +10 -7
- package/package/components/ResourceEditor.svelte +198 -311
- package/package/components/ResourceEditor.svelte.d.ts +3 -3
- package/package/components/ResourceEditorDrawer.svelte +17 -6
- package/package/components/ResourceForm.svelte +235 -0
- package/package/components/ResourceForm.svelte.d.ts +25 -0
- package/package/components/RunsPage.svelte +1 -0
- package/package/components/ScriptBuilder.svelte +1 -0
- package/package/components/ScriptEditor.svelte +10 -3
- package/package/components/ScriptEditor.svelte.d.ts +1 -0
- package/package/components/TaggedTextInput.svelte +4 -1
- package/package/components/TaggedTextInput.svelte.d.ts +2 -0
- package/package/components/VariableEditor.svelte +177 -199
- package/package/components/VariableEditor.svelte.d.ts +1 -2
- package/package/components/VariableForm.svelte +133 -0
- package/package/components/VariableForm.svelte.d.ts +22 -0
- package/package/components/WsSpecificVersions.svelte +39 -0
- package/package/components/WsSpecificVersions.svelte.d.ts +9 -0
- package/package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +0 -1
- package/package/components/apps/editor/AppEditorHeaderDeploy.svelte.d.ts +1 -1
- package/package/components/common/table/AppRow.svelte +2 -1
- package/package/components/common/table/AppRow.svelte.d.ts +1 -0
- package/package/components/common/table/FlowRow.svelte +2 -1
- package/package/components/common/table/FlowRow.svelte.d.ts +1 -0
- package/package/components/common/table/RawAppRow.svelte +2 -1
- package/package/components/common/table/RawAppRow.svelte.d.ts +1 -0
- package/package/components/common/table/Row.svelte +11 -3
- package/package/components/common/table/Row.svelte.d.ts +2 -1
- package/package/components/common/table/RowIcon.svelte +18 -2
- package/package/components/common/table/RowIcon.svelte.d.ts +1 -1
- package/package/components/common/table/ScriptRow.svelte +2 -1
- package/package/components/common/table/ScriptRow.svelte.d.ts +1 -0
- package/package/components/copilot/autocomplete/Autocompletor.d.ts +3 -1
- package/package/components/copilot/autocomplete/Autocompletor.js +5 -2
- package/package/components/copilot/autocomplete/request.d.ts +1 -0
- package/package/components/copilot/autocomplete/request.js +1 -1
- package/package/components/copilot/chat/AIChatManager.svelte.js +14 -4
- package/package/components/copilot/chat/AiChatLayout.svelte +2 -0
- package/package/components/copilot/chat/ContextManager.svelte.d.ts +1 -0
- package/package/components/copilot/chat/CreatedResourceActionDrawers.svelte +129 -0
- package/package/components/copilot/chat/CreatedResourceActionDrawers.svelte.d.ts +4 -0
- package/package/components/copilot/chat/ToolExecutionDisplay.svelte +14 -6
- package/package/components/copilot/chat/ToolMessageActions.svelte +73 -0
- package/package/components/copilot/chat/ToolMessageActions.svelte.d.ts +7 -0
- package/package/components/copilot/chat/createdResourceActions.svelte.d.ts +6 -0
- package/package/components/copilot/chat/createdResourceActions.svelte.js +29 -0
- package/package/components/copilot/chat/script/core.d.ts +6 -2
- package/package/components/copilot/chat/script/core.js +13 -7
- package/package/components/copilot/chat/script/wacPrompt.test.d.ts +1 -0
- package/package/components/copilot/chat/script/wacPrompt.test.js +25 -0
- package/package/components/copilot/chat/shared.d.ts +12 -0
- package/package/components/copilot/chat/shared.test.js +23 -2
- package/package/components/copilot/chat/workspaceTools.js +34 -4
- package/package/components/flows/content/ScriptEditorDrawer.svelte +1 -0
- package/package/components/graph/wacToFlow.js +1 -1
- package/package/components/graph/wacToFlow.test.d.ts +1 -0
- package/package/components/graph/wacToFlow.test.js +17 -0
- package/package/components/home/Item.svelte +5 -1
- package/package/components/home/Item.svelte.d.ts +1 -0
- package/package/components/home/ItemsList.svelte +260 -3
- package/package/components/instanceSettings/SecretBackendConfig.svelte +457 -88
- package/package/components/runs/useJobsLoader.svelte.js +5 -11
- package/package/components/sidebar/WorkspaceMenu.svelte +19 -5
- package/package/externalDomain.d.ts +2 -0
- package/package/externalDomain.js +16 -0
- package/package/gen/core/OpenAPI.js +1 -1
- package/package/gen/types.gen.d.ts +0 -112
- package/package/hubPaths.json +2 -2
- package/package/system_prompts/index.d.ts +1 -1
- package/package/system_prompts/index.js +22 -3
- package/package/system_prompts/prompts.d.ts +2 -2
- package/package/system_prompts/prompts.js +6 -3
- package/package/utils_deployable.d.ts +162 -638
- package/package/utils_deployable.js +75 -143
- package/package/utils_workspace_deploy.d.ts +10 -4
- package/package/utils_workspace_deploy.js +167 -42
- package/package.json +7 -3
|
@@ -42,7 +42,8 @@ let vaultDisabled = $derived(!$enterpriseLicense);
|
|
|
42
42
|
function setBackendType(type) {
|
|
43
43
|
if (!type)
|
|
44
44
|
return;
|
|
45
|
-
if ((type === 'HashiCorpVault' || type === 'AzureKeyVault' || type === 'AwsSecretsManager') &&
|
|
45
|
+
if ((type === 'HashiCorpVault' || type === 'AzureKeyVault' || type === 'AwsSecretsManager') &&
|
|
46
|
+
vaultDisabled)
|
|
46
47
|
return;
|
|
47
48
|
if (type === 'Database') {
|
|
48
49
|
$values['secret_backend'] = { type: 'Database' };
|
|
@@ -80,13 +81,23 @@ function setBackendType(type) {
|
|
|
80
81
|
}
|
|
81
82
|
}
|
|
82
83
|
function setAuthMethod(method) {
|
|
83
|
-
if (!method ||
|
|
84
|
+
if (!method ||
|
|
85
|
+
!$values['secret_backend'] ||
|
|
86
|
+
$values['secret_backend'].type !== 'HashiCorpVault')
|
|
84
87
|
return;
|
|
85
88
|
if (method === 'token') {
|
|
86
|
-
$values['secret_backend'] = {
|
|
89
|
+
$values['secret_backend'] = {
|
|
90
|
+
...$values['secret_backend'],
|
|
91
|
+
jwt_role: null,
|
|
92
|
+
token: $values['secret_backend'].token ?? ''
|
|
93
|
+
};
|
|
87
94
|
}
|
|
88
95
|
else if (method === 'jwt') {
|
|
89
|
-
$values['secret_backend'] = {
|
|
96
|
+
$values['secret_backend'] = {
|
|
97
|
+
...$values['secret_backend'],
|
|
98
|
+
token: null,
|
|
99
|
+
jwt_role: $values['secret_backend'].jwt_role ?? 'windmill-secrets'
|
|
100
|
+
};
|
|
90
101
|
}
|
|
91
102
|
}
|
|
92
103
|
function getVaultSettings() {
|
|
@@ -138,7 +149,9 @@ async function migrateSecretsToDatabase() {
|
|
|
138
149
|
return;
|
|
139
150
|
migratingToDatabase = true;
|
|
140
151
|
try {
|
|
141
|
-
const report = await SettingService.migrateSecretsToDatabase({
|
|
152
|
+
const report = await SettingService.migrateSecretsToDatabase({
|
|
153
|
+
requestBody: getVaultSettings()
|
|
154
|
+
});
|
|
142
155
|
if (report.failed_count > 0)
|
|
143
156
|
sendUserToast(`Migration: ${report.migrated_count}/${report.total_secrets} migrated, ${report.failed_count} failed`, true);
|
|
144
157
|
else
|
|
@@ -190,7 +203,9 @@ async function migrateSecretsToAzureKv() {
|
|
|
190
203
|
return;
|
|
191
204
|
migratingToAzureKv = true;
|
|
192
205
|
try {
|
|
193
|
-
const report = await SettingService.migrateSecretsToAzureKv({
|
|
206
|
+
const report = await SettingService.migrateSecretsToAzureKv({
|
|
207
|
+
requestBody: getAzureKvSettings()
|
|
208
|
+
});
|
|
194
209
|
if (report.failed_count > 0)
|
|
195
210
|
sendUserToast(`Migration: ${report.migrated_count}/${report.total_secrets} migrated, ${report.failed_count} failed`, true);
|
|
196
211
|
else
|
|
@@ -209,7 +224,9 @@ async function migrateSecretsFromAzureKv() {
|
|
|
209
224
|
return;
|
|
210
225
|
migratingFromAzureKv = true;
|
|
211
226
|
try {
|
|
212
|
-
const report = await SettingService.migrateSecretsFromAzureKv({
|
|
227
|
+
const report = await SettingService.migrateSecretsFromAzureKv({
|
|
228
|
+
requestBody: getAzureKvSettings()
|
|
229
|
+
});
|
|
213
230
|
if (report.failed_count > 0)
|
|
214
231
|
sendUserToast(`Migration: ${report.migrated_count}/${report.total_secrets} migrated, ${report.failed_count} failed`, true);
|
|
215
232
|
else
|
|
@@ -228,8 +245,7 @@ function isAzureKvConfigValid() {
|
|
|
228
245
|
return false;
|
|
229
246
|
return ($values['secret_backend'].vault_url?.trim() !== '' &&
|
|
230
247
|
$values['secret_backend'].tenant_id?.trim() !== '' &&
|
|
231
|
-
$values['secret_backend'].client_id?.trim() !== ''
|
|
232
|
-
(!!$values['secret_backend'].client_secret?.trim() || !!$values['secret_backend'].token?.trim()));
|
|
248
|
+
$values['secret_backend'].client_id?.trim() !== '');
|
|
233
249
|
}
|
|
234
250
|
function getAwsSmSettings() {
|
|
235
251
|
return {
|
|
@@ -279,7 +295,9 @@ async function migrateSecretsFromAwsSm() {
|
|
|
279
295
|
return;
|
|
280
296
|
migratingFromAwsSm = true;
|
|
281
297
|
try {
|
|
282
|
-
const report = await SettingService.migrateSecretsFromAwsSm({
|
|
298
|
+
const report = await SettingService.migrateSecretsFromAwsSm({
|
|
299
|
+
requestBody: getAwsSmSettings()
|
|
300
|
+
});
|
|
283
301
|
if (report.failed_count > 0)
|
|
284
302
|
sendUserToast(`Migration: ${report.migrated_count}/${report.total_secrets} migrated, ${report.failed_count} failed`, true);
|
|
285
303
|
else
|
|
@@ -305,10 +323,39 @@ let baseUrl = $derived($values['base_url'] ?? 'https://your-windmill-instance.co
|
|
|
305
323
|
<div class="flex flex-col gap-2 mt-1">
|
|
306
324
|
<ToggleButtonGroup selected={selectedType} onSelected={(v) => setBackendType(v)}>
|
|
307
325
|
{#snippet children({ item: toggleButton })}
|
|
308
|
-
<ToggleButton
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
326
|
+
<ToggleButton
|
|
327
|
+
value="Database"
|
|
328
|
+
label="Database"
|
|
329
|
+
tooltip="Store secrets encrypted in the database (default)"
|
|
330
|
+
item={toggleButton}
|
|
331
|
+
/>
|
|
332
|
+
<ToggleButton
|
|
333
|
+
value="HashiCorpVault"
|
|
334
|
+
label="HashiCorp Vault (Beta)"
|
|
335
|
+
tooltip={vaultDisabled
|
|
336
|
+
? 'Requires Enterprise Edition'
|
|
337
|
+
: 'Store secrets in HashiCorp Vault'}
|
|
338
|
+
item={toggleButton}
|
|
339
|
+
disabled={vaultDisabled}
|
|
340
|
+
/>
|
|
341
|
+
<ToggleButton
|
|
342
|
+
value="AzureKeyVault"
|
|
343
|
+
label="Azure Key Vault"
|
|
344
|
+
tooltip={vaultDisabled
|
|
345
|
+
? 'Requires Enterprise Edition'
|
|
346
|
+
: 'Store secrets in Azure Key Vault'}
|
|
347
|
+
item={toggleButton}
|
|
348
|
+
disabled={vaultDisabled}
|
|
349
|
+
/>
|
|
350
|
+
<ToggleButton
|
|
351
|
+
value="AwsSecretsManager"
|
|
352
|
+
label="AWS Secrets Manager (Beta)"
|
|
353
|
+
tooltip={vaultDisabled
|
|
354
|
+
? 'Requires Enterprise Edition'
|
|
355
|
+
: 'Store secrets in AWS Secrets Manager'}
|
|
356
|
+
item={toggleButton}
|
|
357
|
+
disabled={vaultDisabled}
|
|
358
|
+
/>
|
|
312
359
|
{/snippet}
|
|
313
360
|
</ToggleButtonGroup>
|
|
314
361
|
{#if vaultDisabled}
|
|
@@ -323,7 +370,10 @@ let baseUrl = $derived($values['base_url'] ?? 'https://your-windmill-instance.co
|
|
|
323
370
|
<Database class="text-primary" size={20} />
|
|
324
371
|
<div>
|
|
325
372
|
<p class="text-sm font-medium text-emphasis">Database Storage (Default)</p>
|
|
326
|
-
<p class="text-xs text-secondary"
|
|
373
|
+
<p class="text-xs text-secondary"
|
|
374
|
+
>Secrets are encrypted using workspace-specific keys and stored in the PostgreSQL
|
|
375
|
+
database.</p
|
|
376
|
+
>
|
|
327
377
|
</div>
|
|
328
378
|
</div>
|
|
329
379
|
{:else if selectedType === 'HashiCorpVault'}
|
|
@@ -331,46 +381,101 @@ let baseUrl = $derived($values['base_url'] ?? 'https://your-windmill-instance.co
|
|
|
331
381
|
<div class="flex items-center gap-2 mb-4">
|
|
332
382
|
<Lock class="text-primary" size={20} />
|
|
333
383
|
<div>
|
|
334
|
-
<p class="text-sm font-medium text-emphasis"
|
|
335
|
-
|
|
384
|
+
<p class="text-sm font-medium text-emphasis"
|
|
385
|
+
>HashiCorp Vault Configuration <span
|
|
386
|
+
class="ml-2 px-1.5 py-0.5 text-2xs font-medium bg-yellow-100 text-yellow-800 dark:bg-yellow-900 dark:text-yellow-200 rounded"
|
|
387
|
+
>Beta</span
|
|
388
|
+
></p
|
|
389
|
+
>
|
|
390
|
+
<p class="text-xs text-secondary"
|
|
391
|
+
>Store secrets in an external HashiCorp Vault instance.</p
|
|
392
|
+
>
|
|
336
393
|
</div>
|
|
337
394
|
</div>
|
|
338
395
|
<div class="grid grid-cols-1 gap-4">
|
|
339
396
|
<div class="flex flex-col gap-1">
|
|
340
|
-
<label for="vault_address" class="block text-xs font-semibold text-emphasis"
|
|
341
|
-
|
|
397
|
+
<label for="vault_address" class="block text-xs font-semibold text-emphasis"
|
|
398
|
+
>Vault Address</label
|
|
399
|
+
>
|
|
400
|
+
<TextInput
|
|
401
|
+
inputProps={{
|
|
402
|
+
type: 'text',
|
|
403
|
+
id: 'vault_address',
|
|
404
|
+
placeholder: 'https://vault.company.com:8200',
|
|
405
|
+
disabled
|
|
406
|
+
}}
|
|
407
|
+
bind:value={$values['secret_backend'].address}
|
|
408
|
+
/>
|
|
342
409
|
</div>
|
|
343
410
|
<div class="flex flex-col gap-1">
|
|
344
|
-
<label for="vault_mount_path" class="block text-xs font-semibold text-emphasis"
|
|
411
|
+
<label for="vault_mount_path" class="block text-xs font-semibold text-emphasis"
|
|
412
|
+
>KV Mount Path</label
|
|
413
|
+
>
|
|
345
414
|
<span class="text-2xs text-secondary">The KV v2 secrets engine mount path in Vault</span>
|
|
346
|
-
<TextInput
|
|
415
|
+
<TextInput
|
|
416
|
+
inputProps={{ type: 'text', id: 'vault_mount_path', placeholder: 'windmill', disabled }}
|
|
417
|
+
bind:value={$values['secret_backend'].mount_path}
|
|
418
|
+
/>
|
|
347
419
|
</div>
|
|
348
420
|
<div class="flex flex-col gap-2">
|
|
349
421
|
<span class="block text-xs font-semibold text-emphasis">Authentication Method</span>
|
|
350
422
|
<ToggleButtonGroup selected={authMethod} onSelected={(v) => setAuthMethod(v)}>
|
|
351
423
|
{#snippet children({ item: toggleButton })}
|
|
352
|
-
<ToggleButton
|
|
353
|
-
|
|
424
|
+
<ToggleButton
|
|
425
|
+
value="jwt"
|
|
426
|
+
label="JWT Auth"
|
|
427
|
+
tooltip="Authenticate using Windmill-signed JWTs"
|
|
428
|
+
item={toggleButton}
|
|
429
|
+
{disabled}
|
|
430
|
+
/>
|
|
431
|
+
<ToggleButton
|
|
432
|
+
value="token"
|
|
433
|
+
label="Static Token"
|
|
434
|
+
tooltip="Use a static Vault token"
|
|
435
|
+
item={toggleButton}
|
|
436
|
+
{disabled}
|
|
437
|
+
/>
|
|
354
438
|
{/snippet}
|
|
355
439
|
</ToggleButtonGroup>
|
|
356
440
|
</div>
|
|
357
441
|
{#if authMethod === 'token'}
|
|
358
442
|
<div class="flex flex-col gap-1 p-3 bg-surface-secondary rounded-lg">
|
|
359
|
-
<label for="vault_token" class="block text-xs font-semibold text-emphasis"
|
|
360
|
-
|
|
443
|
+
<label for="vault_token" class="block text-xs font-semibold text-emphasis"
|
|
444
|
+
>Vault Token</label
|
|
445
|
+
>
|
|
446
|
+
<span class="text-2xs text-secondary"
|
|
447
|
+
>Static token. Recommended only for testing/development.</span
|
|
448
|
+
>
|
|
361
449
|
<Password bind:password={$values['secret_backend'].token} small {disabled} />
|
|
362
450
|
</div>
|
|
363
451
|
{:else}
|
|
364
452
|
<div class="flex flex-col gap-2 p-3 bg-surface-secondary rounded-lg">
|
|
365
|
-
<label for="vault_jwt_role" class="block text-xs font-semibold text-emphasis"
|
|
366
|
-
|
|
367
|
-
|
|
453
|
+
<label for="vault_jwt_role" class="block text-xs font-semibold text-emphasis"
|
|
454
|
+
>JWT Auth Role</label
|
|
455
|
+
>
|
|
456
|
+
<span class="text-2xs text-secondary"
|
|
457
|
+
>The JWT authentication role configured in Vault.</span
|
|
458
|
+
>
|
|
459
|
+
<TextInput
|
|
460
|
+
inputProps={{
|
|
461
|
+
type: 'text',
|
|
462
|
+
id: 'vault_jwt_role',
|
|
463
|
+
placeholder: 'windmill-secrets',
|
|
464
|
+
disabled
|
|
465
|
+
}}
|
|
466
|
+
bind:value={$values['secret_backend'].jwt_role}
|
|
467
|
+
/>
|
|
368
468
|
<details class="mt-2">
|
|
369
|
-
<summary class="text-xs font-medium text-secondary cursor-pointer hover:text-primary"
|
|
469
|
+
<summary class="text-xs font-medium text-secondary cursor-pointer hover:text-primary"
|
|
470
|
+
>Vault JWT Setup Instructions</summary
|
|
471
|
+
>
|
|
370
472
|
<div class="mt-2 p-2 bg-surface rounded text-2xs text-secondary space-y-2">
|
|
371
473
|
<p>Configure Vault to accept JWTs from Windmill:</p>
|
|
372
|
-
<div
|
|
373
|
-
|
|
474
|
+
<div
|
|
475
|
+
class="bg-gray-100 dark:bg-gray-800 p-2 rounded font-mono text-2xs overflow-x-auto"
|
|
476
|
+
>
|
|
477
|
+
<pre
|
|
478
|
+
># Enable JWT auth method
|
|
374
479
|
vault auth enable jwt
|
|
375
480
|
|
|
376
481
|
# Configure JWT auth with Windmill's JWKS endpoint
|
|
@@ -394,37 +499,82 @@ vault write auth/jwt/role/windmill-secrets \
|
|
|
394
499
|
bound_audiences="{baseUrl}" \
|
|
395
500
|
user_claim="email" \
|
|
396
501
|
policies="windmill-secrets" \
|
|
397
|
-
ttl="1h"</pre
|
|
502
|
+
ttl="1h"</pre
|
|
503
|
+
>
|
|
398
504
|
</div>
|
|
399
505
|
</div>
|
|
400
506
|
</details>
|
|
401
507
|
</div>
|
|
402
508
|
{/if}
|
|
403
509
|
<div class="flex flex-col gap-1">
|
|
404
|
-
<label for="vault_namespace" class="block text-xs font-semibold text-emphasis"
|
|
510
|
+
<label for="vault_namespace" class="block text-xs font-semibold text-emphasis"
|
|
511
|
+
>Namespace (optional)</label
|
|
512
|
+
>
|
|
405
513
|
<span class="text-2xs text-secondary">Vault Enterprise namespace</span>
|
|
406
|
-
<TextInput
|
|
514
|
+
<TextInput
|
|
515
|
+
inputProps={{
|
|
516
|
+
type: 'text',
|
|
517
|
+
id: 'vault_namespace',
|
|
518
|
+
placeholder: 'admin/my-namespace',
|
|
519
|
+
disabled
|
|
520
|
+
}}
|
|
521
|
+
bind:value={$values['secret_backend'].namespace}
|
|
522
|
+
/>
|
|
407
523
|
</div>
|
|
408
524
|
<div class="flex flex-col gap-1">
|
|
409
|
-
<Toggle
|
|
410
|
-
|
|
525
|
+
<Toggle
|
|
526
|
+
id="vault_skip_ssl_verify"
|
|
527
|
+
{disabled}
|
|
528
|
+
bind:checked={$values['secret_backend'].skip_ssl_verify}
|
|
529
|
+
size="xs"
|
|
530
|
+
options={{ right: 'Skip TLS certificate verification' }}
|
|
531
|
+
/>
|
|
532
|
+
<span class="text-2xs text-secondary"
|
|
533
|
+
>Disables TLS verification when connecting to Vault. Only enable for self-signed
|
|
534
|
+
certificates in development.</span
|
|
535
|
+
>
|
|
411
536
|
</div>
|
|
412
537
|
</div>
|
|
413
538
|
<div class="flex flex-col gap-4 pt-4 border-t">
|
|
414
|
-
<Button
|
|
539
|
+
<Button
|
|
540
|
+
unifiedSize="md"
|
|
541
|
+
variant="accent"
|
|
542
|
+
onclick={testVaultConnection}
|
|
543
|
+
disabled={disabled || !isVaultConfigValid() || testingConnection}
|
|
544
|
+
loading={testingConnection}
|
|
545
|
+
startIcon={{ icon: Server }}>Test Connection</Button
|
|
546
|
+
>
|
|
415
547
|
<div class="flex flex-col gap-4 pt-4 border-t">
|
|
416
548
|
<span class="block text-xs font-semibold text-emphasis">Secret Migration</span>
|
|
417
|
-
<span class="text-2xs text-secondary"
|
|
549
|
+
<span class="text-2xs text-secondary"
|
|
550
|
+
>Original values are NOT deleted to allow for rollback.</span
|
|
551
|
+
>
|
|
418
552
|
<div class="flex gap-4">
|
|
419
553
|
<div class="flex-1 p-3 border rounded-lg">
|
|
420
|
-
<div class="flex items-center gap-2 mb-2"
|
|
554
|
+
<div class="flex items-center gap-2 mb-2"
|
|
555
|
+
><Database size={16} /><ArrowRight size={16} /><Lock size={16} /></div
|
|
556
|
+
>
|
|
421
557
|
<p class="text-xs font-medium mb-2">Database → Vault</p>
|
|
422
|
-
<Button
|
|
558
|
+
<Button
|
|
559
|
+
unifiedSize="sm"
|
|
560
|
+
variant="default"
|
|
561
|
+
onclick={() => (migrateToVaultModalOpen = true)}
|
|
562
|
+
disabled={disabled || !isVaultConfigValid() || migratingToVault}
|
|
563
|
+
startIcon={{ icon: ArrowRight }}>Migrate to Vault</Button
|
|
564
|
+
>
|
|
423
565
|
</div>
|
|
424
566
|
<div class="flex-1 p-3 border rounded-lg">
|
|
425
|
-
<div class="flex items-center gap-2 mb-2"
|
|
567
|
+
<div class="flex items-center gap-2 mb-2"
|
|
568
|
+
><Lock size={16} /><ArrowLeft size={16} /><Database size={16} /></div
|
|
569
|
+
>
|
|
426
570
|
<p class="text-xs font-medium mb-2">Vault → Database</p>
|
|
427
|
-
<Button
|
|
571
|
+
<Button
|
|
572
|
+
unifiedSize="sm"
|
|
573
|
+
variant="default"
|
|
574
|
+
onclick={() => (migrateToDatabaseModalOpen = true)}
|
|
575
|
+
disabled={disabled || !isVaultConfigValid() || migratingToDatabase}
|
|
576
|
+
startIcon={{ icon: ArrowLeft }}>Migrate to Database</Button
|
|
577
|
+
>
|
|
428
578
|
</div>
|
|
429
579
|
</div>
|
|
430
580
|
</div>
|
|
@@ -441,42 +591,109 @@ vault write auth/jwt/role/windmill-secrets \
|
|
|
441
591
|
</div>
|
|
442
592
|
<div class="grid grid-cols-1 gap-4">
|
|
443
593
|
<div class="flex flex-col gap-1">
|
|
444
|
-
<label for="azure_vault_url" class="block text-xs font-semibold text-emphasis"
|
|
445
|
-
|
|
594
|
+
<label for="azure_vault_url" class="block text-xs font-semibold text-emphasis"
|
|
595
|
+
>Vault URL</label
|
|
596
|
+
>
|
|
597
|
+
<TextInput
|
|
598
|
+
inputProps={{
|
|
599
|
+
type: 'text',
|
|
600
|
+
id: 'azure_vault_url',
|
|
601
|
+
placeholder: 'https://my-vault.vault.azure.net',
|
|
602
|
+
disabled
|
|
603
|
+
}}
|
|
604
|
+
bind:value={$values['secret_backend'].vault_url}
|
|
605
|
+
/>
|
|
446
606
|
</div>
|
|
447
607
|
<div class="flex flex-col gap-1">
|
|
448
|
-
<label for="azure_tenant_id" class="block text-xs font-semibold text-emphasis"
|
|
449
|
-
|
|
608
|
+
<label for="azure_tenant_id" class="block text-xs font-semibold text-emphasis"
|
|
609
|
+
>Tenant ID</label
|
|
610
|
+
>
|
|
611
|
+
<TextInput
|
|
612
|
+
inputProps={{
|
|
613
|
+
type: 'text',
|
|
614
|
+
id: 'azure_tenant_id',
|
|
615
|
+
placeholder: '00000000-0000-0000-0000-000000000000',
|
|
616
|
+
disabled
|
|
617
|
+
}}
|
|
618
|
+
bind:value={$values['secret_backend'].tenant_id}
|
|
619
|
+
/>
|
|
450
620
|
</div>
|
|
451
621
|
<div class="flex flex-col gap-1">
|
|
452
|
-
<label for="azure_client_id" class="block text-xs font-semibold text-emphasis"
|
|
453
|
-
|
|
622
|
+
<label for="azure_client_id" class="block text-xs font-semibold text-emphasis"
|
|
623
|
+
>Client ID</label
|
|
624
|
+
>
|
|
625
|
+
<TextInput
|
|
626
|
+
inputProps={{
|
|
627
|
+
type: 'text',
|
|
628
|
+
id: 'azure_client_id',
|
|
629
|
+
placeholder: '00000000-0000-0000-0000-000000000000',
|
|
630
|
+
disabled
|
|
631
|
+
}}
|
|
632
|
+
bind:value={$values['secret_backend'].client_id}
|
|
633
|
+
/>
|
|
454
634
|
</div>
|
|
455
635
|
<div class="flex flex-col gap-1 p-3 bg-surface-secondary rounded-lg">
|
|
456
|
-
<label for="azure_client_secret" class="block text-xs font-semibold text-emphasis"
|
|
636
|
+
<label for="azure_client_secret" class="block text-xs font-semibold text-emphasis"
|
|
637
|
+
>Client Secret <span class="text-2xs font-normal text-secondary">(optional)</span
|
|
638
|
+
></label
|
|
639
|
+
>
|
|
640
|
+
<span class="text-2xs text-secondary"
|
|
641
|
+
>Leave blank to use Azure Workload Identity. Requires
|
|
642
|
+
<code>AZURE_FEDERATED_TOKEN_FILE</code> on the Windmill process (auto-injected on AKS by
|
|
643
|
+
the workload-identity webhook; set manually on other Kubernetes clusters).</span
|
|
644
|
+
>
|
|
457
645
|
<Password bind:password={$values['secret_backend'].client_secret} small {disabled} />
|
|
458
646
|
</div>
|
|
459
647
|
<div class="flex flex-col gap-1 p-3 bg-surface-secondary rounded-lg">
|
|
460
|
-
<label for="azure_token" class="block text-xs font-semibold text-emphasis"
|
|
461
|
-
|
|
648
|
+
<label for="azure_token" class="block text-xs font-semibold text-emphasis"
|
|
649
|
+
>Token (optional)</label
|
|
650
|
+
>
|
|
651
|
+
<span class="text-2xs text-secondary"
|
|
652
|
+
>Static Bearer token for testing. If provided, OAuth2 is skipped.</span
|
|
653
|
+
>
|
|
462
654
|
<Password bind:password={$values['secret_backend'].token} small {disabled} />
|
|
463
655
|
</div>
|
|
464
656
|
</div>
|
|
465
657
|
<div class="flex flex-col gap-4 pt-4 border-t">
|
|
466
|
-
<Button
|
|
658
|
+
<Button
|
|
659
|
+
unifiedSize="md"
|
|
660
|
+
variant="accent"
|
|
661
|
+
onclick={testAzureKvConnection}
|
|
662
|
+
disabled={disabled || !isAzureKvConfigValid() || testingAzureKvConnection}
|
|
663
|
+
loading={testingAzureKvConnection}
|
|
664
|
+
startIcon={{ icon: Server }}>Test Connection</Button
|
|
665
|
+
>
|
|
467
666
|
<div class="flex flex-col gap-4 pt-4 border-t">
|
|
468
667
|
<span class="block text-xs font-semibold text-emphasis">Secret Migration</span>
|
|
469
|
-
<span class="text-2xs text-secondary"
|
|
668
|
+
<span class="text-2xs text-secondary"
|
|
669
|
+
>Original values are NOT deleted to allow for rollback.</span
|
|
670
|
+
>
|
|
470
671
|
<div class="flex gap-4">
|
|
471
672
|
<div class="flex-1 p-3 border rounded-lg">
|
|
472
|
-
<div class="flex items-center gap-2 mb-2"
|
|
673
|
+
<div class="flex items-center gap-2 mb-2"
|
|
674
|
+
><Database size={16} /><ArrowRight size={16} /><Cloud size={16} /></div
|
|
675
|
+
>
|
|
473
676
|
<p class="text-xs font-medium mb-2">Database → Azure Key Vault</p>
|
|
474
|
-
<Button
|
|
677
|
+
<Button
|
|
678
|
+
unifiedSize="sm"
|
|
679
|
+
variant="default"
|
|
680
|
+
onclick={() => (migrateToAzureKvModalOpen = true)}
|
|
681
|
+
disabled={disabled || !isAzureKvConfigValid() || migratingToAzureKv}
|
|
682
|
+
startIcon={{ icon: ArrowRight }}>Migrate to Azure KV</Button
|
|
683
|
+
>
|
|
475
684
|
</div>
|
|
476
685
|
<div class="flex-1 p-3 border rounded-lg">
|
|
477
|
-
<div class="flex items-center gap-2 mb-2"
|
|
686
|
+
<div class="flex items-center gap-2 mb-2"
|
|
687
|
+
><Cloud size={16} /><ArrowLeft size={16} /><Database size={16} /></div
|
|
688
|
+
>
|
|
478
689
|
<p class="text-xs font-medium mb-2">Azure Key Vault → Database</p>
|
|
479
|
-
<Button
|
|
690
|
+
<Button
|
|
691
|
+
unifiedSize="sm"
|
|
692
|
+
variant="default"
|
|
693
|
+
onclick={() => (migrateFromAzureKvModalOpen = true)}
|
|
694
|
+
disabled={disabled || !isAzureKvConfigValid() || migratingFromAzureKv}
|
|
695
|
+
startIcon={{ icon: ArrowLeft }}>Migrate to Database</Button
|
|
696
|
+
>
|
|
480
697
|
</div>
|
|
481
698
|
</div>
|
|
482
699
|
</div>
|
|
@@ -487,50 +704,118 @@ vault write auth/jwt/role/windmill-secrets \
|
|
|
487
704
|
<div class="flex items-center gap-2 mb-4">
|
|
488
705
|
<Cloud class="text-primary" size={20} />
|
|
489
706
|
<div>
|
|
490
|
-
<p class="text-sm font-medium text-emphasis"
|
|
707
|
+
<p class="text-sm font-medium text-emphasis"
|
|
708
|
+
>AWS Secrets Manager Configuration <span
|
|
709
|
+
class="ml-2 px-1.5 py-0.5 text-2xs font-medium bg-yellow-100 text-yellow-800 dark:bg-yellow-900 dark:text-yellow-200 rounded"
|
|
710
|
+
>Beta</span
|
|
711
|
+
></p
|
|
712
|
+
>
|
|
491
713
|
<p class="text-xs text-secondary">Store secrets in AWS Secrets Manager.</p>
|
|
492
714
|
</div>
|
|
493
715
|
</div>
|
|
494
716
|
<div class="grid grid-cols-1 gap-4">
|
|
495
717
|
<div class="flex flex-col gap-1">
|
|
496
|
-
<label for="aws_sm_region" class="block text-xs font-semibold text-emphasis">Region</label
|
|
497
|
-
|
|
718
|
+
<label for="aws_sm_region" class="block text-xs font-semibold text-emphasis">Region</label
|
|
719
|
+
>
|
|
720
|
+
<TextInput
|
|
721
|
+
inputProps={{ type: 'text', id: 'aws_sm_region', placeholder: 'us-east-1', disabled }}
|
|
722
|
+
bind:value={$values['secret_backend'].region}
|
|
723
|
+
/>
|
|
498
724
|
</div>
|
|
499
725
|
<div class="flex flex-col gap-1">
|
|
500
|
-
<label for="aws_sm_access_key_id" class="block text-xs font-semibold text-emphasis"
|
|
501
|
-
|
|
502
|
-
|
|
726
|
+
<label for="aws_sm_access_key_id" class="block text-xs font-semibold text-emphasis"
|
|
727
|
+
>Access Key ID (optional)</label
|
|
728
|
+
>
|
|
729
|
+
<span class="text-2xs text-secondary"
|
|
730
|
+
>If not provided, the default AWS credential chain is used (env vars, instance profile,
|
|
731
|
+
EKS pod identity)</span
|
|
732
|
+
>
|
|
733
|
+
<TextInput
|
|
734
|
+
inputProps={{
|
|
735
|
+
type: 'text',
|
|
736
|
+
id: 'aws_sm_access_key_id',
|
|
737
|
+
placeholder: 'AKIA...',
|
|
738
|
+
disabled
|
|
739
|
+
}}
|
|
740
|
+
bind:value={$values['secret_backend'].access_key_id}
|
|
741
|
+
/>
|
|
503
742
|
</div>
|
|
504
743
|
<div class="flex flex-col gap-1 p-3 bg-surface-secondary rounded-lg">
|
|
505
|
-
<label for="aws_sm_secret_access_key" class="block text-xs font-semibold text-emphasis"
|
|
744
|
+
<label for="aws_sm_secret_access_key" class="block text-xs font-semibold text-emphasis"
|
|
745
|
+
>Secret Access Key (optional)</label
|
|
746
|
+
>
|
|
506
747
|
<Password bind:password={$values['secret_backend'].secret_access_key} small {disabled} />
|
|
507
748
|
</div>
|
|
508
749
|
<div class="flex flex-col gap-1">
|
|
509
|
-
<label for="aws_sm_prefix" class="block text-xs font-semibold text-emphasis"
|
|
510
|
-
|
|
511
|
-
|
|
750
|
+
<label for="aws_sm_prefix" class="block text-xs font-semibold text-emphasis"
|
|
751
|
+
>Secret Name Prefix (optional)</label
|
|
752
|
+
>
|
|
753
|
+
<span class="text-2xs text-secondary"
|
|
754
|
+
>Prefix for secret names in AWS Secrets Manager (default: windmill/)</span
|
|
755
|
+
>
|
|
756
|
+
<TextInput
|
|
757
|
+
inputProps={{ type: 'text', id: 'aws_sm_prefix', placeholder: 'windmill/', disabled }}
|
|
758
|
+
bind:value={$values['secret_backend'].prefix}
|
|
759
|
+
/>
|
|
512
760
|
</div>
|
|
513
761
|
<div class="flex flex-col gap-1">
|
|
514
|
-
<label for="aws_sm_endpoint_url" class="block text-xs font-semibold text-emphasis"
|
|
515
|
-
|
|
516
|
-
|
|
762
|
+
<label for="aws_sm_endpoint_url" class="block text-xs font-semibold text-emphasis"
|
|
763
|
+
>Endpoint URL (optional)</label
|
|
764
|
+
>
|
|
765
|
+
<span class="text-2xs text-secondary"
|
|
766
|
+
>Custom endpoint for LocalStack or other compatible services</span
|
|
767
|
+
>
|
|
768
|
+
<TextInput
|
|
769
|
+
inputProps={{
|
|
770
|
+
type: 'text',
|
|
771
|
+
id: 'aws_sm_endpoint_url',
|
|
772
|
+
placeholder: 'http://localhost:4566',
|
|
773
|
+
disabled
|
|
774
|
+
}}
|
|
775
|
+
bind:value={$values['secret_backend'].endpoint_url}
|
|
776
|
+
/>
|
|
517
777
|
</div>
|
|
518
778
|
</div>
|
|
519
779
|
<div class="flex flex-col gap-4 pt-4 border-t">
|
|
520
|
-
<Button
|
|
780
|
+
<Button
|
|
781
|
+
unifiedSize="md"
|
|
782
|
+
variant="accent"
|
|
783
|
+
onclick={testAwsSmConnection}
|
|
784
|
+
disabled={disabled || !isAwsSmConfigValid() || testingAwsSmConnection}
|
|
785
|
+
loading={testingAwsSmConnection}
|
|
786
|
+
startIcon={{ icon: Server }}>Test Connection</Button
|
|
787
|
+
>
|
|
521
788
|
<div class="flex flex-col gap-4 pt-4 border-t">
|
|
522
789
|
<span class="block text-xs font-semibold text-emphasis">Secret Migration</span>
|
|
523
|
-
<span class="text-2xs text-secondary"
|
|
790
|
+
<span class="text-2xs text-secondary"
|
|
791
|
+
>Original values are NOT deleted to allow for rollback.</span
|
|
792
|
+
>
|
|
524
793
|
<div class="flex gap-4">
|
|
525
794
|
<div class="flex-1 p-3 border rounded-lg">
|
|
526
|
-
<div class="flex items-center gap-2 mb-2"
|
|
795
|
+
<div class="flex items-center gap-2 mb-2"
|
|
796
|
+
><Database size={16} /><ArrowRight size={16} /><Cloud size={16} /></div
|
|
797
|
+
>
|
|
527
798
|
<p class="text-xs font-medium mb-2">Database → AWS Secrets Manager</p>
|
|
528
|
-
<Button
|
|
799
|
+
<Button
|
|
800
|
+
unifiedSize="sm"
|
|
801
|
+
variant="default"
|
|
802
|
+
onclick={() => (migrateToAwsSmModalOpen = true)}
|
|
803
|
+
disabled={disabled || !isAwsSmConfigValid() || migratingToAwsSm}
|
|
804
|
+
startIcon={{ icon: ArrowRight }}>Migrate to AWS SM</Button
|
|
805
|
+
>
|
|
529
806
|
</div>
|
|
530
807
|
<div class="flex-1 p-3 border rounded-lg">
|
|
531
|
-
<div class="flex items-center gap-2 mb-2"
|
|
808
|
+
<div class="flex items-center gap-2 mb-2"
|
|
809
|
+
><Cloud size={16} /><ArrowLeft size={16} /><Database size={16} /></div
|
|
810
|
+
>
|
|
532
811
|
<p class="text-xs font-medium mb-2">AWS Secrets Manager → Database</p>
|
|
533
|
-
<Button
|
|
812
|
+
<Button
|
|
813
|
+
unifiedSize="sm"
|
|
814
|
+
variant="default"
|
|
815
|
+
onclick={() => (migrateFromAwsSmModalOpen = true)}
|
|
816
|
+
disabled={disabled || !isAwsSmConfigValid() || migratingFromAwsSm}
|
|
817
|
+
startIcon={{ icon: ArrowLeft }}>Migrate to Database</Button
|
|
818
|
+
>
|
|
534
819
|
</div>
|
|
535
820
|
</div>
|
|
536
821
|
</div>
|
|
@@ -539,21 +824,105 @@ vault write auth/jwt/role/windmill-secrets \
|
|
|
539
824
|
{/if}
|
|
540
825
|
</div>
|
|
541
826
|
|
|
542
|
-
<ConfirmationModal
|
|
543
|
-
|
|
827
|
+
<ConfirmationModal
|
|
828
|
+
title="Migrate to AWS Secrets Manager"
|
|
829
|
+
confirmationText="Migrate"
|
|
830
|
+
open={migrateToAwsSmModalOpen}
|
|
831
|
+
loading={migratingToAwsSm}
|
|
832
|
+
type="reload"
|
|
833
|
+
onCanceled={() => {
|
|
834
|
+
migrateToAwsSmModalOpen = false
|
|
835
|
+
}}
|
|
836
|
+
onConfirmed={migrateSecretsToAwsSm}
|
|
837
|
+
>
|
|
838
|
+
{#snippet children()}<div class="flex flex-col gap-2"
|
|
839
|
+
><p>This will copy all secrets from the database to AWS Secrets Manager.</p><p
|
|
840
|
+
class="text-yellow-600 dark:text-yellow-400 text-sm"
|
|
841
|
+
>Database values are NOT deleted automatically.</p
|
|
842
|
+
></div
|
|
843
|
+
>{/snippet}
|
|
544
844
|
</ConfirmationModal>
|
|
545
|
-
<ConfirmationModal
|
|
546
|
-
|
|
845
|
+
<ConfirmationModal
|
|
846
|
+
title="Migrate to Database"
|
|
847
|
+
confirmationText="Migrate"
|
|
848
|
+
open={migrateFromAwsSmModalOpen}
|
|
849
|
+
loading={migratingFromAwsSm}
|
|
850
|
+
type="reload"
|
|
851
|
+
onCanceled={() => {
|
|
852
|
+
migrateFromAwsSmModalOpen = false
|
|
853
|
+
}}
|
|
854
|
+
onConfirmed={migrateSecretsFromAwsSm}
|
|
855
|
+
>
|
|
856
|
+
{#snippet children()}<div class="flex flex-col gap-2"
|
|
857
|
+
><p>This will copy all secrets from AWS Secrets Manager back to the database.</p><p
|
|
858
|
+
class="text-yellow-600 dark:text-yellow-400 text-sm"
|
|
859
|
+
>AWS Secrets Manager values are NOT deleted automatically.</p
|
|
860
|
+
></div
|
|
861
|
+
>{/snippet}
|
|
547
862
|
</ConfirmationModal>
|
|
548
|
-
<ConfirmationModal
|
|
549
|
-
|
|
863
|
+
<ConfirmationModal
|
|
864
|
+
title="Migrate to Azure Key Vault"
|
|
865
|
+
confirmationText="Migrate"
|
|
866
|
+
open={migrateToAzureKvModalOpen}
|
|
867
|
+
loading={migratingToAzureKv}
|
|
868
|
+
type="reload"
|
|
869
|
+
onCanceled={() => {
|
|
870
|
+
migrateToAzureKvModalOpen = false
|
|
871
|
+
}}
|
|
872
|
+
onConfirmed={migrateSecretsToAzureKv}
|
|
873
|
+
>
|
|
874
|
+
{#snippet children()}<div class="flex flex-col gap-2"
|
|
875
|
+
><p>This will copy all secrets to Azure Key Vault.</p><p
|
|
876
|
+
class="text-yellow-600 dark:text-yellow-400 text-sm"
|
|
877
|
+
>Database values are NOT deleted automatically.</p
|
|
878
|
+
></div
|
|
879
|
+
>{/snippet}
|
|
550
880
|
</ConfirmationModal>
|
|
551
|
-
<ConfirmationModal
|
|
552
|
-
|
|
881
|
+
<ConfirmationModal
|
|
882
|
+
title="Migrate to Database"
|
|
883
|
+
confirmationText="Migrate"
|
|
884
|
+
open={migrateFromAzureKvModalOpen}
|
|
885
|
+
loading={migratingFromAzureKv}
|
|
886
|
+
type="reload"
|
|
887
|
+
onCanceled={() => {
|
|
888
|
+
migrateFromAzureKvModalOpen = false
|
|
889
|
+
}}
|
|
890
|
+
onConfirmed={migrateSecretsFromAzureKv}
|
|
891
|
+
>
|
|
892
|
+
{#snippet children()}<div class="flex flex-col gap-2"
|
|
893
|
+
><p>This will copy all secrets from Azure Key Vault back to the database.</p></div
|
|
894
|
+
>{/snippet}
|
|
553
895
|
</ConfirmationModal>
|
|
554
|
-
<ConfirmationModal
|
|
555
|
-
|
|
896
|
+
<ConfirmationModal
|
|
897
|
+
title="Migrate to Vault"
|
|
898
|
+
confirmationText="Migrate"
|
|
899
|
+
open={migrateToVaultModalOpen}
|
|
900
|
+
loading={migratingToVault}
|
|
901
|
+
type="reload"
|
|
902
|
+
onCanceled={() => {
|
|
903
|
+
migrateToVaultModalOpen = false
|
|
904
|
+
}}
|
|
905
|
+
onConfirmed={migrateSecretsToVault}
|
|
906
|
+
>
|
|
907
|
+
{#snippet children()}<div class="flex flex-col gap-2"
|
|
908
|
+
><p>This will copy all secrets to HashiCorp Vault.</p><p
|
|
909
|
+
class="text-yellow-600 dark:text-yellow-400 text-sm"
|
|
910
|
+
>Database values are NOT deleted automatically.</p
|
|
911
|
+
></div
|
|
912
|
+
>{/snippet}
|
|
556
913
|
</ConfirmationModal>
|
|
557
|
-
<ConfirmationModal
|
|
558
|
-
|
|
914
|
+
<ConfirmationModal
|
|
915
|
+
title="Migrate to Database"
|
|
916
|
+
confirmationText="Migrate"
|
|
917
|
+
open={migrateToDatabaseModalOpen}
|
|
918
|
+
loading={migratingToDatabase}
|
|
919
|
+
type="reload"
|
|
920
|
+
onCanceled={() => {
|
|
921
|
+
migrateToDatabaseModalOpen = false
|
|
922
|
+
}}
|
|
923
|
+
onConfirmed={migrateSecretsToDatabase}
|
|
924
|
+
>
|
|
925
|
+
{#snippet children()}<div class="flex flex-col gap-2"
|
|
926
|
+
><p>This will copy all secrets from Vault back to the database.</p></div
|
|
927
|
+
>{/snippet}
|
|
559
928
|
</ConfirmationModal>
|