@Override protected void generateStatementsImpl() throws CustomChangeException { convertFedProviderToComponent(LDAPConstants.LDAP_PROVIDER, "org.keycloak.storage.ldap.mappers.LDAPStorageMapper"); }
private void addNewAdminRoles() throws SQLException, DatabaseException{ addNewMasterAdminRoles(); addNewRealmAdminRoles(); confirmationMessage.append("Adding new admin roles. "); }
@Override protected void generateStatementsImpl() throws CustomChangeException { statements.add(generateUpdateStatement("RESOURCE_SERVER_POLICY")); statements.add(generateUpdateStatement("RESOURCE_SERVER_RESOURCE")); statements.add(generateUpdateStatement("RESOURCE_SERVER_SCOPE")); }
@Override protected void generateStatementsImpl() throws CustomChangeException { realmTableName = database.correctObjectName("REALM", Table.class); try { convertSocialToIdFedRealms(); convertSocialToIdFedUsers(); addAccessCodeLoginTimeout(); addNewAdminRoles(); addDefaultProtocolMappers(); } catch (Exception e) { throw new CustomChangeException(getTaskId() + ": Exception when updating data from previous version", e); } }
@Override public SqlStatement[] generateStatements(Database database) throws CustomChangeException { this.database = database; jdbcConnection = (JdbcConnection) database.getConnection(); connection = jdbcConnection.getWrappedConnection(); if (isApplicable()) { confirmationMessage.append(getTaskId() + ": "); generateStatementsImpl(); } else { confirmationMessage.append(getTaskId() + ": no update applicable for this task"); } return statements.toArray(new SqlStatement[statements.size()]); }
protected void addNewMasterAdminRoles() throws SQLException, DatabaseException { String adminRoleId = getAdminRoleId(); String masterRealmId = Config.getAdminRealm(); PreparedStatement statement = jdbcConnection.prepareStatement("select NAME from " + getTableName("REALM")); try { ResultSet resultSet = statement.executeQuery(); String masterAdminAppName = realmName + "-realm"; PreparedStatement statement2 = jdbcConnection.prepareStatement("select ID from " + getTableName("CLIENT") + " where REALM_ID = ? AND NAME = ?"); statement2.setString(1, masterRealmId); statement2.setString(2, masterAdminAppName); String masterAdminAppId = resultSet2.getString("ID"); addAdminRole(AdminRoles.VIEW_IDENTITY_PROVIDERS, masterRealmId, masterAdminAppId, adminRoleId); addAdminRole(AdminRoles.MANAGE_IDENTITY_PROVIDERS, masterRealmId, masterAdminAppId, adminRoleId); } else { throw new IllegalStateException("Couldn't find ID of '" + masterAdminAppName + "' application in 'master' realm. ");
protected void addNewRealmAdminRoles() throws SQLException, DatabaseException { PreparedStatement statement = jdbcConnection.prepareStatement("select CLIENT.ID REALM_ADMIN_APP_ID, CLIENT.REALM_ID REALM_ID, KEYCLOAK_ROLE.ID ADMIN_ROLE_ID from " + getTableName("CLIENT") + " CLIENT," + getTableName("KEYCLOAK_ROLE") + " KEYCLOAK_ROLE where KEYCLOAK_ROLE.APPLICATION = CLIENT.ID AND CLIENT.NAME = 'realm-management' AND KEYCLOAK_ROLE.NAME = ?"); statement.setString(1, AdminRoles.REALM_ADMIN); try { ResultSet resultSet = statement.executeQuery(); try { while (resultSet.next()) { String realmAdminAppId = resultSet.getString("REALM_ADMIN_APP_ID"); String realmId = resultSet.getString("REALM_ID"); String adminRoleId = resultSet.getString("ADMIN_ROLE_ID"); addAdminRole(AdminRoles.VIEW_IDENTITY_PROVIDERS, realmId, realmAdminAppId, adminRoleId); addAdminRole(AdminRoles.MANAGE_IDENTITY_PROVIDERS, realmId, realmAdminAppId, adminRoleId); } } finally { resultSet.close(); } } finally { statement.close(); } }
private String getAdminRoleId() throws SQLException, DatabaseException { PreparedStatement statement = jdbcConnection.prepareStatement("select ID from " + getTableName("KEYCLOAK_ROLE") + " where NAME = ? AND REALM = ?"); statement.setString(1, AdminRoles.ADMIN); statement.setString(2, Config.getAdminRealm()); try { ResultSet resultSet = statement.executeQuery(); try { if (resultSet.next()) { return resultSet.getString("ID"); } else { throw new IllegalStateException("Couldn't find ID of 'admin' role in 'master' realm"); } } finally { resultSet.close(); } } finally { statement.close(); } }
protected boolean isApplicable() throws CustomChangeException { try { String correctedTableName = database.correctObjectName("REALM", Table.class); if (SnapshotGeneratorFactory.getInstance().has(new Table().setName(correctedTableName), database)) { ResultSet resultSet = connection.createStatement().executeQuery("SELECT ID FROM " + getTableName(correctedTableName)); try { return (resultSet.next()); } finally { resultSet.close(); } } else { return false; } } catch (Exception e) { throw new CustomChangeException("Failed to check database availability", e); } }
private SqlStatement generateUpdateStatement(String resourceServerDetailTable) { String resourceServerTableName = database.correctObjectName(getTableName("RESOURCE_SERVER"), Table.class); String resourceServerDetailTableName = database.correctObjectName(getTableName(resourceServerDetailTable), Table.class);
@Override protected void generateStatementsImpl() throws CustomChangeException { List<ProviderFactory> factories = kcSession.getKeycloakSessionFactory().getProviderFactories(UserStorageProvider.class); for (ProviderFactory factory : factories) { if (!factory.getId().equals(LDAPConstants.LDAP_PROVIDER)) { convertFedProviderToComponent(factory.getId(), null); } } }
@Override protected void generateStatementsImpl() throws CustomChangeException { String offlineUserSessionsTableName = database.correctObjectName("OFFLINE_USER_SESSION", Table.class); try { int currentTime = Time.currentTime(); UpdateStatement updateStatement = new UpdateStatement(null, null, offlineUserSessionsTableName) .addNewColumnValue("LAST_SESSION_REFRESH", currentTime); statements.add(updateStatement); confirmationMessage.append("Updated column LAST_SESSION_REFRESH in OFFLINE_USER_SESSION table with time " + currentTime); } catch (Exception e) { throw new CustomChangeException(getTaskId() + ": Exception when updating data from previous version", e); } }
@Override protected void generateStatementsImpl() throws CustomChangeException { realmTableName = database.correctObjectName("REALM", Table.class); try { convertSocialToIdFedRealms(); convertSocialToIdFedUsers(); addAccessCodeLoginTimeout(); addNewAdminRoles(); addDefaultProtocolMappers(); } catch (Exception e) { throw new CustomChangeException(getTaskId() + ": Exception when updating data from previous version", e); } }
@Override public SqlStatement[] generateStatements(Database database) throws CustomChangeException { this.database = database; jdbcConnection = (JdbcConnection) database.getConnection(); connection = jdbcConnection.getWrappedConnection(); if (isApplicable()) { confirmationMessage.append(getTaskId() + ": "); generateStatementsImpl(); } else { confirmationMessage.append(getTaskId() + ": no update applicable for this task"); } return statements.toArray(new SqlStatement[statements.size()]); }
protected void addNewMasterAdminRoles() throws SQLException, DatabaseException { String adminRoleId = getAdminRoleId(); String masterRealmId = Config.getAdminRealm(); PreparedStatement statement = jdbcConnection.prepareStatement("select NAME from " + getTableName("REALM")); try { ResultSet resultSet = statement.executeQuery(); String masterAdminAppName = realmName + "-realm"; PreparedStatement statement2 = jdbcConnection.prepareStatement("select ID from " + getTableName("CLIENT") + " where REALM_ID = ? AND NAME = ?"); statement2.setString(1, masterRealmId); statement2.setString(2, masterAdminAppName); String masterAdminAppId = resultSet2.getString("ID"); addAdminRole(AdminRoles.VIEW_IDENTITY_PROVIDERS, masterRealmId, masterAdminAppId, adminRoleId); addAdminRole(AdminRoles.MANAGE_IDENTITY_PROVIDERS, masterRealmId, masterAdminAppId, adminRoleId); } else { throw new IllegalStateException("Couldn't find ID of '" + masterAdminAppName + "' application in 'master' realm. ");
private void addNewAdminRoles() throws SQLException, DatabaseException{ addNewMasterAdminRoles(); addNewRealmAdminRoles(); confirmationMessage.append("Adding new admin roles. "); }
protected void addNewRealmAdminRoles() throws SQLException, DatabaseException { PreparedStatement statement = jdbcConnection.prepareStatement("select CLIENT.ID REALM_ADMIN_APP_ID, CLIENT.REALM_ID REALM_ID, KEYCLOAK_ROLE.ID ADMIN_ROLE_ID from " + getTableName("CLIENT") + " CLIENT," + getTableName("KEYCLOAK_ROLE") + " KEYCLOAK_ROLE where KEYCLOAK_ROLE.APPLICATION = CLIENT.ID AND CLIENT.NAME = 'realm-management' AND KEYCLOAK_ROLE.NAME = ?"); statement.setString(1, AdminRoles.REALM_ADMIN); try { ResultSet resultSet = statement.executeQuery(); try { while (resultSet.next()) { String realmAdminAppId = resultSet.getString("REALM_ADMIN_APP_ID"); String realmId = resultSet.getString("REALM_ID"); String adminRoleId = resultSet.getString("ADMIN_ROLE_ID"); addAdminRole(AdminRoles.VIEW_IDENTITY_PROVIDERS, realmId, realmAdminAppId, adminRoleId); addAdminRole(AdminRoles.MANAGE_IDENTITY_PROVIDERS, realmId, realmAdminAppId, adminRoleId); } } finally { resultSet.close(); } } finally { statement.close(); } }
private String getAdminRoleId() throws SQLException, DatabaseException { PreparedStatement statement = jdbcConnection.prepareStatement("select ID from " + getTableName("KEYCLOAK_ROLE") + " where NAME = ? AND REALM = ?"); statement.setString(1, AdminRoles.ADMIN); statement.setString(2, Config.getAdminRealm()); try { ResultSet resultSet = statement.executeQuery(); try { if (resultSet.next()) { return resultSet.getString("ID"); } else { throw new IllegalStateException("Couldn't find ID of 'admin' role in 'master' realm"); } } finally { resultSet.close(); } } finally { statement.close(); } }
protected boolean isApplicable() throws CustomChangeException { try { String correctedTableName = database.correctObjectName("REALM", Table.class); if (SnapshotGeneratorFactory.getInstance().has(new Table().setName(correctedTableName), database)) { ResultSet resultSet = connection.createStatement().executeQuery("SELECT ID FROM " + getTableName(correctedTableName)); try { return (resultSet.next()); } finally { resultSet.close(); } } else { return false; } } catch (Exception e) { throw new CustomChangeException("Failed to check database availability", e); } }
protected void convertSocialToIdFedUsers() throws SQLException, DatabaseException { String federatedIdentityTableName = database.correctObjectName("FEDERATED_IDENTITY", Table.class); PreparedStatement statement = jdbcConnection.prepareStatement("select REALM_ID, USER_ID, SOCIAL_PROVIDER, SOCIAL_USER_ID, SOCIAL_USERNAME from " + getTableName("USER_SOCIAL_LINK")); try { ResultSet resultSet = statement.executeQuery(); try { int count = 0; while (resultSet.next()) { InsertStatement insert = new InsertStatement(null, null, federatedIdentityTableName) .addColumnValue("REALM_ID", resultSet.getString("REALM_ID")) .addColumnValue("USER_ID", resultSet.getString("USER_ID")) .addColumnValue("IDENTITY_PROVIDER", resultSet.getString("SOCIAL_PROVIDER")) .addColumnValue("FEDERATED_USER_ID", resultSet.getString("SOCIAL_USER_ID")) .addColumnValue("FEDERATED_USERNAME", resultSet.getString("SOCIAL_USERNAME")); count++; statements.add(insert); } confirmationMessage.append("Updating " + count + " social links to federated identities. "); } finally { resultSet.close(); } } finally { statement.close(); } }