database login - ask user - test connection

This commit is contained in:
SPRINX0\prochazka
2025-01-08 16:14:51 +01:00
parent 11201326fd
commit 8a4ec82c4c
2 changed files with 53 additions and 11 deletions

View File

@@ -30,6 +30,11 @@
export let conid; export let conid;
export let passwordMode; export let passwordMode;
export let testedConnection;
export let onConnect = null;
export let onCancel = null;
$: usedPasswordMode = testedConnection?.passwordMode ?? passwordMode;
const values = writable({}); const values = writable({});
let connection; let connection;
@@ -39,19 +44,24 @@
const testIdRef = createRef(0); const testIdRef = createRef(0);
let engineTitle; let engineTitle;
let closedWithOk = false;
currentModalConid = conid; currentModalConid = conid;
onMount(async () => { onMount(async () => {
connection = await getConnectionInfo({ conid }); if (testedConnection) {
if (passwordMode == 'askPassword') { connection = testedConnection;
} else {
connection = await getConnectionInfo({ conid });
}
if (usedPasswordMode == 'askPassword') {
$values = { $values = {
...$values, ...$values,
user: connection.user, user: connection.user,
connectionLabel: getConnectionLabel(connection), connectionLabel: getConnectionLabel(connection),
}; };
} }
if (passwordMode == 'askUser') { if (usedPasswordMode == 'askUser') {
$values = { $values = {
...$values, ...$values,
connectionLabel: getConnectionLabel(connection), connectionLabel: getConnectionLabel(connection),
@@ -64,6 +74,7 @@
onDestroy(() => { onDestroy(() => {
currentModalConid = null; currentModalConid = null;
if (onCancel && !closedWithOk) onCancel();
}); });
function handleCancelTest() { function handleCancelTest() {
@@ -72,6 +83,17 @@
} }
async function handleSubmit(ev) { async function handleSubmit(ev) {
if (onConnect) {
closedWithOk = true;
onConnect({
...testedConnection,
user: usedPasswordMode == 'askUser' ? $values['user'] : testedConnection.user,
password: $values['password'],
});
closeCurrentModal();
return;
}
isTesting = true; isTesting = true;
testIdRef.update(x => x + 1); testIdRef.update(x => x + 1);
const testid = testIdRef.get(); const testid = testIdRef.get();
@@ -104,8 +126,8 @@
label="Username" label="Username"
name="user" name="user"
autocomplete="username" autocomplete="username"
disabled={passwordMode == 'askPassword'} disabled={usedPasswordMode == 'askPassword'}
focused={passwordMode == 'askUser'} focused={usedPasswordMode == 'askUser'}
saveOnInput saveOnInput
data-testid="DatabaseLoginModal_username" data-testid="DatabaseLoginModal_username"
/> />
@@ -113,7 +135,7 @@
label="Password" label="Password"
name="password" name="password"
autocomplete="current-password" autocomplete="current-password"
focused={passwordMode == 'askPassword'} focused={usedPasswordMode == 'askPassword'}
saveOnInput saveOnInput
data-testid="DatabaseLoginModal_password" data-testid="DatabaseLoginModal_password"
/> />

View File

@@ -34,6 +34,7 @@
import { disconnectDatabaseConnection } from '../appobj/DatabaseAppObject.svelte'; import { disconnectDatabaseConnection } from '../appobj/DatabaseAppObject.svelte';
import { useConfig } from '../utility/metadataLoaders'; import { useConfig } from '../utility/metadataLoaders';
import ConnectionAdvancedDriverFields from '../settings/ConnectionAdvancedDriverFields.svelte'; import ConnectionAdvancedDriverFields from '../settings/ConnectionAdvancedDriverFields.svelte';
import DatabaseLoginModal from '../modals/DatabaseLoginModal.svelte';
export let connection; export let connection;
export let tabid; export let tabid;
@@ -63,11 +64,26 @@
const testIdRef = createRef(0); const testIdRef = createRef(0);
async function handleTest(e, requestDbList = false) { function handleTest(requestDbList = false) {
const connection = getCurrentConnection();
return new Promise((resolve, reject) => {
if (connection.passwordMode == 'askPassword' || connection.passwordMode == 'askUser') {
showModal(DatabaseLoginModal, {
testedConnection: connection,
onConnect: conn => handleTestCore(conn, requestDbList).then(res => resolve(res)),
onCancel: () => resolve(null),
});
} else {
return handleTestCore(connection, requestDbList);
}
});
}
async function handleTestCore(connection, requestDbList = false) {
isTesting = true; isTesting = true;
testIdRef.update(x => x + 1); testIdRef.update(x => x + 1);
const testid = testIdRef.get(); const testid = testIdRef.get();
const resp = await apiCall('connections/test', { connection: getCurrentConnection(), requestDbList }); const resp = await apiCall('connections/test', { connection, requestDbList });
if (testIdRef.get() != testid) return; if (testIdRef.get() != testid) return;
isTesting = false; isTesting = false;
@@ -207,7 +223,7 @@
// $: console.log('CONN VALUES', $values); // $: console.log('CONN VALUES', $values);
async function getDatabaseList() { async function getDatabaseList() {
const resp = await handleTest({ detail: getCurrentConnection() }, true); const resp = await handleTest(true);
if (resp && resp.msgtype == 'connected') { if (resp && resp.msgtype == 'connected') {
return resp.databases; return resp.databases;
} }
@@ -257,7 +273,11 @@
data-testid="ConnectionTab_buttonCancelTest" data-testid="ConnectionTab_buttonCancelTest"
/> />
{:else} {:else}
<FormButton value="Test connection" on:click={handleTest} data-testid="ConnectionTab_buttonDisconnect" /> <FormButton
value="Test connection"
on:click={() => handleTest(false)}
data-testid="ConnectionTab_buttonDisconnect"
/>
{/if} {/if}
{:else if isConnected} {:else if isConnected}
<FormButton value="Disconnect" on:click={handleDisconnect} data-testid="ConnectionTab_buttonDisconnect" /> <FormButton value="Disconnect" on:click={handleDisconnect} data-testid="ConnectionTab_buttonDisconnect" />
@@ -266,7 +286,7 @@
{#if isTesting} {#if isTesting}
<FormButton value="Cancel test" on:click={handleCancelTest} /> <FormButton value="Cancel test" on:click={handleCancelTest} />
{:else} {:else}
<FormButton value="Test" on:click={handleTest} data-testid="ConnectionTab_buttonTest" /> <FormButton value="Test" on:click={() => handleTest(false)} data-testid="ConnectionTab_buttonTest" />
{/if} {/if}
<FormButton value="Save" on:click={handleSave} data-testid="ConnectionTab_buttonSave" /> <FormButton value="Save" on:click={handleSave} data-testid="ConnectionTab_buttonSave" />
{/if} {/if}