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

公開メンバ関数

 DirExportProvider ()
 
 DirExportProvider (File rootDirectory)
 
void writeRealm (String fileName, RealmRepresentation rep) throws IOException
 
void close ()
 
void exportModel (KeycloakSessionFactory factory) throws IOException
 
void exportRealm (KeycloakSessionFactory factory, String realmName) throws IOException
 

静的公開メンバ関数

static boolean recursiveDeleteDir (File dirPath)
 

限定公開メンバ関数

void writeUsers (String fileName, KeycloakSession session, RealmModel realm, List< UserModel > users) throws IOException
 
void writeFederatedUsers (String fileName, KeycloakSession session, RealmModel realm, List< String > users) throws IOException
 
void exportRealmImpl (KeycloakSessionFactory factory, final String realmName) throws IOException
 

限定公開変数類

final Logger logger = Logger.getLogger(getClass())
 

非公開変数類

final File rootDirectory
 

詳解

著者
Marek Posolda

構築子と解体子

◆ DirExportProvider() [1/2]

org.keycloak.exportimport.dir.DirExportProvider.DirExportProvider ( )
inline
40  {
41  // Determine system tmp directory
42  String tempDir = System.getProperty("java.io.tmpdir");
43 
44  this.rootDirectory = new File(tempDir + "/keycloak-export");
45  this.rootDirectory.mkdirs();
46 
47  logger.infof("Exporting into directory %s", this.rootDirectory.getAbsolutePath());
48  }
final Logger logger
Definition: MultipleStepsExportProvider.java:40
final File rootDirectory
Definition: DirExportProvider.java:38

◆ DirExportProvider() [2/2]

org.keycloak.exportimport.dir.DirExportProvider.DirExportProvider ( File  rootDirectory)
inline
50  {
52  this.rootDirectory.mkdirs();
53 
54  logger.infof("Exporting into directory %s", this.rootDirectory.getAbsolutePath());
55  }
final Logger logger
Definition: MultipleStepsExportProvider.java:40
final File rootDirectory
Definition: DirExportProvider.java:38

関数詳解

◆ close()

void org.keycloak.exportimport.dir.DirExportProvider.close ( )
inline
96  {
97  }

◆ exportModel()

void org.keycloak.exportimport.util.MultipleStepsExportProvider.exportModel ( KeycloakSessionFactory  factory) throws IOException
inlineinherited
43  {
44  final RealmsHolder holder = new RealmsHolder();
45 
46  KeycloakModelUtils.runJobInTransaction(factory, new KeycloakSessionTask() {
47 
48  @Override
49  public void run(KeycloakSession session) {
50  List<RealmModel> realms = session.realms().getRealms();
51  holder.realms = realms;
52  }
53 
54  });
55 
56  for (RealmModel realm : holder.realms) {
57  exportRealmImpl(factory, realm.getName());
58  }
59  }
void exportRealmImpl(KeycloakSessionFactory factory, final String realmName)
Definition: MultipleStepsExportProvider.java:66

◆ exportRealm()

void org.keycloak.exportimport.util.MultipleStepsExportProvider.exportRealm ( KeycloakSessionFactory  factory,
String  realmName 
) throws IOException
inlineinherited
62  {
63  exportRealmImpl(factory, realmName);
64  }
void exportRealmImpl(KeycloakSessionFactory factory, final String realmName)
Definition: MultipleStepsExportProvider.java:66

◆ exportRealmImpl()

