keycloak-uncached
Changes
export-import/export-import-api/src/main/java/org/keycloak/exportimport/util/MultipleStepsExportProvider.java 14(+12 -2)
export-import/export-import-dir/src/main/java/org/keycloak/exportimport/dir/DirExportProvider.java 8(+8 -0)
Details
diff --git a/core/src/main/java/org/keycloak/Version.java b/core/src/main/java/org/keycloak/Version.java
index 005a4c2..a1efa64 100755
--- a/core/src/main/java/org/keycloak/Version.java
+++ b/core/src/main/java/org/keycloak/Version.java
@@ -14,7 +14,7 @@ public class Version {
public static String VERSION;
public static String BUILD_TIME;
public static final String UNKNOWN = "UNKNOWN";
- public static final Version SINGLETON = new Version();
+ public static final Version SINGLETON;
private final String version = VERSION;
private final String buildTime = BUILD_TIME;
@@ -30,6 +30,8 @@ public class Version {
VERSION=UNKNOWN;
BUILD_TIME=UNKNOWN;
}
+
+ SINGLETON = new Version();
}
@JsonProperty("version")
diff --git a/export-import/export-import-api/src/main/java/org/keycloak/exportimport/util/MultipleStepsExportProvider.java b/export-import/export-import-api/src/main/java/org/keycloak/exportimport/util/MultipleStepsExportProvider.java
index 2f66d09..c72708b 100755
--- a/export-import/export-import-api/src/main/java/org/keycloak/exportimport/util/MultipleStepsExportProvider.java
+++ b/export-import/export-import-api/src/main/java/org/keycloak/exportimport/util/MultipleStepsExportProvider.java
@@ -1,6 +1,7 @@
package org.keycloak.exportimport.util;
import org.jboss.logging.Logger;
+import org.keycloak.Version;
import org.keycloak.exportimport.ExportImportConfig;
import org.keycloak.exportimport.ExportProvider;
import org.keycloak.exportimport.UsersExportStrategy;
@@ -37,12 +38,19 @@ public abstract class MultipleStepsExportProvider implements ExportProvider {
});
for (RealmModel realm : holder.realms) {
- exportRealm(factory, realm.getName());
+ exportRealmImpl(factory, realm.getName());
}
+
+ writeVersion("version.json", Version.SINGLETON);
}
@Override
- public void exportRealm(KeycloakSessionFactory factory, final String realmName) throws IOException {
+ public void exportRealm(KeycloakSessionFactory factory, String realmName) throws IOException {
+ exportRealmImpl(factory, realmName);
+ writeVersion("version.json", Version.SINGLETON);
+ }
+
+ protected void exportRealmImpl(KeycloakSessionFactory factory, final String realmName) throws IOException {
final UsersExportStrategy usersExportStrategy = ExportImportConfig.getUsersExportStrategy();
final int usersPerFile = ExportImportConfig.getUsersPerFile();
final UsersHolder usersHolder = new UsersHolder();
@@ -102,6 +110,8 @@ public abstract class MultipleStepsExportProvider implements ExportProvider {
protected abstract void writeUsers(String fileName, KeycloakSession session, RealmModel realm, List<UserModel> users) throws IOException;
+ protected abstract void writeVersion(String fileName, Version version) throws IOException;
+
public static class RealmsHolder {
List<RealmModel> realms;
diff --git a/export-import/export-import-dir/src/main/java/org/keycloak/exportimport/dir/DirExportProvider.java b/export-import/export-import-dir/src/main/java/org/keycloak/exportimport/dir/DirExportProvider.java
index ea6b7e1..1756299 100755
--- a/export-import/export-import-dir/src/main/java/org/keycloak/exportimport/dir/DirExportProvider.java
+++ b/export-import/export-import-dir/src/main/java/org/keycloak/exportimport/dir/DirExportProvider.java
@@ -1,5 +1,6 @@
package org.keycloak.exportimport.dir;
+import org.keycloak.Version;
import org.keycloak.exportimport.util.ExportUtils;
import org.keycloak.exportimport.util.MultipleStepsExportProvider;
import org.keycloak.models.KeycloakSession;
@@ -69,6 +70,13 @@ public class DirExportProvider extends MultipleStepsExportProvider {
}
@Override
+ protected void writeVersion(String fileName, Version version) throws IOException {
+ File file = new File(this.rootDirectory, fileName);
+ FileOutputStream stream = new FileOutputStream(file);
+ JsonSerialization.prettyMapper.writeValue(stream, version);
+ }
+
+ @Override
public void close() {
}
}
diff --git a/export-import/export-import-zip/src/main/java/org/keycloak/exportimport/zip/ZipExportProvider.java b/export-import/export-import-zip/src/main/java/org/keycloak/exportimport/zip/ZipExportProvider.java
index e9196e6..3517788 100755
--- a/export-import/export-import-zip/src/main/java/org/keycloak/exportimport/zip/ZipExportProvider.java
+++ b/export-import/export-import-zip/src/main/java/org/keycloak/exportimport/zip/ZipExportProvider.java
@@ -4,6 +4,7 @@ import de.idyl.winzipaes.AesZipFileEncrypter;
import de.idyl.winzipaes.impl.AESEncrypter;
import de.idyl.winzipaes.impl.AESEncrypterBC;
import org.jboss.logging.Logger;
+import org.keycloak.Version;
import org.keycloak.exportimport.util.ExportUtils;
import org.keycloak.exportimport.util.MultipleStepsExportProvider;
import org.keycloak.models.KeycloakSession;
@@ -47,17 +48,24 @@ public class ZipExportProvider extends MultipleStepsExportProvider {
protected void writeRealm(String fileName, RealmRepresentation rep) throws IOException {
ByteArrayOutputStream stream = new ByteArrayOutputStream();
JsonSerialization.mapper.writeValue(stream, rep);
-
- byte[] byteArray = stream.toByteArray();
- ByteArrayInputStream bis = new ByteArrayInputStream(byteArray);
- this.encrypter.add(fileName, bis, this.password);
+ writeStream(fileName, stream);
}
@Override
protected void writeUsers(String fileName, KeycloakSession session, RealmModel realm, List<UserModel> users) throws IOException {
ByteArrayOutputStream stream = new ByteArrayOutputStream();
ExportUtils.exportUsersToStream(session, realm, users, JsonSerialization.mapper, stream);
+ writeStream(fileName, stream);
+ }
+
+ @Override
+ protected void writeVersion(String fileName, Version version) throws IOException {
+ ByteArrayOutputStream stream = new ByteArrayOutputStream();
+ JsonSerialization.mapper.writeValue(stream, version);
+ writeStream(fileName, stream);
+ }
+ private void writeStream(String fileName, ByteArrayOutputStream stream) throws IOException {
byte[] byteArray = stream.toByteArray();
ByteArrayInputStream bis = new ByteArrayInputStream(byteArray);
this.encrypter.add(fileName, bis, this.password);
diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/exportimport/ExportImportTest.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/exportimport/ExportImportTest.java
index 6c6d05d..c4bf603 100755
--- a/testsuite/integration/src/test/java/org/keycloak/testsuite/exportimport/ExportImportTest.java
+++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/exportimport/ExportImportTest.java
@@ -147,8 +147,8 @@ public class ExportImportTest {
testFullExportImport();
- // There should be 6 files in target directory (3 realm, 3 user)
- Assert.assertEquals(6, new File(targetDirPath).listFiles().length);
+ // There should be 6 files in target directory (3 realm, 3 user, 1 version)
+ Assert.assertEquals(7, new File(targetDirPath).listFiles().length);
}
@Test
@@ -161,8 +161,8 @@ public class ExportImportTest {
testRealmExportImport();
- // There should be 3 files in target directory (1 realm, 2 user)
- Assert.assertEquals(3, new File(targetDirPath).listFiles().length);
+ // There should be 3 files in target directory (1 realm, 2 user, 1 version)
+ Assert.assertEquals(4, new File(targetDirPath).listFiles().length);
}
@Test