keycloak-uncached

Details

diff --git a/model/api/src/main/java/org/keycloak/models/RealmModel.java b/model/api/src/main/java/org/keycloak/models/RealmModel.java
index c2300ef..5c1b468 100755
--- a/model/api/src/main/java/org/keycloak/models/RealmModel.java
+++ b/model/api/src/main/java/org/keycloak/models/RealmModel.java
@@ -2,6 +2,7 @@ package org.keycloak.models;
 
 import java.security.PrivateKey;
 import java.security.PublicKey;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -136,4 +137,12 @@ public interface RealmModel extends RoleContainerModel, RoleMapperModel, ScopeMa
     OAuthClientModel getOAuthClient(String name);
 
     List<OAuthClientModel> getOAuthClients();
+
+    HashMap<String, String> getSmtpConfig();
+
+    void setSmtpConfig(HashMap<String, String> smtpConfig);
+
+    HashMap<String, String> getSocialConfig();
+
+    void setSocialConfig(HashMap<String, String> socialConfig);
 }
diff --git a/model/jpa/src/main/java/org/keycloak/models/jpa/entities/RealmEntity.java b/model/jpa/src/main/java/org/keycloak/models/jpa/entities/RealmEntity.java
index 7712490..4a8ea65 100755
--- a/model/jpa/src/main/java/org/keycloak/models/jpa/entities/RealmEntity.java
+++ b/model/jpa/src/main/java/org/keycloak/models/jpa/entities/RealmEntity.java
@@ -3,6 +3,7 @@ package org.keycloak.models.jpa.entities;
 
 import javax.persistence.*;
 import java.util.Collection;
