Added SocialLoader to social core
This commit is contained in:
parent
00a7d88dee
commit
fbe8c5cdec
3 changed files with 41 additions and 30 deletions
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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()) {
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in a new issue