package org.jboss.seam.security.examples.id_provider; import java.util.LinkedList; import java.util.List; import javax.enterprise.inject.Model; import javax.faces.context.FacesContext; import javax.inject.Inject; import javax.servlet.http.HttpServletResponse; import org.jboss.seam.security.external.saml.api.SamlIdentityProviderApi; import org.jboss.seam.security.external.saml.api.SamlIdentityProviderConfigurationApi; import org.jboss.seam.security.external.saml.idp.SamlExternalServiceProvider; @Model public class SessionManagement { @Inject private SamlIdentityProviderApi idpApi; @Inject private SamlIdentityProviderConfigurationApi idpConfApi; public List<String> getNonParticipatingServiceProviders() { List<String> serviceProviders = new LinkedList<String>(); for (SamlExternalServiceProvider sp : idpConfApi.getServiceProviders()) { if (!isSessionParticipant(sp)) { serviceProviders.add(sp.getEntityId()); } } return serviceProviders; } public List<String> getParticipatingServiceProviders() { List<String> serviceProviders = new LinkedList<String>(); for (SamlExternalServiceProvider sp : idpConfApi.getServiceProviders()) { if (isSessionParticipant(sp)) { serviceProviders.add(sp.getEntityId()); } } return serviceProviders; } private boolean isSessionParticipant(SamlExternalServiceProvider sp) { return idpApi.getSession().getServiceProviders().contains(sp); } public void samlRemoteLogin(String spEntityId) { if (idpApi.getSession() == null) { throw new RuntimeException("No local SAML session."); } idpApi.remoteLogin(spEntityId, null, (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse()); } }