diff --git a/packages/api/src/auth/authProvider.js b/packages/api/src/auth/authProvider.js index fbe3fbf4a..ecffeccd1 100644 --- a/packages/api/src/auth/authProvider.js +++ b/packages/api/src/auth/authProvider.js @@ -44,7 +44,7 @@ class AuthProviderBase { return null; } - getSingleConnection(req) { + getSingleConnectionId(req) { return null; } } diff --git a/packages/api/src/controllers/config.js b/packages/api/src/controllers/config.js index 744b07627..d8e7f72bf 100644 --- a/packages/api/src/controllers/config.js +++ b/packages/api/src/controllers/config.js @@ -34,12 +34,16 @@ module.exports = { const isLoginForm = authProvider.isLoginForm(); const additionalConfigProps = authProvider.getAdditionalConfigProps(); - const singleConnection = await authProvider.getSingleConnection(req); + const singleConid = authProvider.getSingleConnectionId(req); + + const singleConnection = singleConid + ? await connections.getCore({ conid: singleConid }) + : connections.singleConnection; return { runAsPortal: !!connections.portalConnections, singleDbConnection: connections.singleDbConnection, - singleConnection: connections.singleConnection, + singleConnection: singleConnection, // hideAppEditor: !!process.env.HIDE_APP_EDITOR, allowShellConnection: platformInfo.allowShellConnection, allowShellScripting: platformInfo.allowShellScripting, diff --git a/packages/api/src/controllers/connections.js b/packages/api/src/controllers/connections.js index eae4688fe..831c849ce 100644 --- a/packages/api/src/controllers/connections.js +++ b/packages/api/src/controllers/connections.js @@ -414,11 +414,17 @@ module.exports = { dbloginAuth_meta: true, async dbloginAuth({ conid, user, password }) { - const saveResp = await this.saveVolatile({ conid, user, password, test: true }); - if (saveResp.msgtype == 'connected') { - const loginResp = await getAuthProvider().login(user, password, { conid: saveResp._id }); - return loginResp; + if (user || password) { + const saveResp = await this.saveVolatile({ conid, user, password, test: true }); + if (saveResp.msgtype == 'connected') { + const loginResp = await getAuthProvider().login(user, password, { conid: saveResp._id }); + return loginResp; + } + return saveResp; } - return saveResp; + + // user and password is stored in connection, volatile connection is not needed + const loginResp = await getAuthProvider().login(null, null, { conid }); + return loginResp; }, }; diff --git a/packages/web/src/LoginPage.svelte b/packages/web/src/LoginPage.svelte index 6d75ad057..fe36b1e0c 100644 --- a/packages/web/src/LoginPage.svelte +++ b/packages/web/src/LoginPage.svelte @@ -134,6 +134,13 @@ } else { sqlConnectResult = resp; } + } else { + enableApi(); + const resp = await apiCall('connections/dblogin-auth', { + conid: selectedConnection.conid, + }); + localStorage.setItem('accessToken', resp.accessToken); + internalRedirectTo('?'); } }} /> diff --git a/packages/web/src/utility/connectionsPinger.js b/packages/web/src/utility/connectionsPinger.js index ca1209d27..c921082c1 100644 --- a/packages/web/src/utility/connectionsPinger.js +++ b/packages/web/src/utility/connectionsPinger.js @@ -10,11 +10,16 @@ import hasPermission from '../utility/hasPermission'; // }; const doServerPing = value => { + const config = getCurrentConfig(); + const conidArray = [...value]; - if (getCurrentConfig().storageDatabase && hasPermission('internal-storage')) { + if (config.storageDatabase && hasPermission('internal-storage')) { conidArray.push('__storage'); } conidArray.push(...getVolatileConnections()); + if (config.singleConnection) { + conidArray.push(config.singleConnection._id); + } apiCall('server-connections/ping', { conidArray, @@ -51,4 +56,4 @@ export function subscribeConnectionPingers() { export function callServerPing() { const connections = getOpenedConnections(); doServerPing(connections); -} \ No newline at end of file +}