package org.ovirt.engine.core.sso.utils; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.naming.InitialContext; import javax.naming.NamingException; import javax.sql.DataSource; import org.apache.commons.lang.StringUtils; public class DBUtils { public static final String DATA_SOURCE = "java:/ENGINEDataSource"; public static Map<String, ClientInfo> getAllSsoClientsInfo() { DataSource ds; try { ds = (DataSource) new InitialContext().lookup(DATA_SOURCE); if (ds == null) { throw new RuntimeException("Failed to obtain data source"); } Map<String, ClientInfo> map = new HashMap<>(); String sql = "SELECT client_id, client_secret, certificate_location, callback_prefix, " + "notification_callback, scope, trusted, notification_callback_protocol, " + "notification_callback_verify_host, notification_callback_verify_chain from sso_clients"; try ( Connection connection = ds.getConnection(); PreparedStatement ps = connection.prepareStatement(sql) ) { try (ResultSet rs = ps.executeQuery()) { while (rs.next()) { String clientId = rs.getString("client_id"); map.put(clientId, new ClientInfo().withClientId(clientId) .withClientSecret(rs.getString("client_secret")) .withCertificateLocation(rs.getString("certificate_location")) .withCallbackPrefix(rs.getString("callback_prefix")) .withClientNotificationCallback(StringUtils.defaultIfEmpty(rs.getString("notification_callback"), "")) .withScope(SsoUtils.scopeAsList(rs.getString("scope"))) .withIsTrusted(rs.getBoolean("trusted")) .withNotificationCallbackProtocol(rs.getString("notification_callback_protocol")) .withNotificationCallbackVerifyHost(rs.getBoolean("notification_callback_verify_host")) .withNotificationCallVerifyChain(rs.getBoolean("notification_callback_verify_chain"))); } } } return map; } catch (SQLException ex) { throw new RuntimeException("Database query failed", ex); } catch (NamingException ex) { throw new RuntimeException("Error looking up resource " + DATA_SOURCE, ex); } catch (Exception ex) { throw new RuntimeException("Unable to initialize client registry", ex); } } public static Map<String, List<String>> getAllSsoScopeDependencies() { DataSource ds; try { ds = (DataSource) new InitialContext().lookup(DATA_SOURCE); if (ds == null) { throw new RuntimeException("Failed to obtain data source"); } Map<String, List<String>> map = new HashMap<>(); String sql = "SELECT scope, dependencies FROM sso_scope_dependency"; try ( Connection connection = ds.getConnection(); PreparedStatement ps = connection.prepareStatement(sql) ) { try (ResultSet rs = ps.executeQuery()) { while (rs.next()) { map.put(rs.getString("scope"), SsoUtils.scopeAsList(rs.getString("dependencies"))); } } } return map; } catch (SQLException ex) { throw new RuntimeException("Database query failed", ex); } catch (NamingException ex) { throw new RuntimeException("Error looking up resource " + DATA_SOURCE, ex); } catch (Exception ex) { throw new RuntimeException("Unable to initialize scope dependencies", ex); } } }