package org.pac4j.oauth.client;
import java.util.Map;
import java.util.logging.Logger;
import com.github.scribejava.core.model.Verb;
import org.pac4j.core.context.WebContext;
import org.pac4j.oauth.profile.OAuth20Profile;
import org.pac4j.oauth.profile.generic.GenericOAuth20ProfileDefinition;
import org.pac4j.scribe.builder.api.GenericApi20;
/**
* <p>This class is a generic OAuth2 client to authenticate users in a standard OAuth2 server.</p>
* <p>All configuration parameters can be specified setting the corresponding attribute.</p>
* <p>It returns a {@link org.pac4j.oauth.profile.OAuth20Profile}.</p>
*
* @author Julio Arrebola
*/
public class GenericOAuth20Client extends OAuth20Client<OAuth20Profile> {
private static final Logger LOG = Logger.getLogger(GenericOAuth20Client.class.getName());
private String authUrl;
private String tokenUrl;
private String profileUrl;
private String profilePath;
private Verb profileVerb;
private Map<String, String> profileAttrs;
private Map<String, String> customParams;
public GenericOAuth20Client() {
}
@Override
protected void clientInit(final WebContext context) {
LOG.info("InternalInit");
GenericApi20 genApi = new GenericApi20(authUrl, tokenUrl);
configuration.setApi(genApi);
configuration.setCustomParams(customParams);
setConfiguration(configuration);
GenericOAuth20ProfileDefinition profileDefinition = new GenericOAuth20ProfileDefinition();
profileDefinition.setFirstNodePath(profilePath);
profileDefinition.setProfileVerb(profileVerb);
profileDefinition.setProfileUrl(profileUrl);
if (profileAttrs != null) {
for (Map.Entry<String,String> entry : profileAttrs.entrySet()) {
profileDefinition.profileAttribute(entry.getKey(), entry.getValue(), null);
}
}
configuration.setProfileDefinition(profileDefinition);
super.clientInit(context);
}
public void setAuthUrl(final String authUrl) {
this.authUrl = authUrl;
}
public void setTokenUrl(final String tokenUrl) {
this.tokenUrl = tokenUrl;
}
public void setProfileUrl(final String profileUrl) {
this.profileUrl = profileUrl;
}
public void setProfileNodePath(final String profilePath) {
this.profilePath = profilePath;
}
public void setProfileVerb(final Verb profileVerb) {
this.profileVerb = profileVerb;
}
public void setProfileAttrs(final Map<String, String> profileAttrsMap) {
this.profileAttrs = profileAttrsMap;
}
public void setCustomParams(final Map<String, String> customParamsMap) {
this.customParams = customParamsMap;
}
}