keycloak
公開メンバ関数 | 限定公開メンバ関数 | 限定公開変数類 | 全メンバ一覧
org.keycloak.connections.jpa.updater.liquibase.custom.MigrateUserFedToComponent クラス
org.keycloak.connections.jpa.updater.liquibase.custom.MigrateUserFedToComponent の継承関係図
Inheritance graph
org.keycloak.connections.jpa.updater.liquibase.custom.MigrateUserFedToComponent 連携図
Collaboration graph

公開メンバ関数

ValidationErrors validate (Database database)
 
void setFileOpener (ResourceAccessor resourceAccessor)
 
String getConfirmationMessage ()
 
void setUp () throws SetupException
 
SqlStatement [] generateStatements (Database database) throws CustomChangeException
 

限定公開メンバ関数

void generateStatementsImpl () throws CustomChangeException
 
String getTaskId ()
 
void convertFedProviderToComponent (String providerId, String newMapperType) throws CustomChangeException
 
InsertStatement componentConfigStatement (String componentId, String name, String value)
 
void convertFedMapperToComponent (String realmId, String parentId, String newMapperType) throws CustomChangeException
 
boolean isApplicable () throws CustomChangeException
 
String getTableName (String tableName)
 

限定公開変数類

KeycloakSession kcSession
 
Database database
 
JdbcConnection jdbcConnection
 
Connection connection
 
StringBuilder confirmationMessage = new StringBuilder()
 
List< SqlStatement > statements = new ArrayList<SqlStatement>()
 

詳解

著者
Bill Burke

関数詳解

◆ componentConfigStatement()

InsertStatement org.keycloak.connections.jpa.updater.liquibase.custom.AbstractUserFedToComponent.componentConfigStatement ( String  componentId,
String  name,
String  value 
)
inlineprotectedinherited
115  {
116  return new InsertStatement(null, null, database.correctObjectName("COMPONENT_CONFIG", Table.class))
117  .addColumnValue("ID", KeycloakModelUtils.generateId())
118  .addColumnValue("COMPONENT_ID", componentId)
119  .addColumnValue("NAME", name)
120  .addColumnValue("VALUE", value);
121  }
Database database
Definition: CustomKeycloakTask.java:51

◆ convertFedMapperToComponent()

void org.keycloak.connections.jpa.updater.liquibase.custom.AbstractUserFedToComponent.convertFedMapperToComponent ( String  realmId,
String  parentId,
String  newMapperType 
) throws CustomChangeException
inlineprotectedinherited
123  {
124  try {
125  PreparedStatement statement = jdbcConnection.prepareStatement("select ID, NAME, FEDERATION_MAPPER_TYPE from " + getTableName("USER_FEDERATION_MAPPER") + " WHERE FEDERATION_PROVIDER_ID=?");
126  statement.setString(1, parentId);
127 
128  try {
129  ResultSet resultSet = statement.executeQuery();
130  try {
131  while (resultSet.next()) {
132  String id = resultSet.getString(1);
133  String mapperName = resultSet.getString(2);
134  String fedMapperType = resultSet.getString(3);
135 
136  InsertStatement insertComponent = new InsertStatement(null, null, database.correctObjectName("COMPONENT", Table.class))
137  .addColumnValue("ID", id)
138  .addColumnValue("REALM_ID", realmId)
139  .addColumnValue("PARENT_ID", parentId)
140  .addColumnValue("NAME", mapperName)
141  .addColumnValue("PROVIDER_ID", fedMapperType)
142  .addColumnValue("PROVIDER_TYPE", newMapperType);
143 
144  statements.add(insertComponent);
145 
146 
147 
148  PreparedStatement configStatement = jdbcConnection.prepareStatement("select name, VALUE from " + getTableName("USER_FEDERATION_MAPPER_CONFIG") + " WHERE USER_FEDERATION_MAPPER_ID=?");
149  configStatement.setString(1, id);
150  try {
151  ResultSet configSet = configStatement.executeQuery();
152  try {
153  while (configSet.next()) {
154  String name = configSet.getString(1);
155  String value = configSet.getString(2);
156  statements.add(componentConfigStatement(id, name, value));
157  }
158  } finally {
159  configSet.close();
160  }
161  } finally {
162  configStatement.close();
163  }
164  DeleteStatement configDelete = new DeleteStatement(null, null, database.correctObjectName("USER_FEDERATION_MAPPER_CONFIG", Table.class));
165  configDelete.setWhere("USER_FEDERATION_MAPPER_ID=?");
166  configDelete.addWhereParameters(id);
167  statements.add(configDelete);
168  DeleteStatement deleteStatement = new DeleteStatement(null, null, database.correctObjectName("USER_FEDERATION_MAPPER", Table.class));
169  deleteStatement.setWhere("ID=?");
170  deleteStatement.addWhereParameters(id);
171  statements.add(deleteStatement);
172 
173 
174  }
175  } finally {
176  resultSet.close();
177  }
178  } finally {
179  statement.close();
180  }
181 
182  confirmationMessage.append("Updated " + statements.size() + " records in USER_FEDERATION_MAPPER table for " + parentId + " conversion to component model");
183  } catch (Exception e) {
184  throw new CustomChangeException(getTaskId() + ": Exception when updating data from previous version", e);
185  }
186  }
InsertStatement componentConfigStatement(String componentId, String name, String value)
Definition: AbstractUserFedToComponent.java:115
JdbcConnection jdbcConnection
Definition: CustomKeycloakTask.java:52
String getTableName(String tableName)
Definition: CustomKeycloakTask.java:132
List< SqlStatement > statements
Definition: CustomKeycloakTask.java:55
Database database
Definition: CustomKeycloakTask.java:51
StringBuilder confirmationMessage
Definition: CustomKeycloakTask.java:54

