package org.atricore.idbus.capabilities.oauth2.main.binding; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.atricore.idbus.capabilities.sso.main.binding.SsoHttpArtifactBinding; import org.atricore.idbus.capabilities.sso.main.binding.SsoHttpRedirectBinding; import org.atricore.idbus.capabilities.sso.main.binding.SsoPreAuthnTokenSvcBinding; import org.atricore.idbus.kernel.main.mediation.Channel; import org.atricore.idbus.kernel.main.mediation.MediationBinding; import org.atricore.idbus.kernel.main.mediation.MediationBindingFactory; import org.atricore.idbus.kernel.main.mediation.camel.component.binding.AbstractMediationBinding; import org.atricore.idbus.kernel.main.util.ConfigurationContext; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import java.util.Map; /** * @author <a href=mailto:sgonzalez@atricore.org>Sebastian Gonzalez Oyuela</a> */ public class OAuth2BindingFactory extends MediationBindingFactory implements ApplicationContextAware { private static final Log logger = LogFactory.getLog(OAuth2BindingFactory.class); protected ApplicationContext applicationContext; public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.applicationContext = applicationContext; } public ApplicationContext getApplicationContext() { return applicationContext; } public MediationBinding createBinding(String binding, Channel channel) { OAuth2Binding b = null; try { b = OAuth2Binding.asEnum(binding); } catch (IllegalArgumentException e) { return null; } MediationBinding mb = null; switch (b) { case OAUTH2_SOAP: mb = new OAuth2SoapBinding(channel); break; case OAUTH2_RESTFUL: mb = new OAuth2RestfulBinding(channel); break; case SSO_ARTIFACT: mb = new SsoHttpArtifactBinding(channel); break; case SSO_REDIRECT: mb = new SsoHttpRedirectBinding(channel); break; case SSO_PREAUTHN: mb = new SsoPreAuthnTokenSvcBinding(channel); break; default: break; } if (mb != null && mb instanceof AbstractMediationBinding) { Map<String, ConfigurationContext> cfgs = applicationContext.getBeansOfType(ConfigurationContext.class); if (cfgs.size() == 1) { ConfigurationContext cfg = cfgs.values().iterator().next(); ((AbstractMediationBinding)mb).setConfigurationContext(cfg); } ((AbstractMediationBinding)mb).setStateManagerClassLoader(this.applicationContext.getClassLoader()); } return mb; } }