diff --git a/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/auth/SMAuthProviderExternal.java b/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/auth/SMAuthProviderExternal.java index e98703154f..d2f5f5f350 100644 --- a/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/auth/SMAuthProviderExternal.java +++ b/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/auth/SMAuthProviderExternal.java @@ -42,7 +42,7 @@ public interface SMAuthProviderExternal extends @NotNull default Map authExternalUser( @NotNull DBRProgressMonitor monitor, - @NotNull Map providerConfig, // Auth provider configuration (e.g. 3rd party auth server address) + @Nullable SMAuthProviderCustomConfiguration providerConfig, // Auth provider configuration (e.g. 3rd party auth server address) @NotNull Map authParameters // Passed auth parameters (e.g. user name or password) ) throws DBException { return authParameters; diff --git a/server/bundles/io.cloudbeaver.service.auth/src/io/cloudbeaver/service/auth/RPSessionHandler.java b/server/bundles/io.cloudbeaver.service.auth/src/io/cloudbeaver/service/auth/RPSessionHandler.java index 9dff7e2797..8832dd543f 100644 --- a/server/bundles/io.cloudbeaver.service.auth/src/io/cloudbeaver/service/auth/RPSessionHandler.java +++ b/server/bundles/io.cloudbeaver.service.auth/src/io/cloudbeaver/service/auth/RPSessionHandler.java @@ -35,13 +35,13 @@ import org.jkiss.dbeaver.model.security.SMConstants; import org.jkiss.dbeaver.model.security.SMController; import org.jkiss.dbeaver.model.security.exception.SMException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; public class RPSessionHandler implements DBWSessionHandler { @@ -76,7 +76,7 @@ public class RPSessionHandler implements DBWSessionHandler { Map sessionParameters = webSession.getSessionParameters(); sessionParameters.put(SMConstants.SESSION_PARAM_TRUSTED_USER_TEAMS, userTeams); Map userCredentials = authProviderExternal.authExternalUser( - webSession.getProgressMonitor(), sessionParameters, credentials); + webSession.getProgressMonitor(), null, credentials); String currentSmSessionId = webSession.getUser() == null ? null : webSession.getUserContext().getSmSessionId(); try { SMAuthInfo smAuthInfo = securityController.authenticate( diff --git a/server/bundles/io.cloudbeaver.service.security/src/io/cloudbeaver/service/security/CBEmbeddedSecurityController.java b/server/bundles/io.cloudbeaver.service.security/src/io/cloudbeaver/service/security/CBEmbeddedSecurityController.java index 01e6fdc600..7e4677652c 100644 --- a/server/bundles/io.cloudbeaver.service.security/src/io/cloudbeaver/service/security/CBEmbeddedSecurityController.java +++ b/server/bundles/io.cloudbeaver.service.security/src/io/cloudbeaver/service/security/CBEmbeddedSecurityController.java @@ -219,20 +219,22 @@ public class CBEmbeddedSecurityController implements SMAdminController, SMAuthen @NotNull @Override public SMTeam[] getUserTeams(String userId) throws DBException { + Map teams = new LinkedHashMap<>(); try (Connection dbCon = database.openConnection()) { try (PreparedStatement dbStat = dbCon.prepareStatement( database.normalizeTableNames("SELECT R.* FROM {table_prefix}CB_USER_TEAM UR, {table_prefix}CB_TEAM R " + "WHERE UR.USER_ID=? AND UR.TEAM_ID=R.TEAM_ID")) ) { dbStat.setString(1, userId); - List teams = new ArrayList<>(); try (ResultSet dbResult = dbStat.executeQuery()) { while (dbResult.next()) { - teams.add(fetchTeam(dbResult)); + var team = fetchTeam(dbResult); + teams.put(team.getTeamId(), team); } } - return teams.toArray(new SMTeam[0]); } + readSubjectsMetas(dbCon, SMSubjectType.team, null, teams); + return teams.values().toArray(new SMTeam[0]); } catch (SQLException e) { throw new DBCException("Error while reading user teams", e); } @@ -1219,9 +1221,18 @@ public class CBEmbeddedSecurityController implements SMAdminController, SMAuthen Map securedUserIdentifyingCredentials = userCredentials; WebAuthProviderDescriptor authProviderDescriptor = getAuthProvider(authProviderId); var authProviderInstance = authProviderDescriptor.getInstance(); + + SMAuthProviderCustomConfiguration providerConfig = authProviderConfigurationId == null + ? null + : application.getAuthConfiguration().getAuthProviderConfiguration(authProviderConfigurationId); + if (SMAuthProviderExternal.class.isAssignableFrom(authProviderInstance.getClass())) { var authProviderExternal = (SMAuthProviderExternal) authProviderInstance; - securedUserIdentifyingCredentials = authProviderExternal.authExternalUser(authProgressMonitor, Map.of(), userCredentials); + securedUserIdentifyingCredentials = authProviderExternal.authExternalUser( + authProgressMonitor, + providerConfig, + userCredentials + ); } var filteredUserCreds = filterSecuredUserData(