◆ convertFedProviderToComponent()

void org.keycloak.connections.jpa.updater.liquibase.custom.AbstractUserFedToComponent.convertFedProviderToComponent ( String  providerId,
String  newMapperType 
) throws CustomChangeException
inlineprotectedinherited
36  {
37  try {
38  PreparedStatement statement = jdbcConnection.prepareStatement("select ID, REALM_ID, PRIORITY, DISPLAY_NAME, FULL_SYNC_PERIOD, CHANGED_SYNC_PERIOD, LAST_SYNC from " + getTableName("USER_FEDERATION_PROVIDER") + " WHERE PROVIDER_NAME=?");
39  statement.setString(1, providerId);
40 
41  try {
42  ResultSet resultSet = statement.executeQuery();
43  try {
44  while (resultSet.next()) {
45  int index = 1;
46  String id = resultSet.getString(index++);
47  String realmId = resultSet.getString(index++);
48  int priority = resultSet.getInt(index++);
49  String displayName = resultSet.getString(index++);
50  int fullSyncPeriod = resultSet.getInt(index++);
51  int changedSyncPeriod = resultSet.getInt(index++);
52  int lastSync = resultSet.getInt(index++);
53 
54 
55  InsertStatement insertComponent = new InsertStatement(null, null, database.correctObjectName("COMPONENT", Table.class))
56  .addColumnValue("ID", id)
57  .addColumnValue("REALM_ID", realmId)
58  .addColumnValue("PARENT_ID", realmId)
59  .addColumnValue("NAME", displayName)
60  .addColumnValue("PROVIDER_ID", providerId)
61  .addColumnValue("PROVIDER_TYPE", UserStorageProvider.class.getName());
62 
63  statements.add(insertComponent);
64 
65  statements.add(componentConfigStatement(id, "priority", Integer.toString(priority)));
66  statements.add(componentConfigStatement(id, "fullSyncPeriod", Integer.toString(fullSyncPeriod)));
67  statements.add(componentConfigStatement(id, "changedSyncPeriod", Integer.toString(changedSyncPeriod)));
68  statements.add(componentConfigStatement(id, "lastSync", Integer.toString(lastSync)));
69  PreparedStatement configStatement = jdbcConnection.prepareStatement("select name, VALUE from " + getTableName("USER_FEDERATION_CONFIG") + " WHERE USER_FEDERATION_PROVIDER_ID=?");
70  configStatement.setString(1, id);
71  try {
72  ResultSet configSet = configStatement.executeQuery();
73  try {
74  while (configSet.next()) {
75  String name = configSet.getString(1);
76  String value = configSet.getString(2);
77  //logger.info("adding component config: " + name + ": " + value);
78  statements.add(componentConfigStatement(id, name, value));
79  }
80  } finally {
81  configSet.close();
82  }
83  } finally {
84  configStatement.close();
85  }
86 
87  if (newMapperType != null) {
88  convertFedMapperToComponent(realmId, id, newMapperType);
89  }
90 
91  DeleteStatement configDelete = new DeleteStatement(null, null, database.correctObjectName("USER_FEDERATION_CONFIG", Table.class));
92  configDelete.setWhere("USER_FEDERATION_PROVIDER_ID=?");
93  configDelete.addWhereParameters(id);
94 
95  statements.add(configDelete);
96  DeleteStatement deleteStatement = new DeleteStatement(null, null, database.correctObjectName("USER_FEDERATION_PROVIDER", Table.class));
97  deleteStatement.setWhere("ID=?");
98  deleteStatement.addWhereParameters(id);
99  statements.add(deleteStatement);
100 
101  }
102  } finally {
103  resultSet.close();
104  }
105  } finally {
106  statement.close();
107  }
108 
109  confirmationMessage.append("Updated " + statements.size() + " records in USER_FEDERATION_PROVIDER table for " + providerId + " conversion to component model");
110  } catch (Exception e) {
111  throw new CustomChangeException(getTaskId() + ": Exception when updating data from previous version", e);
112  }
113  }
InsertStatement componentConfigStatement(String componentId, String name, String value)
Definition: AbstractUserFedToComponent.java:115
JdbcConnection jdbcConnection
Definition: CustomKeycloakTask.java:52
void convertFedMapperToComponent(String realmId, String parentId, String newMapperType)
Definition: AbstractUserFedToComponent.java:123
String getTableName(String tableName)
Definition: CustomKeycloakTask.java:132
List< SqlStatement > statements
Definition: CustomKeycloakTask.java:55
Database database
Definition: CustomKeycloakTask.java:51
StringBuilder confirmationMessage
Definition: CustomKeycloakTask.java:54