void org.keycloak.exportimport.util.MultipleStepsExportProvider.exportRealmImpl ( KeycloakSessionFactory  factory,
final String  realmName 
) throws IOException
inlineprotectedinherited
66  {
67  final UsersExportStrategy usersExportStrategy = ExportImportConfig.getUsersExportStrategy();
68  final int usersPerFile = ExportImportConfig.getUsersPerFile();
69  final UsersHolder usersHolder = new UsersHolder();
70  final boolean exportUsersIntoRealmFile = usersExportStrategy == UsersExportStrategy.REALM_FILE;
71  FederatedUsersHolder federatedUsersHolder = new FederatedUsersHolder();
72 
73  KeycloakModelUtils.runJobInTransaction(factory, new ExportImportSessionTask() {
74 
75  @Override
76  protected void runExportImportTask(KeycloakSession session) throws IOException {
77  RealmModel realm = session.realms().getRealmByName(realmName);
78  RealmRepresentation rep = ExportUtils.exportRealm(session, realm, exportUsersIntoRealmFile, true);
79  writeRealm(realmName + "-realm.json", rep);
80  logger.info("Realm '" + realmName + "' - data exported");
81 
82  // Count total number of users
83  if (!exportUsersIntoRealmFile) {
84  usersHolder.totalCount = session.users().getUsersCount(realm, true);
85  federatedUsersHolder.totalCount = session.userFederatedStorage().getStoredUsersCount(realm);
86  }
87  }
88 
89  });
90 
91  if (usersExportStrategy != UsersExportStrategy.SKIP && !exportUsersIntoRealmFile) {
92  // We need to export users now
93  usersHolder.currentPageStart = 0;
94 
95  // usersExportStrategy==SAME_FILE means exporting all users into single file (but separate to realm)
96  final int countPerPage = (usersExportStrategy == UsersExportStrategy.SAME_FILE) ? usersHolder.totalCount : usersPerFile;
97 
98  while (usersHolder.currentPageStart < usersHolder.totalCount) {
99  if (usersHolder.currentPageStart + countPerPage < usersHolder.totalCount) {
100  usersHolder.currentPageEnd = usersHolder.currentPageStart + countPerPage;
101  } else {
102  usersHolder.currentPageEnd = usersHolder.totalCount;
103  }
104 
105  KeycloakModelUtils.runJobInTransaction(factory, new ExportImportSessionTask() {
106 
107  @Override
108  protected void runExportImportTask(KeycloakSession session) throws IOException {
109  RealmModel realm = session.realms().getRealmByName(realmName);
110  usersHolder.users = session.users().getUsers(realm, usersHolder.currentPageStart, usersHolder.currentPageEnd - usersHolder.currentPageStart, true);
111 
112  writeUsers(realmName + "-users-" + (usersHolder.currentPageStart / countPerPage) + ".json", session, realm, usersHolder.users);
113 
114  logger.info("Users " + usersHolder.currentPageStart + "-" + (usersHolder.currentPageEnd -1) + " exported");
115  }
116 
117  });
118 
119  usersHolder.currentPageStart = usersHolder.currentPageEnd;
120  }
121  }
122  if (usersExportStrategy != UsersExportStrategy.SKIP && !exportUsersIntoRealmFile) {
123  // We need to export users now
124  federatedUsersHolder.currentPageStart = 0;
125 
126  // usersExportStrategy==SAME_FILE means exporting all users into single file (but separate to realm)
127  final int countPerPage = (usersExportStrategy == UsersExportStrategy.SAME_FILE) ? federatedUsersHolder.totalCount : usersPerFile;
128 
129  while (federatedUsersHolder.currentPageStart < federatedUsersHolder.totalCount) {
130  if (federatedUsersHolder.currentPageStart + countPerPage < federatedUsersHolder.totalCount) {
131  federatedUsersHolder.currentPageEnd = federatedUsersHolder.currentPageStart + countPerPage;
132  } else {
133  federatedUsersHolder.currentPageEnd = federatedUsersHolder.totalCount;
134  }
135 
136  KeycloakModelUtils.runJobInTransaction(factory, new ExportImportSessionTask() {
137 
138  @Override
139  protected void runExportImportTask(KeycloakSession session) throws IOException {
140  RealmModel realm = session.realms().getRealmByName(realmName);
141  federatedUsersHolder.users = session.userFederatedStorage().getStoredUsers(realm, federatedUsersHolder.currentPageStart, federatedUsersHolder.currentPageEnd - federatedUsersHolder.currentPageStart);
142 
143  writeFederatedUsers(realmName + "-federated-users-" + (federatedUsersHolder.currentPageStart / countPerPage) + ".json", session, realm, federatedUsersHolder.users);
144 
145  logger.info("Users " + federatedUsersHolder.currentPageStart + "-" + (federatedUsersHolder.currentPageEnd -1) + " exported");
146  }
147 
148  });
149 
150  federatedUsersHolder.currentPageStart = federatedUsersHolder.currentPageEnd;
151  }
152  }
153  }
abstract void writeRealm(String fileName, RealmRepresentation rep)
final Logger logger
Definition: MultipleStepsExportProvider.java:40
abstract void writeFederatedUsers(String fileName, KeycloakSession session, RealmModel realm, List< String > users)
abstract void writeUsers(String fileName, KeycloakSession session, RealmModel realm, List< UserModel > users)

◆ recursiveDeleteDir()

static boolean org.keycloak.exportimport.dir.DirExportProvider.recursiveDeleteDir ( File  dirPath)
inlinestatic
57  {
58  if (dirPath.exists()) {
59  File[] files = dirPath.listFiles();
60  for (int i = 0; i < files.length; i++) {
61  if (files[i].isDirectory()) {
62  recursiveDeleteDir(files[i]);
63  } else {
64  files[i].delete();
65  }
66  }
67  }
68  if (dirPath.exists())
69  return dirPath.delete();
70  else
71  return true;
72  }
static boolean recursiveDeleteDir(File dirPath)
Definition: DirExportProvider.java:57

◆ writeFederatedUsers()

void org.keycloak.exportimport.dir.DirExportProvider.writeFederatedUsers ( String  fileName,
KeycloakSession  session,
RealmModel  realm,
List< String >  users 
) throws IOException
inlineprotected
89  {
90  File file = new File(this.rootDirectory, fileName);
91  FileOutputStream os = new FileOutputStream(file);
92  ExportUtils.exportFederatedUsersToStream(session, realm, users, JsonSerialization.prettyMapper, os);
93  }
final File rootDirectory
Definition: DirExportProvider.java:38

◆ writeRealm()

void org.keycloak.exportimport.dir.DirExportProvider.writeRealm ( String  fileName,
RealmRepresentation  rep 
) throws IOException
inline
75  {
76  File file = new File(this.rootDirectory, fileName);
77  FileOutputStream stream = new FileOutputStream(file);
78  JsonSerialization.prettyMapper.writeValue(stream, rep);
79  }
final File rootDirectory
Definition: DirExportProvider.java:38

◆ writeUsers()

void org.keycloak.exportimport.dir.DirExportProvider.writeUsers ( String  fileName,
KeycloakSession  session,
RealmModel  realm,
List< UserModel >  users 
) throws IOException
inlineprotected
82  {
83  File file = new File(this.rootDirectory, fileName);
84  FileOutputStream os = new FileOutputStream(file);
85  ExportUtils.exportUsersToStream(session, realm, users, JsonSerialization.prettyMapper, os);
86  }
final File rootDirectory
Definition: DirExportProvider.java:38

メンバ詳解

◆ logger

final Logger org.keycloak.exportimport.util.MultipleStepsExportProvider.logger = Logger.getLogger(getClass())
protectedinherited

◆ rootDirectory

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

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