keycloak-service
静的公開メンバ関数 | 静的非公開メンバ関数 | 静的非公開変数類 | 全メンバ一覧
org.keycloak.exportimport.util.ImportUtils クラス
org.keycloak.exportimport.util.ImportUtils 連携図
Collaboration graph

静的公開メンバ関数

static void importRealms (KeycloakSession session, Collection< RealmRepresentation > realms, Strategy strategy)
 
static boolean importRealm (KeycloakSession session, RealmRepresentation rep, Strategy strategy, boolean skipUserDependent)
 
static void importFromStream (KeycloakSession session, ObjectMapper mapper, InputStream is, Strategy strategy) throws IOException
 
static Map< String, RealmRepresentation > getRealmsFromStream (ObjectMapper mapper, InputStream is) throws IOException
 
static void importUsersFromStream (KeycloakSession session, String realmName, ObjectMapper mapper, InputStream is) throws IOException
 
static void importFederatedUsersFromStream (KeycloakSession session, String realmName, ObjectMapper mapper, InputStream is) throws IOException
 

静的非公開メンバ関数

static void importUsers (KeycloakSession session, RealmProvider model, String realmName, List< UserRepresentation > userReps)
 
static void importFederatedUsers (KeycloakSession session, RealmProvider model, String realmName, List< UserRepresentation > userReps)
 

静的非公開変数類

static final Logger logger = Logger.getLogger(ImportUtils.class)
 

詳解

著者
Marek Posolda

関数詳解

◆ getRealmsFromStream()

static Map<String, RealmRepresentation> org.keycloak.exportimport.util.ImportUtils.getRealmsFromStream ( ObjectMapper  mapper,
InputStream  is 
) throws IOException
inlinestatic
137  {
138  Map<String, RealmRepresentation> result = new HashMap<String, RealmRepresentation>();
139 
140  JsonFactory factory = mapper.getFactory();
141  JsonParser parser = factory.createParser(is);
142  try {
143  parser.nextToken();
144 
145  if (parser.getCurrentToken() == JsonToken.START_ARRAY) {
146  // Case with more realms in stream
147  parser.nextToken();
148 
149  List<RealmRepresentation> realmReps = new ArrayList<RealmRepresentation>();
150  while (parser.getCurrentToken() == JsonToken.START_OBJECT) {
151  RealmRepresentation realmRep = parser.readValueAs(RealmRepresentation.class);
152  parser.nextToken();
153 
154  // Ensure that master realm is imported first
155  if (Config.getAdminRealm().equals(realmRep.getRealm())) {
156  realmReps.add(0, realmRep);
157  } else {
158  realmReps.add(realmRep);
159  }
160  }
161 
162  for (RealmRepresentation realmRep : realmReps) {
163  result.put(realmRep.getRealm(), realmRep);
164  }
165  } else if (parser.getCurrentToken() == JsonToken.START_OBJECT) {
166  // Case with single realm in stream
167  RealmRepresentation realmRep = parser.readValueAs(RealmRepresentation.class);
168  result.put(realmRep.getRealm(), realmRep);
169  }
170  } finally {
171  parser.close();
172  }
173 
174  return result;
175  }

◆ importFederatedUsers()

static void org.keycloak.exportimport.util.ImportUtils.importFederatedUsers ( KeycloakSession  session,
RealmProvider  model,
String  realmName,
List< UserRepresentation >  userReps 
)
inlinestaticprivate
272  {
273  RealmModel realm = model.getRealmByName(realmName);
274  for (UserRepresentation user : userReps) {
275  RepresentationToModel.importFederatedUser(session, realm, user);
276  }
277  }

◆ importFederatedUsersFromStream()