◆ generateStatements()

SqlStatement [] org.keycloak.connections.jpa.updater.liquibase.custom.CustomKeycloakTask.generateStatements ( Database  database) throws CustomChangeException
inlineinherited
91  {
92  this.database = database;
93  jdbcConnection = (JdbcConnection) database.getConnection();
94  connection = jdbcConnection.getWrappedConnection();
95 
96  if (isApplicable()) {
97  confirmationMessage.append(getTaskId() + ": ");
99  } else {
100  confirmationMessage.append(getTaskId() + ": no update applicable for this task");
101  }
102 
103  return statements.toArray(new SqlStatement[statements.size()]);
104  }
JdbcConnection jdbcConnection
Definition: CustomKeycloakTask.java:52
List< SqlStatement > statements
Definition: CustomKeycloakTask.java:55
boolean isApplicable()
Definition: CustomKeycloakTask.java:106
Database database
Definition: CustomKeycloakTask.java:51
Connection connection
Definition: CustomKeycloakTask.java:53
StringBuilder confirmationMessage
Definition: CustomKeycloakTask.java:54

◆ generateStatementsImpl()

void org.keycloak.connections.jpa.updater.liquibase.custom.MigrateUserFedToComponent.generateStatementsImpl ( ) throws CustomChangeException
inlineprotected
33  {
34  List<ProviderFactory> factories = kcSession.getKeycloakSessionFactory().getProviderFactories(UserStorageProvider.class);
35  for (ProviderFactory factory : factories) {
36  if (!factory.getId().equals(LDAPConstants.LDAP_PROVIDER)) {
37  convertFedProviderToComponent(factory.getId(), null);
38  }
39  }
40  }
List< ProviderFactory > getProviderFactories(Class<? extends Provider > clazz)
KeycloakSession kcSession
Definition: CustomKeycloakTask.java:49
KeycloakSessionFactory getKeycloakSessionFactory()
void convertFedProviderToComponent(String providerId, String newMapperType)
Definition: AbstractUserFedToComponent.java:36

◆ getConfirmationMessage()

String org.keycloak.connections.jpa.updater.liquibase.custom.CustomKeycloakTask.getConfirmationMessage ( )
inlineinherited
68  {
69  return confirmationMessage.toString();
70  }
StringBuilder confirmationMessage
Definition: CustomKeycloakTask.java:54

