Added SocialLoader to social core

This commit is contained in:
Stian Thorgersen 2013-12-11 13:44:47 +00:00
parent 00a7d88dee
commit fbe8c5cdec
3 changed files with 41 additions and 30 deletions

View file

@ -25,15 +25,14 @@ 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.SocialLoader;
import org.keycloak.social.SocialProvider;
import javax.ws.rs.core.MultivaluedMap;
import java.net.URI;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.ServiceLoader;
/**
* @author <a href="mailto:vrockai@redhat.com">Viliam Rockai</a>
@ -98,8 +97,7 @@ public interface FormService {
socialProviders = new LinkedList<SocialProvider>();
Map<String, String> socialConfig = realm.getSocialConfig();
if (socialConfig != null) {
for (Iterator<SocialProvider> itr = ServiceLoader.load(org.keycloak.social.SocialProvider.class).iterator(); itr.hasNext(); ) {
SocialProvider p = itr.next();
for (SocialProvider p : SocialLoader.load()) {
if (socialConfig.containsKey(p.getId() + ".key") && socialConfig.containsKey(p.getId() + ".secret")) {
socialProviders.add(p);
}

View file

@ -39,6 +39,7 @@ import org.keycloak.social.AuthCallback;
import org.keycloak.social.AuthRequest;
import org.keycloak.social.RequestDetails;
import org.keycloak.social.SocialConstants;
import org.keycloak.social.SocialLoader;
import org.keycloak.social.SocialProvider;
import org.keycloak.social.SocialProviderConfig;
import org.keycloak.social.SocialProviderException;
@ -63,11 +64,9 @@ import javax.ws.rs.core.Response.Status;
import javax.ws.rs.core.UriInfo;
import java.net.URISyntaxException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.ServiceLoader;
import java.util.UUID;
/**
@ -114,7 +113,7 @@ public class SocialResource {
Map<String, String[]> queryParams = getQueryParams();
RequestDetails requestData = getRequestDetails(queryParams);
SocialProvider provider = getProvider(requestData.getProviderId());
SocialProvider provider = SocialLoader.load(requestData.getProviderId());
String realmId = requestData.getClientAttribute("realmId");
@ -179,7 +178,7 @@ public class SocialResource {
}
realm.addSocialLink(user, socialLink);
} else {
} else {
// Redirect user to registration screen with prefilled data from social provider
MultivaluedMap<String, String> formData = fillRegistrationFormWithSocialData(socialUser);
@ -212,13 +211,13 @@ public class SocialResource {
@GET
@Path("{realm}/login")
public Response redirectToProviderAuth(@PathParam("realm") final String realmId,
@QueryParam("provider_id") final String providerId, @QueryParam("client_id") final String clientId,
@QueryParam("scope") final String scope, @QueryParam("state") final String state,
@QueryParam("redirect_uri") final String redirectUri) {
@QueryParam("provider_id") final String providerId, @QueryParam("client_id") final String clientId,
@QueryParam("scope") final String scope, @QueryParam("state") final String state,
@QueryParam("redirect_uri") final String redirectUri) {
RealmManager realmManager = new RealmManager(session);
RealmModel realm = realmManager.getRealm(realmId);
SocialProvider provider = getProvider(providerId);
SocialProvider provider = SocialLoader.load(providerId);
if (provider == null) {
return Flows.forms(realm, request, uriInfo).setError("Social provider not found").forwardToErrorPage();
}
@ -305,11 +304,7 @@ public class SocialResource {
}
private RequestDetails getRequestDetails(Map<String, String[]> queryParams) {
Iterator<SocialProvider> itr = ServiceLoader.load(SocialProvider.class).iterator();
while (itr.hasNext()) {
SocialProvider provider = itr.next();
for (SocialProvider provider : SocialLoader.load()) {
if (queryParams.containsKey(provider.getRequestIdParamName())) {
String requestId = queryParams.get(provider.getRequestIdParamName())[0];
if (socialRequestManager.isRequestId(requestId)) {
@ -321,19 +316,6 @@ public class SocialResource {
return null;
}
private SocialProvider getProvider(String providerId) {
Iterator<SocialProvider> itr = ServiceLoader.load(SocialProvider.class).iterator();
while (itr.hasNext()) {
SocialProvider provider = itr.next();
if (provider.getId().equals(providerId)) {
return provider;
}
}
return null;
}
private Map<String, String[]> getQueryParams() {
Map<String, String[]> queryParams = new HashMap<String, String[]>();
for (Entry<String, List<String>> e : uriInfo.getQueryParameters().entrySet()) {

View file

@ -0,0 +1,31 @@
package org.keycloak.social;
import java.util.ServiceLoader;
/**
* @author <a href="mailto:sthorger@redhat.com">Stian Thorgersen</a>
*/
public class SocialLoader {
private SocialLoader() {
}
public static SocialProvider load(String id) {
if (id == null) {
throw new NullPointerException();
}
for (SocialProvider s : load()) {
if (id.equals(s.getId())) {
return s;
}
}
return null;
}
public static Iterable<SocialProvider> load() {
return ServiceLoader.load(SocialProvider.class);
}
}