+import java.util.HashMap;
 
 /**
  * @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
@@ -24,6 +25,10 @@ public class RealmEntity {
     @Column(length = 2048)
     protected String privateKeyPem;
     protected String[] defaultRoles;
+    @Lob
+    protected HashMap<String, String> smtpConfig;
+    @Lob
+    protected HashMap<String, String> socialConfig;
 
     @OneToMany(cascade ={CascadeType.REMOVE}, orphanRemoval = true)
     Collection<RequiredCredentailEntity> requiredCredentials;
diff --git a/model/picketlink/src/main/java/org/keycloak/models/picketlink/mappings/RealmData.java b/model/picketlink/src/main/java/org/keycloak/models/picketlink/mappings/RealmData.java
index 8329e28..24e1f03 100755
--- a/model/picketlink/src/main/java/org/keycloak/models/picketlink/mappings/RealmData.java
+++ b/model/picketlink/src/main/java/org/keycloak/models/picketlink/mappings/RealmData.java
@@ -3,6 +3,9 @@ package org.keycloak.models.picketlink.mappings;
 import org.picketlink.idm.model.AbstractPartition;
 import org.picketlink.idm.model.annotation.AttributeProperty;
 
+import java.io.Serializable;
+import java.util.HashMap;
+
 /**
  * @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
  * @version $Revision: 1 $
@@ -23,6 +26,8 @@ public class RealmData extends AbstractPartition {
     private String publicKeyPem;
     private String privateKeyPem;
     private String[] defaultRoles;
+    private HashMap<String, String> smtpConfig;
+    private HashMap<String, String> socialConfig;
 
     public RealmData() {
         super(null);
@@ -163,4 +168,22 @@ public class RealmData extends AbstractPartition {
     public void setDefaultRoles(String[] defaultRoles) {
         this.defaultRoles = defaultRoles;
     }
+
+    @AttributeProperty
+    public HashMap<String, String> getSmtpConfig() {
+        return smtpConfig;
+    }
+
+    public void setSmtpConfig(HashMap<String, String> smtpConfig) {
+        this.smtpConfig = smtpConfig;
+    }
+
+    @AttributeProperty
+    public HashMap<String, String> getSocialConfig() {
+        return socialConfig;
+    }
+
+    public void setSocialConfig(HashMap<String, String> socialConfig) {
+        this.socialConfig = socialConfig;
+    }
 }
diff --git a/model/picketlink/src/main/java/org/keycloak/models/picketlink/mappings/RealmEntity.java b/model/picketlink/src/main/java/org/keycloak/models/picketlink/mappings/RealmEntity.java
index b44c218..74a3f09 100755
--- a/model/picketlink/src/main/java/org/keycloak/models/picketlink/mappings/RealmEntity.java
+++ b/model/picketlink/src/main/java/org/keycloak/models/picketlink/mappings/RealmEntity.java
@@ -5,11 +5,9 @@ import org.picketlink.idm.jpa.annotations.OwnerReference;
 import org.picketlink.idm.jpa.annotations.entity.IdentityManaged;
 import org.picketlink.idm.jpa.model.sample.simple.PartitionTypeEntity;
 
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.OneToOne;
+import javax.persistence.*;
 import java.io.Serializable;
+import java.util.HashMap;
 
 /**
  * @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
@@ -56,6 +54,12 @@ public class RealmEntity implements Serializable {
     private String privateKeyPem;
     @AttributeValue
     private String[] defaultRoles;
+    @AttributeValue
+    @Lob
+    private HashMap<String, String> smtpConfig;
+    @AttributeValue
+    @Lob
+    private HashMap<String, String> socialConfig;
 
 
     public PartitionTypeEntity getPartitionTypeEntity() {
@@ -177,4 +181,20 @@ public class RealmEntity implements Serializable {
     public void setPrivateKeyPem(String privateKeyPem) {
         this.privateKeyPem = privateKeyPem;
     }
+
+    public HashMap<String, String> getSmtpConfig() {
+        return smtpConfig;
+    }
+
+    public void setSmtpConfig(HashMap<String, String> smtpConfig) {
+        this.smtpConfig = smtpConfig;
+    }
+
+    public HashMap<String, String> getSocialConfig() {
+        return socialConfig;
+    }
+
+    public void setSocialConfig(HashMap<String, String> socialConfig) {
+        this.socialConfig = socialConfig;
+    }
 }
diff --git a/model/picketlink/src/main/java/org/keycloak/models/picketlink/RealmAdapter.java b/model/picketlink/src/main/java/org/keycloak/models/picketlink/RealmAdapter.java
index c6959f0..d3268d2 100755
--- a/model/picketlink/src/main/java/org/keycloak/models/picketlink/RealmAdapter.java
+++ b/model/picketlink/src/main/java/org/keycloak/models/picketlink/RealmAdapter.java
@@ -679,7 +679,7 @@ public class RealmAdapter implements RealmModel {
     @Override
     public void addScopeMapping(UserModel agent, RoleModel role) {
         ScopeRelationship scope = new ScopeRelationship();
-        scope.setClient(((UserAdapter)agent).getUser());
+        scope.setClient(((UserAdapter) agent).getUser());
         scope.setScope(((RoleAdapter)role).getRole());
         getRelationshipManager().add(scope);
     }
@@ -873,4 +873,26 @@ public class RealmAdapter implements RealmModel {
         }
         return userModels;
     }
+
+    @Override
+    public HashMap<String, String> getSmtpConfig() {
+        return realm.getSmtpConfig();
+    }
+
+    @Override
+    public void setSmtpConfig(HashMap<String, String> smtpConfig) {
+        realm.setSmtpConfig(smtpConfig);
+        updateRealm();
+    }
+
+    @Override
+    public HashMap<String, String> getSocialConfig() {
+        return realm.getSocialConfig();
+    }
+
+    @Override
+    public void setSocialConfig(HashMap<String, String> socialConfig) {
+        realm.setSocialConfig(socialConfig);
+        updateRealm();
+    }
 }
diff --git a/services/src/main/java/org/keycloak/services/managers/RealmManager.java b/services/src/main/java/org/keycloak/services/managers/RealmManager.java
index bae0cc2..fdb8ea7 100755
--- a/services/src/main/java/org/keycloak/services/managers/RealmManager.java
+++ b/services/src/main/java/org/keycloak/services/managers/RealmManager.java
@@ -96,6 +96,14 @@ public class RealmManager {
         } else {
             disableAccountManagement(realm);
         }
+
+        if (rep.getSmtpServer() != null) {
+            realm.setSmtpConfig(new HashMap(rep.getSmtpServer()));
+        }
+
+        if (rep.getSocialProviders() != null) {
+            realm.setSocialConfig(new HashMap(rep.getSocialProviders()));
+        }
     }
 
     private void enableAccountManagement(RealmModel realm) {
@@ -248,6 +256,14 @@ public class RealmManager {
         if (rep.isAccountManagement() != null && rep.isAccountManagement()) {
             enableAccountManagement(newRealm);
         }
+
+        if (rep.getSmtpServer() != null) {
+            newRealm.setSmtpConfig(new HashMap(rep.getSmtpServer()));
+        }
+
+        if (rep.getSocialProviders() != null) {
+            newRealm.setSocialConfig(new HashMap(rep.getSocialProviders()));
+        }
     }
 
     public void createRole(RealmModel newRealm, RoleRepresentation roleRep) {
@@ -403,6 +419,8 @@ public class RealmManager {
         rep.setTokenLifespan(realm.getTokenLifespan());
         rep.setAccessCodeLifespan(realm.getAccessCodeLifespan());
         rep.setAccessCodeLifespanUserAction(realm.getAccessCodeLifespanUserAction());
+        rep.setSmtpServer(realm.getSmtpConfig());
+        rep.setSocialProviders(realm.getSocialConfig());
 
         ApplicationModel accountManagementApplication = realm.getApplicationNameMap().get(Constants.ACCOUNT_MANAGEMENT_APPLICATION);
         rep.setAccountManagement(accountManagementApplication != null && accountManagementApplication.isEnabled());
diff --git a/services/src/test/java/org/keycloak/test/ModelTest.java b/services/src/test/java/org/keycloak/test/ModelTest.java
index a75fa76..9f9400c 100755
--- a/services/src/test/java/org/keycloak/test/ModelTest.java
+++ b/services/src/test/java/org/keycloak/test/ModelTest.java
@@ -1,7 +1,9 @@
 package org.keycloak.test;
 
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 
 import org.junit.After;
 import org.junit.Assert;
@@ -51,6 +53,16 @@ public class ModelTest extends AbstractKeycloakServerTest {
         realm.setPrivateKeyPem("1234234");
         realm.addDefaultRole("default-role");
 
+        HashMap<String, String> smtp = new HashMap<String,String>();
+        smtp.put("from", "auto@keycloak");
+        smtp.put("hostname", "localhost");
+        realm.setSmtpConfig(smtp);
+
+        HashMap<String, String> social = new HashMap<String,String>();
+        social.put("google.key", "1234");
+        social.put("google.secret", "5678");
+        realm.setSmtpConfig(social);
+
         RealmModel peristed = manager.getRealm(realm.getId());
         assertEquals(realm, peristed);
 
@@ -75,6 +87,9 @@ public class ModelTest extends AbstractKeycloakServerTest {
         Assert.assertEquals(expected.getPrivateKeyPem(), actual.getPrivateKeyPem());
 
         assertEquals(expected.getDefaultRoles(), actual.getDefaultRoles());
+
+        Assert.assertEquals(expected.getSmtpConfig(), actual.getSmtpConfig());
+        Assert.assertEquals(expected.getSocialConfig(), actual.getSocialConfig());
     }
 
     public static void assertEquals(List<RoleModel> expected, List<RoleModel> actual) {