package org.jboss.seam.security.externaltest.integration.saml.idp;
import java.io.IOException;
import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.inject.Instance;
import javax.inject.Inject;
import javax.servlet.http.HttpServletResponse;
import org.jboss.solder.logging.Logger;
import org.jboss.seam.security.external.SamlMultiUserIdentityProviderApi;
import org.jboss.seam.security.external.api.ResponseHolder;
import org.jboss.seam.security.external.dialogues.api.Dialogue;
import org.jboss.seam.security.external.dialogues.api.DialogueManager;
import org.jboss.seam.security.external.dialogues.api.Dialogued;
import org.jboss.seam.security.external.saml.api.SamlIdpSession;
import org.jboss.seam.security.external.spi.SamlIdentityProviderSpi;
@ApplicationScoped
public class SamlIdpApplicationMock implements SamlIdentityProviderSpi {
@Inject
private DialogueManager dialogueManager;
@Inject
private Dialogue dialogue;
@Inject
private Instance<SamlMultiUserIdentityProviderApi> idpApi;
private String dialogueId;
@Inject
private Logger log;
public void authenticate(ResponseHolder responseHolder) {
dialogueId = dialogue.getId();
try {
responseHolder.getResponse().getWriter().print("Please login");
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public void handleLogin(String userName, HttpServletResponse response) {
SamlIdpSession session = idpApi.get().localLogin(idpApi.get().createNameId(userName, null, null), null);
dialogueManager.attachDialogue(dialogueId);
idpApi.get().authenticationSucceeded(session, response);
dialogueManager.detachDialogue();
}
public int getNumberOfSessions() {
return idpApi.get().getSessions().size();
}
public void globalLogoutFailed(ResponseHolder responseHolder) {
try {
responseHolder.getResponse().getWriter().print("Single logout failed");
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public void globalLogoutSucceeded(ResponseHolder responseHolder) {
try {
responseHolder.getResponse().getWriter().print("Single logout succeeded");
} catch (IOException e) {
throw new RuntimeException(e);
}
}
@Dialogued
public void handleSingleLogout(HttpServletResponse response) {
idpApi.get().globalLogout(idpApi.get().getSessions().iterator().next(), response);
}
public void loggedOut(SamlIdpSession session) {
log.info("User " + session.getPrincipal().getNameId().getValue() + " has been logged out.");
}
}