◆ getTableName()

String org.keycloak.connections.jpa.updater.liquibase.custom.CustomKeycloakTask.getTableName ( String  tableName)
inlineprotectedinherited
132  {
133  String correctedSchemaName = database.escapeObjectName(database.getDefaultSchemaName(), Schema.class);
134  return LiquibaseJpaUpdaterProvider.getTable(tableName, correctedSchemaName);
135  }
Database database
Definition: CustomKeycloakTask.java:51

◆ getTaskId()

String org.keycloak.connections.jpa.updater.liquibase.custom.MigrateUserFedToComponent.getTaskId ( )
inlineprotected
43  {
44  return "Update 2.5.0.Final";
45  }

◆ isApplicable()

boolean org.keycloak.connections.jpa.updater.liquibase.custom.CustomKeycloakTask.isApplicable ( ) throws CustomChangeException
inlineprotectedinherited
106  {
107  try {
108  String correctedTableName = database.correctObjectName("REALM", Table.class);
109  if (SnapshotGeneratorFactory.getInstance().has(new Table().setName(correctedTableName), database)) {
110  ResultSet resultSet = connection.createStatement().executeQuery("SELECT ID FROM " + getTableName(correctedTableName));
111  try {
112  return (resultSet.next());
113  } finally {
114  resultSet.close();
115  }
116  } else {
117  return false;
118  }
119  } catch (Exception e) {
120  throw new CustomChangeException("Failed to check database availability", e);
121  }
122  }
String getTableName(String tableName)
Definition: CustomKeycloakTask.java:132
Database database
Definition: CustomKeycloakTask.java:51
Connection connection
Definition: CustomKeycloakTask.java:53

◆ setFileOpener()

void org.keycloak.connections.jpa.updater.liquibase.custom.CustomKeycloakTask.setFileOpener ( ResourceAccessor  resourceAccessor)
inlineinherited
63  {
64 
65  }

◆ setUp()

void org.keycloak.connections.jpa.updater.liquibase.custom.CustomKeycloakTask.setUp ( ) throws SetupException
inlineinherited
73  {
74  this.kcSession = ThreadLocalSessionContext.getCurrentSession();
75 
76  if (this.kcSession == null) {
77  // Probably running Liquibase from maven plugin. Try to create kcSession programmatically
78  logger.info("No KeycloakSession provided in ThreadLocal. Initializing KeycloakSessionFactory");
79 
80  try {
81  DefaultKeycloakSessionFactory factory = new DefaultKeycloakSessionFactory();
82  factory.init();
83  this.kcSession = factory.create();
84  } catch (Exception e) {
85  throw new SetupException("Exception when initializing factory", e);
86  }
87  }
88  }
KeycloakSession kcSession
Definition: CustomKeycloakTask.java:49
final Logger logger
Definition: CustomKeycloakTask.java:47

◆ validate()

ValidationErrors org.keycloak.connections.jpa.updater.liquibase.custom.CustomKeycloakTask.validate ( Database  database)
inlineinherited
58  {
59  return null;
60  }

メンバ詳解

◆ confirmationMessage

StringBuilder org.keycloak.connections.jpa.updater.liquibase.custom.CustomKeycloakTask.confirmationMessage = new StringBuilder()
protectedinherited

◆ connection

Connection org.keycloak.connections.jpa.updater.liquibase.custom.CustomKeycloakTask.connection
protectedinherited

◆ database

Database org.keycloak.connections.jpa.updater.liquibase.custom.CustomKeycloakTask.database
protectedinherited

◆ jdbcConnection

JdbcConnection org.keycloak.connections.jpa.updater.liquibase.custom.CustomKeycloakTask.jdbcConnection
protectedinherited

◆ kcSession

KeycloakSession org.keycloak.connections.jpa.updater.liquibase.custom.CustomKeycloakTask.kcSession
protectedinherited

◆ statements

List<SqlStatement> org.keycloak.connections.jpa.updater.liquibase.custom.CustomKeycloakTask.statements = new ArrayList<SqlStatement>()
protectedinherited

このクラス詳解は次のファイルから抽出されました: