CB-2580 aws open id provider (#1861)

* CB-2580 aws open id provider

* CB-2580 read team meta in getUserTeams

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
This commit is contained in:
Alexander Skoblikov
2023-07-31 15:01:02 +03:00
committed by GitHub
co-authored by Daria Marutkina
parent 0d665a6b7b
commit 752f913db0
3 changed files with 19 additions and 8 deletions
@@ -42,7 +42,7 @@ public interface SMAuthProviderExternal<AUTH_SESSION extends SMSession> extends
@NotNull
default Map<String, Object> authExternalUser(
@NotNull DBRProgressMonitor monitor,
@NotNull Map<String, Object> 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<String, Object> authParameters // Passed auth parameters (e.g. user name or password)
) throws DBException {
return authParameters;
@@ -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<String, Object> sessionParameters = webSession.getSessionParameters();
sessionParameters.put(SMConstants.SESSION_PARAM_TRUSTED_USER_TEAMS, userTeams);
Map<String, Object> 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(
@@ -219,20 +219,22 @@ public class CBEmbeddedSecurityController implements SMAdminController, SMAuthen
@NotNull
@Override
public SMTeam[] getUserTeams(String userId) throws DBException {
Map<String, SMTeam> 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<SMTeam> 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<String, Object> 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(