static void org.keycloak.exportimport.util.ImportUtils.importFederatedUsersFromStream ( KeycloakSession  session,
String  realmName,
ObjectMapper  mapper,
InputStream  is 
) throws IOException
inlinestatic
221  {
222  RealmProvider model = session.realms();
223  JsonFactory factory = mapper.getJsonFactory();
224  JsonParser parser = factory.createJsonParser(is);
225  try {
226  parser.nextToken();
227 
228  while (parser.nextToken() == JsonToken.FIELD_NAME) {
229  if ("realm".equals(parser.getText())) {
230  parser.nextToken();
231  String currRealmName = parser.getText();
232  if (!currRealmName.equals(realmName)) {
233  throw new IllegalStateException("Trying to import users into invalid realm. Realm name: " + realmName + ", Expected realm name: " + currRealmName);
234  }
235  } else if ("federatedUsers".equals(parser.getText())) {
236  parser.nextToken();
237 
238  if (parser.getCurrentToken() == JsonToken.START_ARRAY) {
239  parser.nextToken();
240  }
241 
242  // TODO: support for more transactions per single users file (if needed)
243  List<UserRepresentation> userReps = new ArrayList<UserRepresentation>();
244  while (parser.getCurrentToken() == JsonToken.START_OBJECT) {
245  UserRepresentation user = parser.readValueAs(UserRepresentation.class);
246  userReps.add(user);
247  parser.nextToken();
248  }
249 
250  importFederatedUsers(session, model, realmName, userReps);
251 
252  if (parser.getCurrentToken() == JsonToken.END_ARRAY) {
253  parser.nextToken();
254  }
255  }
256  }
257  } finally {
258  parser.close();
259  }
260  }
static void importFederatedUsers(KeycloakSession session, RealmProvider model, String realmName, List< UserRepresentation > userReps)
Definition: ImportUtils.java:272

◆ importFromStream()

static void org.keycloak.exportimport.util.ImportUtils.importFromStream ( KeycloakSession  session,
ObjectMapper  mapper,
InputStream  is,
Strategy  strategy 
) throws IOException
inlinestatic

Fully import realm (or more realms from particular stream)

引数
session
mapper
is
strategy
例外
IOException
132  {
133  Map<String, RealmRepresentation> realmReps = getRealmsFromStream(mapper, is);
134  importRealms(session, realmReps.values(), strategy);
135  }
static void importRealms(KeycloakSession session, Collection< RealmRepresentation > realms, Strategy strategy)
Definition: ImportUtils.java:52
static Map< String, RealmRepresentation > getRealmsFromStream(ObjectMapper mapper, InputStream is)
Definition: ImportUtils.java:137

◆ importRealm()

static boolean org.keycloak.exportimport.util.ImportUtils.importRealm ( KeycloakSession  session,
RealmRepresentation  rep,
Strategy  strategy,
boolean  skipUserDependent 
)
inlinestatic

Fully import realm from representation, save it to model and return model of newly created realm

引数
session
rep
strategyspecifies whether to overwrite or ignore existing realm or user entries
skipUserDependentIf true, then import of any models, which needs users already imported in DB, will be skipped. For example authorization
戻り値
newly imported realm (or existing realm if ignoreExisting is true and realm of this name already exists)
90  {
91  String realmName = rep.getRealm();
92  RealmProvider model = session.realms();
93  RealmModel realm = model.getRealmByName(realmName);
94 
95  if (realm != null) {
96  if (strategy == Strategy.IGNORE_EXISTING) {
97  logger.infof("Realm '%s' already exists. Import skipped", realmName);
98  return false;
99  } else {
100  logger.infof("Realm '%s' already exists. Removing it before import", realmName);
101  if (Config.getAdminRealm().equals(realm.getId())) {
102  // Delete all masterAdmin apps due to foreign key constraints
103  for (RealmModel currRealm : model.getRealms()) {
104  currRealm.setMasterAdminClient(null);
105  }
106  }
107  // TODO: For migration between versions, it should be possible to delete just realm but keep it's users
108  model.removeRealm(realm.getId());
109  }
110  }
111 
112  RealmManager realmManager = new RealmManager(session);
113  realmManager.setContextPath(session.getContext().getContextPath());
114  realmManager.importRealm(rep, skipUserDependent);
115 
116  if (System.getProperty(ExportImportConfig.ACTION) != null) {
117  logger.infof("Realm '%s' imported", realmName);
118  }
119 
120  return true;
121  }
static final Logger logger
Definition: ImportUtils.java:50

