multiauth

This commit is contained in:
Jan Prochazka
2024-08-07 17:02:19 +02:00
parent 5f14da3844
commit e537b43563
5 changed files with 46 additions and 26 deletions

View File

@@ -62,6 +62,10 @@ class AuthProviderBase {
status: 'error',
};
}
async getLogoutUrl() {
return null;
}
}
class OAuthProvider extends AuthProviderBase {
@@ -118,13 +122,8 @@ class OAuthProvider extends AuthProviderBase {
return { error: 'Token not found' };
}
getAdditionalConfigProps() {
return {
oauth: process.env.OAUTH_AUTH,
oauthClient: process.env.OAUTH_CLIENT_ID,
oauthScope: process.env.OAUTH_SCOPE,
oauthLogout: process.env.OAUTH_LOGOUT,
};
async getLogoutUrl() {
return process.env.OAUTH_LOGOUT;
}
toJson() {

View File

@@ -51,6 +51,7 @@ module.exports = {
isElectron: platformInfo.isElectron,
isLicenseValid: platformInfo.isLicenseValid,
checkedLicense: platformInfo.checkedLicense,
logoutUrl: await authProvider.getLogoutUrl(),
permissions,
login,
// ...additionalConfigProps,

View File

@@ -17,7 +17,7 @@ const platformInfo = require('../utility/platformInfo');
const { connectionHasPermission, testConnectionPermission } = require('../utility/hasPermission');
const pipeForkLogs = require('../utility/pipeForkLogs');
const requireEngineDriver = require('../utility/requireEngineDriver');
const { getAuthProvider } = require('../auth/authProvider');
const { getAuthProviderById } = require('../auth/authProvider');
const logger = getLogger('connections');
@@ -413,13 +413,13 @@ module.exports = {
},
dbloginAuthToken_meta: true,
async dbloginAuthToken({ code, conid, redirectUri }) {
async dbloginAuthToken({ amoid, code, conid, redirectUri }) {
try {
const connection = await this.getCore({ conid });
const driver = requireEngineDriver(connection);
const accessToken = await driver.getAuthTokenFromCode(connection, { code, redirectUri });
const volatile = await this.saveVolatile({ conid, accessToken });
const authProvider = getAuthProvider();
const authProvider = getAuthProviderById(amoid);
const resp = await authProvider.login(null, null, { conid: volatile._id });
return resp;
} catch (err) {
@@ -429,18 +429,18 @@ module.exports = {
},
dbloginAuth_meta: true,
async dbloginAuth({ conid, user, password }) {
async dbloginAuth({ amoid, conid, user, password }) {
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 });
const loginResp = await getAuthProviderById(amoid).login(user, password, { conid: saveResp._id });
return loginResp;
}
return saveResp;
}
// user and password is stored in connection, volatile connection is not needed
const loginResp = await getAuthProvider().login(null, null, { conid });
const loginResp = await getAuthProviderById(amoid).login(null, null, { conid });
return loginResp;
},
};