keycloak-uncached

Added keycloak.import to server

11/16/2013 10:20:51 AM

Details

server/pom.xml 19(+19 -0)

diff --git a/server/pom.xml b/server/pom.xml
index ae947f6..3f3c89e 100755
--- a/server/pom.xml
+++ b/server/pom.xml
@@ -103,6 +103,25 @@
             <artifactId>jboss-servlet-api_3.0_spec</artifactId>
             <scope>provided</scope>
         </dependency>
+        <dependency>
+            <groupId>org.jboss.resteasy</groupId>
+            <artifactId>resteasy-jaxrs</artifactId>
+            <scope>provided</scope>
+            <exclusions>
+                <exclusion>
+                    <groupId>log4j</groupId>
+                    <artifactId>log4j</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>org.slf4j</groupId>
+                    <artifactId>slf4j-api</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>org.slf4j</groupId>
+                    <artifactId>slf4j-simple</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/server/src/main/java/org/keycloak/server/KeycloakServerApplication.java b/server/src/main/java/org/keycloak/server/KeycloakServerApplication.java
index cb91e73..a4af8be 100755
--- a/server/src/main/java/org/keycloak/server/KeycloakServerApplication.java
+++ b/server/src/main/java/org/keycloak/server/KeycloakServerApplication.java
@@ -1,6 +1,7 @@
 package org.keycloak.server;
 
 import org.jboss.resteasy.jwt.JsonSerialization;
+import org.jboss.resteasy.logging.Logger;
 import org.keycloak.representations.idm.RealmRepresentation;
 import org.keycloak.services.managers.ApplianceBootstrap;
 import org.keycloak.services.managers.RealmManager;
@@ -11,18 +12,67 @@ import org.keycloak.services.resources.KeycloakApplication;
 import javax.servlet.ServletContext;
 import javax.ws.rs.core.Context;
 import java.io.ByteArrayOutputStream;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
 
 public class KeycloakServerApplication extends KeycloakApplication {
 
-    public KeycloakServerApplication(@Context ServletContext servletContext) {
+    private static final Logger log = Logger.getLogger(KeycloakServerApplication.class);
+
+    public KeycloakServerApplication(@Context ServletContext servletContext) throws FileNotFoundException {
         super(servletContext);
         KeycloakSession session = factory.createSession();
         session.getTransaction().begin();
         ApplianceBootstrap bootstrap = new ApplianceBootstrap();
         bootstrap.bootstrap(session);
+
+        String importRealm = System.getProperty("keycloak.import");
+        if (importRealm != null) {
+            RealmRepresentation rep = loadJson(new FileInputStream(importRealm), RealmRepresentation.class);
+            importRealm(session, rep);
+        }
+
         session.getTransaction().commit();
     }
 
+    public void importRealm(KeycloakSession session, RealmRepresentation rep ) {
+        try {
+            RealmManager manager = new RealmManager(session);
+
+            if (rep.getId() == null) {
+                throw new RuntimeException("Realm id not specified");
+            }
+
+            if (manager.getRealm(rep.getId()) != null) {
+                log.info("Not importing realm " + rep.getRealm() + " realm already exists");
+                return;
+            }
+
+            RealmModel realm = manager.createRealm(rep.getId(), rep.getRealm());
+            manager.importRealm(rep, realm);
+
+            log.info("Imported realm " + realm.getName());
+
+            session.getTransaction().commit();
+        } finally {
+            session.close();
+        }
+    }
+
+    private static <T> T loadJson(InputStream is, Class<T> type) {
+        try {
+            ByteArrayOutputStream os = new ByteArrayOutputStream();
+            int c;
+            while ((c = is.read()) != -1) {
+                os.write(c);
+            }
+            byte[] bytes = os.toByteArray();
+            return JsonSerialization.fromBytes(type, bytes);
+        } catch (IOException e) {
+            throw new RuntimeException("Failed to parse json", e);
+        }
+    }
+
 }