package org.jboss.seam.security.external.saml.idp;
import java.util.List;
import javax.enterprise.inject.Instance;
import javax.inject.Inject;
import javax.servlet.http.HttpServletResponse;
import org.jboss.seam.security.external.SamlMultiUserIdentityProviderApi;
import org.jboss.seam.security.external.jaxb.samlv2.assertion.AttributeType;
import org.jboss.seam.security.external.saml.api.SamlIdentityProviderApi;
import org.jboss.seam.security.external.saml.api.SamlIdpSession;
import org.jboss.seam.security.external.saml.api.SamlNameId;
public class SamlIdpSingleUser implements SamlIdentityProviderApi {
@Inject
private Instance<SamlMultiUserIdentityProviderApi> multiUserApi;
public void authenticationSucceeded(HttpServletResponse response) {
multiUserApi.get().authenticationSucceeded(getSession(), response);
}
public void authenticationFailed(HttpServletResponse response) {
multiUserApi.get().authenticationFailed(response);
}
public SamlIdpSession getSession() {
if (multiUserApi.get().getSessions().size() == 0) {
return null;
} else {
return multiUserApi.get().getSessions().iterator().next();
}
}
public void localLogin(SamlNameId nameId, List<AttributeType> attributes) {
multiUserApi.get().localLogin(nameId, attributes);
}
public void remoteLogin(String spEntityId, String remoteUrl, HttpServletResponse response) {
SamlIdpSession session = getSession();
if (session == null) {
throw new IllegalStateException("Need to login locally first.");
}
multiUserApi.get().remoteLogin(spEntityId, session, remoteUrl, response);
}
public void localLogout() {
SamlIdpSession session = getSession();
if (session == null) {
throw new IllegalStateException("Logout not possible because there is no current session.");
}
multiUserApi.get().localLogout(session);
}
public void globalLogout(HttpServletResponse response) {
SamlIdpSession session = getSession();
if (session == null) {
throw new IllegalStateException("Logout not possible because there is no current session.");
}
multiUserApi.get().globalLogout(session, response);
}
public SamlNameId createNameId(String value, String format, String qualifier) {
return multiUserApi.get().createNameId(value, format, qualifier);
}
}