◆ importRealms()

static void org.keycloak.exportimport.util.ImportUtils.importRealms ( KeycloakSession  session,
Collection< RealmRepresentation >  realms,
Strategy  strategy 
)
inlinestatic
52  {
53  boolean masterImported = false;
54 
55  // Import admin realm first
56  for (RealmRepresentation realm : realms) {
57  if (Config.getAdminRealm().equals(realm.getRealm())) {
58  if (importRealm(session, realm, strategy, false)) {
59  masterImported = true;
60  }
61  }
62  }
63 
64  for (RealmRepresentation realm : realms) {
65  if (!Config.getAdminRealm().equals(realm.getRealm())) {
66  importRealm(session, realm, strategy, false);
67  }
68  }
69 
70  // If master was imported, we may need to re-create realm management clients
71  if (masterImported) {
72  for (RealmModel realm : session.realms().getRealms()) {
73  if (realm.getMasterAdminClient() == null) {
74  logger.infof("Re-created management client in master realm for realm '%s'", realm.getName());
75  new RealmManager(session).setupMasterAdminManagement(realm);
76  }
77  }
78  }
79  }
static boolean importRealm(KeycloakSession session, RealmRepresentation rep, Strategy strategy, boolean skipUserDependent)
Definition: ImportUtils.java:90
static final Logger logger
Definition: ImportUtils.java:50

◆ importUsers()

static void org.keycloak.exportimport.util.ImportUtils.importUsers ( KeycloakSession  session,
RealmProvider  model,
String  realmName,
List< UserRepresentation >  userReps 
)
inlinestaticprivate
262  {
263  RealmModel realm = model.getRealmByName(realmName);
264  for (UserRepresentation user : userReps) {
265  if (!user.getUsername().startsWith(ServiceAccountConstants.SERVICE_ACCOUNT_USER_PREFIX)) {
266  RepresentationToModel.createUser(session, realm, user);
267  }
268  }
269  }

◆ importUsersFromStream()

static void org.keycloak.exportimport.util.ImportUtils.importUsersFromStream ( KeycloakSession  session,
String  realmName,
ObjectMapper  mapper,
InputStream  is 
) throws IOException
inlinestatic
179  {
180  RealmProvider model = session.realms();
181  JsonFactory factory = mapper.getJsonFactory();
182  JsonParser parser = factory.createJsonParser(is);
183  try {
184  parser.nextToken();
185 
186  while (parser.nextToken() == JsonToken.FIELD_NAME) {
187  if ("realm".equals(parser.getText())) {
188  parser.nextToken();
189  String currRealmName = parser.getText();
190  if (!currRealmName.equals(realmName)) {
191  throw new IllegalStateException("Trying to import users into invalid realm. Realm name: " + realmName + ", Expected realm name: " + currRealmName);
192  }
193  } else if ("users".equals(parser.getText())) {
194  parser.nextToken();
195 
196  if (parser.getCurrentToken() == JsonToken.START_ARRAY) {
197  parser.nextToken();
198  }
199 
200  // TODO: support for more transactions per single users file (if needed)
201  List<UserRepresentation> userReps = new ArrayList<UserRepresentation>();
202  while (parser.getCurrentToken() == JsonToken.START_OBJECT) {
203  UserRepresentation user = parser.readValueAs(UserRepresentation.class);
204  userReps.add(user);
205  parser.nextToken();
206  }
207 
208  importUsers(session, model, realmName, userReps);
209 
210  if (parser.getCurrentToken() == JsonToken.END_ARRAY) {
211  parser.nextToken();
212  }
213  }
214  }
215  } finally {
216  parser.close();
217  }
218  }
static void importUsers(KeycloakSession session, RealmProvider model, String realmName, List< UserRepresentation > userReps)
Definition: ImportUtils.java:262

メンバ詳解

◆ logger

final Logger org.keycloak.exportimport.util.ImportUtils.logger = Logger.getLogger(ImportUtils.class)
staticprivate

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