package org.jboss.seam.security.externaltest.integration.saml.sp;
import java.io.IOException;
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.SamlMultiUserServiceProviderApi;
import org.jboss.seam.security.external.api.ResponseHolder;
import org.jboss.seam.security.external.dialogues.api.Dialogued;
import org.jboss.seam.security.external.saml.api.SamlSpSession;
import org.jboss.seam.security.external.spi.SamlServiceProviderSpi;
import org.jboss.seam.security.external.virtualapplications.api.VirtualApplicationScoped;
@VirtualApplicationScoped
public class SamlSpApplicationMock implements SamlServiceProviderSpi {
@Inject
private Instance<SamlMultiUserServiceProviderApi> spApi;
@Inject
private Logger log;
@Dialogued
public void login(String idpEntityId, HttpServletResponse response) {
spApi.get().login(idpEntityId, response);
}
public void loginFailed(String statusCodeLevel1, String statusCodeLevel2, ResponseHolder responseHolder) {
writeMessageToResponse("login failed", responseHolder);
}
public void loginSucceeded(SamlSpSession session, ResponseHolder responseHolder) {
writeMessageToResponse("Login succeeded (" + session.getPrincipal().getNameId().getValue() + ")", responseHolder);
}
public void globalLogoutFailed(String statusCodeLevel1, String statusCodeLevel2, ResponseHolder responseHolder) {
writeMessageToResponse("Single logout failed", responseHolder);
}
public void globalLogoutSucceeded(ResponseHolder responseHolder) {
writeMessageToResponse("Single logout succeeded", responseHolder);
}
public void loggedIn(SamlSpSession session, String url, ResponseHolder responseHolder) {
writeMessageToResponse("Logged in unsolicited", responseHolder);
}
private void writeMessageToResponse(String message, ResponseHolder responseHolder) {
try {
responseHolder.getResponse().getWriter().print(message);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public int getNumberOfSessions() {
return spApi.get().getSessions().size();
}
@Dialogued
public void handleGlobalLogout(HttpServletResponse response) {
SamlSpSession session = spApi.get().getSessions().iterator().next();
spApi.get().globalLogout(session, response);
}
public void loggedOut(SamlSpSession session) {
log.info("User " + session.getPrincipal().getNameId() + " has been logged out.");
}
}