fix migration scripts
This commit is contained in:
parent
798fd84698
commit
50fc083d97
9 changed files with 276 additions and 136 deletions
|
@ -29,19 +29,17 @@ import java.sql.PreparedStatement;
|
|||
import java.sql.ResultSet;
|
||||
|
||||
/**
|
||||
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
||||
* @author <a href="mailto:bburke@redhat.com">Bill Burke</a>
|
||||
*/
|
||||
public class MigrateUserFedToComponent extends AbstractUserFedToComponent {
|
||||
|
||||
@Override
|
||||
protected void generateStatementsImpl() throws CustomChangeException {
|
||||
String providerId = LDAPConstants.LDAP_PROVIDER;
|
||||
convertFedProviderToComponent(LDAPConstants.LDAP_PROVIDER, "org.keycloak.storage.ldap.mappers.LDAPStorageMapper");
|
||||
convertFedProviderToComponent("kerberos", null);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getTaskId() {
|
||||
return "Update 2.4.0.Final";
|
||||
return "Update 2.4.1.Final";
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,38 @@
|
|||
/*
|
||||
* Copyright 2016 Red Hat, Inc. and/or its affiliates
|
||||
* and other contributors as indicated by the @author tags.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.keycloak.connections.jpa.updater.liquibase.custom;
|
||||
|
||||
import liquibase.exception.CustomChangeException;
|
||||
import org.keycloak.models.LDAPConstants;
|
||||
|
||||
/**
|
||||
* @author <a href="mailto:bburke@redhat.com">Bill Burke</a>
|
||||
*/
|
||||
public class PortLdapUserFedToComponentModel extends AbstractUserFedToComponent {
|
||||
|
||||
@Override
|
||||
protected void generateStatementsImpl() throws CustomChangeException {
|
||||
String providerId = LDAPConstants.LDAP_PROVIDER;
|
||||
convertFedProviderToComponent(LDAPConstants.LDAP_PROVIDER, "org.keycloak.storage.ldap.mappers.LDAPStorageMapper");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getTaskId() {
|
||||
return "Update 2.4.0.Final";
|
||||
}
|
||||
}
|
|
@ -19,7 +19,7 @@
|
|||
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd">
|
||||
|
||||
<changeSet author="bburke@redhat.com" id="2.4.0">
|
||||
<customChange class="org.keycloak.connections.jpa.updater.liquibase.custom.MigrateUserFedToComponent"/>
|
||||
<customChange class="org.keycloak.connections.jpa.updater.liquibase.custom.PortLdapUserFedToComponentModel"/>
|
||||
</changeSet>
|
||||
|
||||
</databaseChangeLog>
|
25
model/jpa/src/main/resources/META-INF/jpa-changelog-2.4.1.xml
Executable file
25
model/jpa/src/main/resources/META-INF/jpa-changelog-2.4.1.xml
Executable file
|
@ -0,0 +1,25 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!--
|
||||
~ Copyright 2016 Red Hat, Inc. and/or its affiliates
|
||||
~ and other contributors as indicated by the @author tags.
|
||||
~
|
||||
~ Licensed under the Apache License, Version 2.0 (the "License");
|
||||
~ you may not use this file except in compliance with the License.
|
||||
~ You may obtain a copy of the License at
|
||||
~
|
||||
~ http://www.apache.org/licenses/LICENSE-2.0
|
||||
~
|
||||
~ Unless required by applicable law or agreed to in writing, software
|
||||
~ distributed under the License is distributed on an "AS IS" BASIS,
|
||||
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
~ See the License for the specific language governing permissions and
|
||||
~ limitations under the License.
|
||||
-->
|
||||
|
||||
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd">
|
||||
|
||||
<changeSet author="bburke@redhat.com" id="2.4.1">
|
||||
<customChange class="org.keycloak.connections.jpa.updater.liquibase.custom.MigrateUserFedToComponent"/>
|
||||
</changeSet>
|
||||
|
||||
</databaseChangeLog>
|
|
@ -44,4 +44,5 @@
|
|||
<include file="META-INF/jpa-changelog-2.2.0.xml"/>
|
||||
<include file="META-INF/jpa-changelog-2.3.0.xml"/>
|
||||
<include file="META-INF/jpa-changelog-2.4.0.xml"/>
|
||||
<include file="META-INF/jpa-changelog-2.4.1.xml"/>
|
||||
</databaseChangeLog>
|
||||
|
|
|
@ -35,6 +35,7 @@ import org.keycloak.connections.mongo.updater.impl.updates.Update1_8_0;
|
|||
import org.keycloak.connections.mongo.updater.impl.updates.Update1_9_2;
|
||||
import org.keycloak.connections.mongo.updater.impl.updates.Update2_3_0;
|
||||
import org.keycloak.connections.mongo.updater.impl.updates.Update2_4_0;
|
||||
import org.keycloak.connections.mongo.updater.impl.updates.Update2_4_1;
|
||||
import org.keycloak.models.KeycloakSession;
|
||||
|
||||
import java.util.Date;
|
||||
|
@ -61,7 +62,8 @@ public class DefaultMongoUpdaterProvider implements MongoUpdaterProvider {
|
|||
Update1_8_0.class,
|
||||
Update1_9_2.class,
|
||||
Update2_3_0.class,
|
||||
Update2_4_0.class
|
||||
Update2_4_0.class,
|
||||
Update2_4_1.class
|
||||
};
|
||||
|
||||
@Override
|
||||
|
|
|
@ -0,0 +1,167 @@
|
|||
/*
|
||||
* Copyright 2016 Red Hat, Inc. and/or its affiliates
|
||||
* and other contributors as indicated by the @author tags.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.keycloak.connections.mongo.updater.impl.updates;
|
||||
|
||||
import com.mongodb.BasicDBList;
|
||||
import com.mongodb.BasicDBObject;
|
||||
import com.mongodb.DBCollection;
|
||||
import com.mongodb.DBCursor;
|
||||
import org.jboss.logging.Logger;
|
||||
import org.keycloak.storage.UserStorageProvider;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
|
||||
* @version $Revision: 1 $
|
||||
*/
|
||||
public abstract class AbstractMigrateUserFedToComponent extends Update {
|
||||
private final Logger logger = Logger.getLogger(getClass());
|
||||
|
||||
public void portUserFedToComponent(String providerId) {
|
||||
DBCollection realms = db.getCollection("realms");
|
||||
DBCursor cursor = realms.find();
|
||||
while (cursor.hasNext()) {
|
||||
BasicDBObject realm = (BasicDBObject) cursor.next();
|
||||
|
||||
String realmId = realm.getString("_id");
|
||||
Set<String> removedProviders = new HashSet<>();
|
||||
|
||||
BasicDBList componentEntities = (BasicDBList) realm.get("componentEntities");
|
||||
BasicDBList federationProviders = (BasicDBList) realm.get("userFederationProviders");
|
||||
for (Object obj : federationProviders) {
|
||||
BasicDBObject fedProvider = (BasicDBObject)obj;
|
||||
if (fedProvider.getString("providerName").equals(providerId)) {
|
||||
String id = fedProvider.getString("id");
|
||||
removedProviders.add(id);
|
||||
int priority = fedProvider.getInt("priority");
|
||||
String displayName = fedProvider.getString("displayName");
|
||||
int fullSyncPeriod = fedProvider.getInt("fullSyncPeriod");
|
||||
int changedSyncPeriod = fedProvider.getInt("changedSyncPeriod");
|
||||
int lastSync = fedProvider.getInt("lastSync");
|
||||
BasicDBObject component = new BasicDBObject();
|
||||
component.put("id", id);
|
||||
component.put("name", displayName);
|
||||
component.put("providerType", UserStorageProvider.class.getName());
|
||||
component.put("providerId", providerId);
|
||||
component.put("parentId", realmId);
|
||||
|
||||
BasicDBObject config = new BasicDBObject();
|
||||
config.put("priority", Collections.singletonList(Integer.toString(priority)));
|
||||
config.put("fullSyncPeriod", Collections.singletonList(Integer.toString(fullSyncPeriod)));
|
||||
config.put("changedSyncPeriod", Collections.singletonList(Integer.toString(changedSyncPeriod)));
|
||||
config.put("lastSync", Collections.singletonList(Integer.toString(lastSync)));
|
||||
|
||||
BasicDBObject fedConfig = (BasicDBObject)fedProvider.get("config");
|
||||
if (fedConfig != null) {
|
||||
for (Map.Entry<String, Object> attr : new HashSet<>(fedConfig.entrySet())) {
|
||||
String attrName = attr.getKey();
|
||||
String attrValue = attr.getValue().toString();
|
||||
config.put(attrName, Collections.singletonList(attrValue));
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
component.put("config", config);
|
||||
|
||||
componentEntities.add(component);
|
||||
|
||||
}
|
||||
}
|
||||
Iterator<Object> it = federationProviders.iterator();
|
||||
while (it.hasNext()) {
|
||||
BasicDBObject fedProvider = (BasicDBObject)it.next();
|
||||
String id = fedProvider.getString("id");
|
||||
if (removedProviders.contains(id)) {
|
||||
it.remove();
|
||||
}
|
||||
|
||||
}
|
||||
realms.update(new BasicDBObject().append("_id", realmId), realm);
|
||||
}
|
||||
}
|
||||
|
||||
public void portUserFedMappersToComponent(String providerId, String mapperType) {
|
||||
//logger.info("*** port mappers");
|
||||
DBCollection realms = db.getCollection("realms");
|
||||
DBCursor cursor = realms.find();
|
||||
while (cursor.hasNext()) {
|
||||
BasicDBObject realm = (BasicDBObject) cursor.next();
|
||||
|
||||
String realmId = realm.getString("_id");
|
||||
Set<String> removedProviders = new HashSet<>();
|
||||
|
||||
BasicDBList componentEntities = (BasicDBList) realm.get("componentEntities");
|
||||
BasicDBList federationProviders = (BasicDBList) realm.get("userFederationProviders");
|
||||
BasicDBList fedMappers = (BasicDBList) realm.get("userFederationMappers");
|
||||
for (Object obj : federationProviders) {
|
||||
BasicDBObject fedProvider = (BasicDBObject)obj;
|
||||
String providerName = fedProvider.getString("providerName");
|
||||
//logger.info("looking for mappers of fed provider: " + providerName);
|
||||
if (providerName.equals(providerId)) {
|
||||
String id = fedProvider.getString("id");
|
||||
//logger.info("found fed provider: " + id + ", looking at mappers");
|
||||
for (Object obj2 : fedMappers) {
|
||||
BasicDBObject fedMapper = (BasicDBObject)obj2;
|
||||
String federationProviderId = fedMapper.getString("federationProviderId");
|
||||
//logger.info("looking at mapper with federationProviderId: " + federationProviderId);
|
||||
if (federationProviderId.equals(id)) {
|
||||
String name = fedMapper.getString("name");
|
||||
String mapperId = fedMapper.getString("id");
|
||||
removedProviders.add(mapperId);
|
||||
String mapperProviderId = fedMapper.getString("federationMapperType");
|
||||
BasicDBObject component = new BasicDBObject();
|
||||
component.put("id", mapperId);
|
||||
component.put("name", name);
|
||||
component.put("providerType", mapperType);
|
||||
component.put("providerId", mapperProviderId);
|
||||
component.put("parentId", id);
|
||||
|
||||
BasicDBObject fedConfig = (BasicDBObject)fedMapper.get("config");
|
||||
BasicDBObject config = new BasicDBObject();
|
||||
if (fedConfig != null) {
|
||||
for (Map.Entry<String, Object> attr : new HashSet<>(fedConfig.entrySet())) {
|
||||
String attrName = attr.getKey();
|
||||
String attrValue = attr.getValue().toString();
|
||||
config.put(attrName, Collections.singletonList(attrValue));
|
||||
|
||||
}
|
||||
}
|
||||
component.put("config", config);
|
||||
componentEntities.add(component);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Iterator<Object> it = fedMappers.iterator();
|
||||
while (it.hasNext()) {
|
||||
BasicDBObject fedMapper = (BasicDBObject)it.next();
|
||||
String id = fedMapper.getString("id");
|
||||
if (removedProviders.contains(id)) {
|
||||
it.remove();
|
||||
}
|
||||
|
||||
}
|
||||
realms.update(new BasicDBObject().append("_id", realmId), realm);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -37,8 +37,7 @@ import java.util.Set;
|
|||
/**
|
||||
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
||||
*/
|
||||
public class Update2_4_0 extends Update {
|
||||
private final Logger logger = Logger.getLogger(getClass());
|
||||
public class Update2_4_0 extends AbstractMigrateUserFedToComponent {
|
||||
|
||||
@Override
|
||||
public String getId() {
|
||||
|
@ -49,134 +48,6 @@ public class Update2_4_0 extends Update {
|
|||
public void update(KeycloakSession session) {
|
||||
portUserFedMappersToComponent(LDAPConstants.LDAP_PROVIDER, "org.keycloak.storage.ldap.mappers.LDAPStorageMapper");
|
||||
portUserFedToComponent(LDAPConstants.LDAP_PROVIDER);
|
||||
portUserFedToComponent("kerberos");
|
||||
}
|
||||
|
||||
public void portUserFedToComponent(String providerId) {
|
||||
DBCollection realms = db.getCollection("realms");
|
||||
DBCursor cursor = realms.find();
|
||||
while (cursor.hasNext()) {
|
||||
BasicDBObject realm = (BasicDBObject) cursor.next();
|
||||
|
||||
String realmId = realm.getString("_id");
|
||||
Set<String> removedProviders = new HashSet<>();
|
||||
|
||||
BasicDBList componentEntities = (BasicDBList) realm.get("componentEntities");
|
||||
BasicDBList federationProviders = (BasicDBList) realm.get("userFederationProviders");
|
||||
for (Object obj : federationProviders) {
|
||||
BasicDBObject fedProvider = (BasicDBObject)obj;
|
||||
if (fedProvider.getString("providerName").equals(providerId)) {
|
||||
String id = fedProvider.getString("id");
|
||||
removedProviders.add(id);
|
||||
int priority = fedProvider.getInt("priority");
|
||||
String displayName = fedProvider.getString("displayName");
|
||||
int fullSyncPeriod = fedProvider.getInt("fullSyncPeriod");
|
||||
int changedSyncPeriod = fedProvider.getInt("changedSyncPeriod");
|
||||
int lastSync = fedProvider.getInt("lastSync");
|
||||
BasicDBObject component = new BasicDBObject();
|
||||
component.put("id", id);
|
||||
component.put("name", displayName);
|
||||
component.put("providerType", UserStorageProvider.class.getName());
|
||||
component.put("providerId", providerId);
|
||||
component.put("parentId", realmId);
|
||||
|
||||
BasicDBObject config = new BasicDBObject();
|
||||
config.put("priority", Collections.singletonList(Integer.toString(priority)));
|
||||
config.put("fullSyncPeriod", Collections.singletonList(Integer.toString(fullSyncPeriod)));
|
||||
config.put("changedSyncPeriod", Collections.singletonList(Integer.toString(changedSyncPeriod)));
|
||||
config.put("lastSync", Collections.singletonList(Integer.toString(lastSync)));
|
||||
|
||||
BasicDBObject fedConfig = (BasicDBObject)fedProvider.get("config");
|
||||
if (fedConfig != null) {
|
||||
for (Map.Entry<String, Object> attr : new HashSet<>(fedConfig.entrySet())) {
|
||||
String attrName = attr.getKey();
|
||||
String attrValue = attr.getValue().toString();
|
||||
config.put(attrName, Collections.singletonList(attrValue));
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
component.put("config", config);
|
||||
|
||||
componentEntities.add(component);
|
||||
|
||||
}
|
||||
}
|
||||
Iterator<Object> it = federationProviders.iterator();
|
||||
while (it.hasNext()) {
|
||||
BasicDBObject fedProvider = (BasicDBObject)it.next();
|
||||
String id = fedProvider.getString("id");
|
||||
if (removedProviders.contains(id)) {
|
||||
it.remove();
|
||||
}
|
||||
|
||||
}
|
||||
realms.update(new BasicDBObject().append("_id", realmId), realm);
|
||||
}
|
||||
}
|
||||
public void portUserFedMappersToComponent(String providerId, String mapperType) {
|
||||
//logger.info("*** port mappers");
|
||||
DBCollection realms = db.getCollection("realms");
|
||||
DBCursor cursor = realms.find();
|
||||
while (cursor.hasNext()) {
|
||||
BasicDBObject realm = (BasicDBObject) cursor.next();
|
||||
|
||||
String realmId = realm.getString("_id");
|
||||
Set<String> removedProviders = new HashSet<>();
|
||||
|
||||
BasicDBList componentEntities = (BasicDBList) realm.get("componentEntities");
|
||||
BasicDBList federationProviders = (BasicDBList) realm.get("userFederationProviders");
|
||||
BasicDBList fedMappers = (BasicDBList) realm.get("userFederationMappers");
|
||||
for (Object obj : federationProviders) {
|
||||
BasicDBObject fedProvider = (BasicDBObject)obj;
|
||||
String providerName = fedProvider.getString("providerName");
|
||||
//logger.info("looking for mappers of fed provider: " + providerName);
|
||||
if (providerName.equals(providerId)) {
|
||||
String id = fedProvider.getString("id");
|
||||
//logger.info("found fed provider: " + id + ", looking at mappers");
|
||||
for (Object obj2 : fedMappers) {
|
||||
BasicDBObject fedMapper = (BasicDBObject)obj2;
|
||||
String federationProviderId = fedMapper.getString("federationProviderId");
|
||||
//logger.info("looking at mapper with federationProviderId: " + federationProviderId);
|
||||
if (federationProviderId.equals(id)) {
|
||||
String name = fedMapper.getString("name");
|
||||
String mapperId = fedMapper.getString("id");
|
||||
removedProviders.add(mapperId);
|
||||
String mapperProviderId = fedMapper.getString("federationMapperType");
|
||||
BasicDBObject component = new BasicDBObject();
|
||||
component.put("id", mapperId);
|
||||
component.put("name", name);
|
||||
component.put("providerType", mapperType);
|
||||
component.put("providerId", mapperProviderId);
|
||||
component.put("parentId", id);
|
||||
|
||||
BasicDBObject fedConfig = (BasicDBObject)fedMapper.get("config");
|
||||
BasicDBObject config = new BasicDBObject();
|
||||
if (fedConfig != null) {
|
||||
for (Map.Entry<String, Object> attr : new HashSet<>(fedConfig.entrySet())) {
|
||||
String attrName = attr.getKey();
|
||||
String attrValue = attr.getValue().toString();
|
||||
config.put(attrName, Collections.singletonList(attrValue));
|
||||
|
||||
}
|
||||
}
|
||||
component.put("config", config);
|
||||
componentEntities.add(component);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Iterator<Object> it = fedMappers.iterator();
|
||||
while (it.hasNext()) {
|
||||
BasicDBObject fedMapper = (BasicDBObject)it.next();
|
||||
String id = fedMapper.getString("id");
|
||||
if (removedProviders.contains(id)) {
|
||||
it.remove();
|
||||
}
|
||||
|
||||
}
|
||||
realms.update(new BasicDBObject().append("_id", realmId), realm);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,38 @@
|
|||
/*
|
||||
* Copyright 2016 Red Hat, Inc. and/or its affiliates
|
||||
* and other contributors as indicated by the @author tags.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.keycloak.connections.mongo.updater.impl.updates;
|
||||
|
||||
import org.keycloak.models.KeycloakSession;
|
||||
import org.keycloak.models.LDAPConstants;
|
||||
|
||||
/**
|
||||
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
||||
*/
|
||||
public class Update2_4_1 extends AbstractMigrateUserFedToComponent {
|
||||
|
||||
@Override
|
||||
public String getId() {
|
||||
return "2.4.1";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update(KeycloakSession session) {
|
||||
portUserFedToComponent("kerberos");
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in a new issue