diff --git a/packages/api/src/controllers/connections.js b/packages/api/src/controllers/connections.js index 49a484883..19b48b867 100644 --- a/packages/api/src/controllers/connections.js +++ b/packages/api/src/controllers/connections.js @@ -389,7 +389,7 @@ module.exports = { const { conid } = req.query; const connection = await this.getCore({ conid }); const driver = requireEngineDriver(connection); - const authUrl = driver.getRedirectAuthUrl(connection); + const authUrl = await driver.getRedirectAuthUrl(connection); res.redirect(authUrl); }, }; diff --git a/packages/api/src/controllers/serverConnections.js b/packages/api/src/controllers/serverConnections.js index a35bb3330..945ce305f 100644 --- a/packages/api/src/controllers/serverConnections.js +++ b/packages/api/src/controllers/serverConnections.js @@ -56,7 +56,10 @@ module.exports = { if (connection.passwordMode == 'askPassword' || connection.passwordMode == 'askUser') { throw new MissingCredentialsError({ conid, passwordMode: connection.passwordMode }); } - const subprocess = fork( + if (connection.useRedirectDbLogin) { + throw new MissingCredentialsError({ conid, redirectToDbLogin: true }); + } + const subprocess = fork( global['API_PACKAGE'] || process.argv[1], [ '--is-forked-api', diff --git a/packages/api/src/utility/useController.js b/packages/api/src/utility/useController.js index 3ff9afc82..12432fe18 100644 --- a/packages/api/src/utility/useController.js +++ b/packages/api/src/utility/useController.js @@ -67,7 +67,7 @@ module.exports = function useController(app, electron, route, controller) { } if (raw) { - router[method](routeAction, controller[key]); + router[method](routeAction, (req, res) => controller[key](req, res)); } else { router[method](routeAction, async (req, res) => { // if (controller._init && !controller._init_called) { diff --git a/packages/web/src/tabs/ConnectionTab.svelte b/packages/web/src/tabs/ConnectionTab.svelte index d5ccbf149..9d627e112 100644 --- a/packages/web/src/tabs/ConnectionTab.svelte +++ b/packages/web/src/tabs/ConnectionTab.svelte @@ -181,6 +181,11 @@ } }); + export function changeConnectionBeforeSave(connection) { + if (driver?.beforeConnectionSave) return driver.beforeConnectionSave(connection); + return connection; + } + $: isConnected = $openedConnections.includes($values._id) || $openedSingleDatabaseConnections.includes($values._id); // $: console.log('CONN VALUES', $values); diff --git a/packages/web/src/utility/api.ts b/packages/web/src/utility/api.ts index 8cb15faf2..da33d9c3e 100644 --- a/packages/web/src/utility/api.ts +++ b/packages/web/src/utility/api.ts @@ -65,7 +65,7 @@ function processApiResponse(route, args, resp) { if (resp?.missingCredentials) { if (resp.detail.redirectToDbLogin) { - openWebLink('connections/dblogin'); + openWebLink(`connections/dblogin?conid=${resp.detail.conid}`); } else if (!isDatabaseLoginVisible()) { showModal(DatabaseLoginModal, resp.detail); } diff --git a/plugins/dbgate-plugin-mssql/src/backend/driver.js b/plugins/dbgate-plugin-mssql/src/backend/driver.js index 681c0ad35..dce7e6138 100644 --- a/plugins/dbgate-plugin-mssql/src/backend/driver.js +++ b/plugins/dbgate-plugin-mssql/src/backend/driver.js @@ -8,7 +8,7 @@ const AsyncLock = require('async-lock'); const nativeDriver = require('./nativeDriver'); const lock = new AsyncLock(); const { tediousConnect, tediousQueryCore, tediousReadQuery, tediousStream } = require('./tediousDriver'); -const { getAzureAuthTypes } = require('./azureAuth'); +const { getAzureAuthTypes, azureGetRedirectAuthUrl } = require('./azureAuth'); const { nativeConnect, nativeQueryCore, nativeReadQuery, nativeStream } = nativeDriver; let requireMsnodesqlv8;