diff --git a/packages/api/src/controllers/connections.js b/packages/api/src/controllers/connections.js index 75d13cf9b..dc68ad14f 100644 --- a/packages/api/src/controllers/connections.js +++ b/packages/api/src/controllers/connections.js @@ -18,6 +18,7 @@ const { connectionHasPermission, testConnectionPermission } = require('../utilit const pipeForkLogs = require('../utility/pipeForkLogs'); const requireEngineDriver = require('../utility/requireEngineDriver'); const { getAuthProviderById } = require('../auth/authProvider'); +const { startTokenChecking } = require('../utility/authProxy'); const logger = getLogger('connections'); @@ -394,23 +395,27 @@ module.exports = { const { conid, state, redirectUri } = req.query; const connection = await this.getCore({ conid }); const driver = requireEngineDriver(connection); - const authUrl = await driver.getRedirectAuthUrl(connection, { + const authResp = await driver.getRedirectAuthUrl(connection, { redirectUri, state, client: 'web', }); - res.redirect(authUrl); + res.redirect(authResp.url); }, dbloginApp_meta: true, async dbloginApp({ conid, state }) { const connection = await this.getCore({ conid }); const driver = requireEngineDriver(connection); - const url = await driver.getRedirectAuthUrl(connection, { + const resp = await driver.getRedirectAuthUrl(connection, { state, client: 'app', }); - return { url }; + startTokenChecking(resp.sid, async token => { + const volatile = await this.saveVolatile({ conid, accessToken: token }); + socket.emit('got-volatile-token', { savedConId: conid, volatileConId: volatile._id }); + }); + return resp; }, dbloginToken_meta: true, diff --git a/packages/api/src/utility/authProxy.js b/packages/api/src/utility/authProxy.js index e3043de0b..d367c23bc 100644 --- a/packages/api/src/utility/authProxy.js +++ b/packages/api/src/utility/authProxy.js @@ -10,8 +10,11 @@ async function authProxyGetTokenFromCode(options) { return null; } +function startTokenChecking(sid, callback) {} + module.exports = { isAuthProxySupported, authProxyGetRedirectUrl, authProxyGetTokenFromCode, + startTokenChecking, }; diff --git a/packages/types/engines.d.ts b/packages/types/engines.d.ts index 585618646..4262a4c33 100644 --- a/packages/types/engines.d.ts +++ b/packages/types/engines.d.ts @@ -149,7 +149,7 @@ export interface EngineDriver { summaryCommand(pool, command, row): Promise; startProfiler(pool, options): Promise; stopProfiler(pool, profiler): Promise; - getRedirectAuthUrl(connection, options): Promise; + getRedirectAuthUrl(connection, options): Promise<{ url: string; sid: string }>; getAuthTokenFromCode(connection, options): Promise; getAccessTokenFromAuth(connection, req): Promise;