keycloak-developers

Details

diff --git a/forms/src/main/java/org/keycloak/forms/SocialBean.java b/forms/src/main/java/org/keycloak/forms/SocialBean.java
index 2492ca9..19baaa7 100644
--- a/forms/src/main/java/org/keycloak/forms/SocialBean.java
+++ b/forms/src/main/java/org/keycloak/forms/SocialBean.java
@@ -22,9 +22,7 @@
 package org.keycloak.forms;
 
 import java.net.URI;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
+import java.util.*;
 
 import javax.imageio.spi.ServiceRegistry;
 import javax.ws.rs.core.UriBuilder;
@@ -45,7 +43,7 @@ public class SocialBean {
 
     private List<SocialProvider> providers;
 
-    public SocialBean(RealmBean realm, RegisterBean registerBean, UrlBean url) {
+    public SocialBean(RealmBean realm, List<org.keycloak.social.SocialProvider> providers, RegisterBean registerBean, UrlBean url) {
         this.realm = realm;
         this.registerBean = registerBean;
         this.url = url;
@@ -54,13 +52,10 @@ public class SocialBean {
 
         UriBuilder socialLoginUrlBuilder = UriBuilder.fromUri(Urls.socialRedirectToProviderAuth(baseURI, realm.getId()));
 
-        providers = new LinkedList<SocialProvider>();
-        for (Iterator<org.keycloak.social.SocialProvider> itr = ServiceRegistry
-                .lookupProviders(org.keycloak.social.SocialProvider.class); itr.hasNext();) {
-            org.keycloak.social.SocialProvider p = itr.next();
-
+        this.providers = new LinkedList<SocialProvider>();
+        for (org.keycloak.social.SocialProvider p : providers) {
             String loginUrl = socialLoginUrlBuilder.replaceQueryParam("provider_id", p.getId()).build().toString();
-            providers.add(new SocialProvider(p.getId(), p.getName(), loginUrl));
+            this.providers.add(new SocialProvider(p.getId(), p.getName(), loginUrl));
         }
     }
 
@@ -70,7 +65,7 @@ public class SocialBean {
 
     // Display panel with social providers just in case that social is enabled for realm, but we are not in the middle of registration with social
     public boolean isDisplaySocialProviders() {
-        return realm.isSocial() && !registerBean.isSocialRegistration();
+        return realm.isSocial() && !providers.isEmpty() && !registerBean.isSocialRegistration();
     }
 
     public RealmBean getRealm() {
diff --git a/forms/src/main/java/org/keycloak/service/FormServiceImpl.java b/forms/src/main/java/org/keycloak/service/FormServiceImpl.java
index 64624e4..6ec433e 100644
--- a/forms/src/main/java/org/keycloak/service/FormServiceImpl.java
+++ b/forms/src/main/java/org/keycloak/service/FormServiceImpl.java
@@ -174,7 +174,7 @@ public class FormServiceImpl implements FormService {
 
             RegisterBean register = new RegisterBean(dataBean.getFormData(), dataBean.getSocialRegistration());
 
-            SocialBean social = new SocialBean(realm, register, url);
+            SocialBean social = new SocialBean(realm, dataBean.getSocialProviders(), register, url);
             attributes.put("social", social);
         }
     }
@@ -215,7 +215,7 @@ public class FormServiceImpl implements FormService {
 
             RegisterBean register = new RegisterBean(dataBean.getFormData(), dataBean.getSocialRegistration());
 
-            SocialBean social = new SocialBean(realm, register, url);
+            SocialBean social = new SocialBean(realm, dataBean.getSocialProviders(), register, url);
             attributes.put("social", social);
         }
     }
@@ -236,7 +236,7 @@ public class FormServiceImpl implements FormService {
             RegisterBean register = new RegisterBean(dataBean.getFormData(), dataBean.getSocialRegistration());
             attributes.put("register", register);
 
-            SocialBean social = new SocialBean(realm, register, url);
+            SocialBean social = new SocialBean(realm, dataBean.getSocialProviders(), register, url);
             attributes.put("social", social);
         }
     }
diff --git a/services/src/main/java/org/keycloak/services/FormService.java b/services/src/main/java/org/keycloak/services/FormService.java
index 70e4c0f..02e4af9 100755
--- a/services/src/main/java/org/keycloak/services/FormService.java
+++ b/services/src/main/java/org/keycloak/services/FormService.java
@@ -22,14 +22,19 @@
 package org.keycloak.services;
 
 import java.net.URI;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedList;
 import java.util.List;
 
+import javax.imageio.spi.ServiceRegistry;
 import javax.ws.rs.core.MultivaluedMap;
 
 import org.keycloak.models.RealmModel;
 import org.keycloak.models.RoleModel;
 import org.keycloak.models.UserModel;
 import org.keycloak.services.resources.flows.FormFlows;
+import org.keycloak.social.SocialProvider;
 
 /**
  * @author <a href="mailto:vrockai@redhat.com">Viliam Rockai</a>
@@ -51,6 +56,8 @@ public interface FormService {
         private MultivaluedMap<String, String> formData;
         private URI baseURI;
 
+        private List<SocialProvider> socialProviders;
+
         public Boolean getSocialRegistration() {
             return socialRegistration;
         }
@@ -86,6 +93,15 @@ public interface FormService {
             this.userModel = userModel;
             this.formData = formData;
             this.message = message;
+
+            socialProviders = new LinkedList<SocialProvider>();
+            HashMap<String,String> socialConfig = realm.getSocialConfig();
+            for (Iterator<SocialProvider> itr = ServiceRegistry.lookupProviders(org.keycloak.social.SocialProvider.class); itr.hasNext();) {
+                SocialProvider p = itr.next();
+                if (socialConfig.containsKey(p.getId() + ".key") && socialConfig.containsKey(p.getId() + ".secret")) {
+                    socialProviders.add(p);
+                }
+            }
         }
 
         public URI getBaseURI() {
@@ -128,6 +144,10 @@ public interface FormService {
             this.userModel = userModel;
         }
 
+        public List<SocialProvider> getSocialProviders() {
+            return socialProviders;
+        }
+
         public FormFlows.MessageType getMessageType() {
             return messageType;
         }
diff --git a/services/src/main/java/org/keycloak/services/resources/SocialResource.java b/services/src/main/java/org/keycloak/services/resources/SocialResource.java
index 57a5aaf..b25285b 100755
--- a/services/src/main/java/org/keycloak/services/resources/SocialResource.java
+++ b/services/src/main/java/org/keycloak/services/resources/SocialResource.java
@@ -136,8 +136,8 @@ public class SocialResource {
             return oauth.forwardToSecurityFailure("Login requester not enabled.");
         }
 
-        String key = System.getProperty("keycloak.social." + requestData.getProviderId() + ".key");
-        String secret = System.getProperty("keycloak.social." + requestData.getProviderId() + ".secret");
+        String key = realm.getSocialConfig().get(requestData.getProviderId() + ".key");
+        String secret = realm.getSocialConfig().get(requestData.getProviderId() + ".secret");
         String callbackUri = Urls.socialCallback(uriInfo.getBaseUri()).toString();
         SocialProviderConfig config = new SocialProviderConfig(key, secret, callbackUri);
 
@@ -228,8 +228,8 @@ public class SocialResource {
             return Flows.forms(realm, request, uriInfo).setError("Social provider not found").forwardToErrorPage();
         }
 
-        String key = System.getProperty("keycloak.social." + providerId + ".key");
-        String secret = System.getProperty("keycloak.social." + providerId + ".secret");
+        String key = realm.getSocialConfig().get(providerId + ".key");
+        String secret = realm.getSocialConfig().get(providerId + ".secret");
         String callbackUri = Urls.socialCallback(uriInfo.getBaseUri()).toString();
 
         SocialProviderConfig config = new SocialProviderConfig(key, secret, callbackUri);
diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/social/SocialLoginTest.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/social/SocialLoginTest.java
index 056af5c..4f87a10 100755
--- a/testsuite/integration/src/test/java/org/keycloak/testsuite/social/SocialLoginTest.java
+++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/social/SocialLoginTest.java
@@ -43,6 +43,9 @@ import org.keycloak.testsuite.rule.WebRule;
 import org.openqa.selenium.By;
 import org.openqa.selenium.WebDriver;
 
+import java.util.HashMap;
+import java.util.Map;
+
 /**
  * @author <a href="mailto:sthorger@redhat.com">Stian Thorgersen</a>
  */
@@ -54,6 +57,11 @@ public class SocialLoginTest {
         public void config(RealmManager manager, RealmModel defaultRealm, RealmModel appRealm) {
             appRealm.setSocial(true);
             appRealm.setAutomaticRegistrationAfterSocialLogin(true);
+
+            HashMap<String, String> socialConfig = new HashMap<String, String>();
+            socialConfig.put("dummy.key", "1234");
+            socialConfig.put("dummy.secret", "1234");
+            appRealm.setSocialConfig(socialConfig);
         }
     });