KEYCLOAK-116
Use social provider settings from realm
This commit is contained in:
parent
6e3dd959eb
commit
bb3a82f932
5 changed files with 41 additions and 18 deletions
|
@ -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() {
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
});
|
||||
|
||||
|
|
Loading…
Reference in a new issue