keycloak-service
公開メンバ関数 | 非公開メンバ関数 | 非公開変数類 | 静的非公開変数類 | 全メンバ一覧
org.keycloak.exportimport.dir.DirImportProvider クラス
org.keycloak.exportimport.dir.DirImportProvider の継承関係図
Inheritance graph
org.keycloak.exportimport.dir.DirImportProvider 連携図
Collaboration graph

公開メンバ関数

 DirImportProvider ()
 
 DirImportProvider (File rootDirectory)
 
void importModel (KeycloakSessionFactory factory, Strategy strategy) throws IOException
 
boolean isMasterRealmExported () throws IOException
 
void importRealm (KeycloakSessionFactory factory, final String realmName, final Strategy strategy) throws IOException
 
void close ()
 

非公開メンバ関数

List< String > getRealmsToImport () throws IOException
 

非公開変数類

final File rootDirectory
 

静的非公開変数類

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

詳解

著者
Marek Posolda

構築子と解体子

◆ DirImportProvider() [1/2]

org.keycloak.exportimport.dir.DirImportProvider.DirImportProvider ( )
inline
51  {
52  // Determine system tmp directory
53  String tempDir = System.getProperty("java.io.tmpdir");
54 
55  // Delete and recreate directory inside tmp
56  this.rootDirectory = new File(tempDir + "/keycloak-export");
57  if (!this.rootDirectory .exists()) {
58  throw new IllegalStateException("Directory " + this.rootDirectory + " doesn't exists");
59  }
60 
61  logger.infof("Importing from directory %s", this.rootDirectory.getAbsolutePath());
62  }
final File rootDirectory
Definition: DirImportProvider.java:49
static final Logger logger
Definition: DirImportProvider.java:47

◆ DirImportProvider() [2/2]

org.keycloak.exportimport.dir.DirImportProvider.DirImportProvider ( File  rootDirectory)
inline
64  {
66 
67  if (!this.rootDirectory.exists()) {
68  throw new IllegalStateException("Directory " + this.rootDirectory + " doesn't exists");
69  }
70 
71  logger.infof("Importing from directory %s", this.rootDirectory.getAbsolutePath());
72  }
final File rootDirectory
Definition: DirImportProvider.java:49
static final Logger logger
Definition: DirImportProvider.java:47

関数詳解

◆ close()

void org.keycloak.exportimport.dir.DirImportProvider.close ( )
inline
184  {
185 
186  }

◆ getRealmsToImport()

List<String> org.keycloak.exportimport.dir.DirImportProvider.getRealmsToImport ( ) throws IOException
inlineprivate
89  {
90  File[] realmFiles = this.rootDirectory.listFiles(new FilenameFilter() {
91 
92  @Override
93  public boolean accept(File dir, String name) {
94  return (name.endsWith("-realm.json"));
95  }
96  });
97 
98  List<String> realmNames = new ArrayList<String>();
99  for (File file : realmFiles) {
100  String fileName = file.getName();
101  // Parse "foo" from "foo-realm.json"
102  String realmName = fileName.substring(0, fileName.length() - 11);
103 
104  // Ensure that master realm is imported first
105  if (Config.getAdminRealm().equals(realmName)) {
106  realmNames.add(0, realmName);
107  } else {
108  realmNames.add(realmName);
109  }
110  }
111  return realmNames;
112  }
final File rootDirectory
Definition: DirImportProvider.java:49

◆ importModel()

void org.keycloak.exportimport.dir.DirImportProvider.importModel ( KeycloakSessionFactory  factory,
Strategy  strategy 
) throws IOException
inline
75  {
76  List<String> realmNames = getRealmsToImport();
77 
78  for (String realmName : realmNames) {
79  importRealm(factory, realmName, strategy);
80  }
81  }
void importRealm(KeycloakSessionFactory factory, final String realmName, final Strategy strategy)
Definition: DirImportProvider.java:115
List< String > getRealmsToImport()
Definition: DirImportProvider.java:89

◆ importRealm()

void org.keycloak.exportimport.dir.DirImportProvider.importRealm ( KeycloakSessionFactory  factory,
final String  realmName,
final Strategy  strategy 
) throws IOException
inline
115  {
116  File realmFile = new File(this.rootDirectory + File.separator + realmName + "-realm.json");
117  File[] userFiles = this.rootDirectory.listFiles(new FilenameFilter() {
118 
119  @Override
120  public boolean accept(File dir, String name) {
121  return name.matches(realmName + "-users-[0-9]+\\.json");
122  }
123  });
124  File[] federatedUserFiles = this.rootDirectory.listFiles(new FilenameFilter() {
125 
126  @Override
127  public boolean accept(File dir, String name) {
128  return name.matches(realmName + "-federated-users-[0-9]+\\.json");
129  }
130  });
131 
132  // Import realm first
133  FileInputStream is = new FileInputStream(realmFile);
134  final RealmRepresentation realmRep = JsonSerialization.readValue(is, RealmRepresentation.class);
135  final AtomicBoolean realmImported = new AtomicBoolean();
136 
137  KeycloakModelUtils.runJobInTransaction(factory, new ExportImportSessionTask() {
138 
139  @Override
140  public void runExportImportTask(KeycloakSession session) throws IOException {
141  boolean imported = ImportUtils.importRealm(session, realmRep, strategy, true);
142  realmImported.set(imported);
143  }
144 
145  });
146 
147  if (realmImported.get()) {
148  // Import users
149  for (final File userFile : userFiles) {
150  final FileInputStream fis = new FileInputStream(userFile);
151  KeycloakModelUtils.runJobInTransaction(factory, new ExportImportSessionTask() {
152  @Override
153  protected void runExportImportTask(KeycloakSession session) throws IOException {
154  ImportUtils.importUsersFromStream(session, realmName, JsonSerialization.mapper, fis);
155  logger.infof("Imported users from %s", userFile.getAbsolutePath());
156  }
157  });
158  }
159  for (final File userFile : federatedUserFiles) {
160  final FileInputStream fis = new FileInputStream(userFile);
161  KeycloakModelUtils.runJobInTransaction(factory, new ExportImportSessionTask() {
162  @Override
163  protected void runExportImportTask(KeycloakSession session) throws IOException {
164  ImportUtils.importFederatedUsersFromStream(session, realmName, JsonSerialization.mapper, fis);
165  logger.infof("Imported federated users from %s", userFile.getAbsolutePath());
166  }
167  });
168  }
169  }
170 
171  // Import authorization last, as authzPolicies can require users already in DB
172  KeycloakModelUtils.runJobInTransaction(factory, new ExportImportSessionTask() {
173 
174  @Override
175  public void runExportImportTask(KeycloakSession session) throws IOException {
176  RealmModel realm = session.realms().getRealmByName(realmName);
177  RepresentationToModel.importRealmAuthorizationSettings(realmRep, realm, session);
178  }
179 
180  });
181  }
final File rootDirectory
Definition: DirImportProvider.java:49
static final Logger logger
Definition: DirImportProvider.java:47

◆ isMasterRealmExported()

boolean org.keycloak.exportimport.dir.DirImportProvider.isMasterRealmExported ( ) throws IOException
inline
84  {
85  List<String> realmNames = getRealmsToImport();
86  return realmNames.contains(Config.getAdminRealm());
87  }
List< String > getRealmsToImport()
Definition: DirImportProvider.java:89

メンバ詳解

◆ logger

final Logger org.keycloak.exportimport.dir.DirImportProvider.logger = Logger.getLogger(DirImportProvider.class)
staticprivate

◆ rootDirectory

final File org.keycloak.exportimport.dir.DirImportProvider.rootDirectory
private

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