package org.jboss.seam.security.examples.id_consumer; import javax.enterprise.inject.Model; import javax.faces.application.FacesMessage; import javax.faces.context.FacesContext; import javax.inject.Inject; import javax.servlet.http.HttpServletResponse; import org.jboss.seam.security.external.dialogues.api.Dialogued; import org.jboss.seam.security.external.saml.api.SamlServiceProviderApi; import org.jboss.seam.security.external.saml.api.SamlSpSession; @Model public class SamlIdentity { @Inject private SamlServiceProviderApi samlSpApi; @Dialogued public void login(String idpEntityId) { if (!isLoggedIn()) { samlSpApi.login(idpEntityId, (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse()); } else { FacesMessage facesMessage = new FacesMessage("Already logged in."); FacesContext.getCurrentInstance().addMessage(null, facesMessage); } } public void localLogout() { if (isLoggedIn()) { if (samlSpApi.getSession() != null) { samlSpApi.localLogout(); } } else { FacesMessage facesMessage = new FacesMessage("Not logged in."); FacesContext.getCurrentInstance().addMessage(null, facesMessage); } } public void globalLogout() { if (isLoggedIn()) { if (samlSpApi.getSession() != null) { samlSpApi.globalLogout((HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse()); } } else { FacesMessage facesMessage = new FacesMessage("Not logged in."); FacesContext.getCurrentInstance().addMessage(null, facesMessage); } } public boolean isLoggedIn() { return samlSpApi.getSession() != null; } public SamlSpSession getSamlSpSession() { return samlSpApi.getSession(); } public void redirectToLoginIfNotLoggedIn() { if (!isLoggedIn()) { redirectToViewId("/Login.xhtml"); } } private void redirectToViewId(String viewId) { FacesContext facesContext = FacesContext.getCurrentInstance(); FacesContext.getCurrentInstance().getApplication().getNavigationHandler().handleNavigation(facesContext, null, viewId + "?faces-redirect=true"); } }