Author: anil.saldhana(a)jboss.com
Date: 2009-10-09 15:54:41 -0400 (Fri, 09 Oct 2009)
New Revision: 832
Modified:
identity-federation/trunk/jboss-identity-web/src/main/java/org/jboss/identity/federation/web/constants/GeneralConstants.java
identity-federation/trunk/jboss-identity-web/src/main/java/org/jboss/identity/federation/web/filters/SPFilter.java
identity-federation/trunk/jboss-identity-web/src/test/java/org/jboss/test/identity/federation/web/workflow/saml2/SAML2LogoutWorkflowUnitTestCase.java
Log:
JBID-40: SAML2 Logout Update workflow test
Modified:
identity-federation/trunk/jboss-identity-web/src/main/java/org/jboss/identity/federation/web/constants/GeneralConstants.java
===================================================================
---
identity-federation/trunk/jboss-identity-web/src/main/java/org/jboss/identity/federation/web/constants/GeneralConstants.java 2009-10-09
18:59:17 UTC (rev 831)
+++
identity-federation/trunk/jboss-identity-web/src/main/java/org/jboss/identity/federation/web/constants/GeneralConstants.java 2009-10-09
19:54:41 UTC (rev 832)
@@ -29,15 +29,23 @@
public interface GeneralConstants
{
String ASSERTIONS_VALIDITY = "ASSERTIONS_VALIDITY";
+
String ATTRIBUTES = "ATTRIBUTES";
String ATTRIBUTE_KEYS = "ATTRIBUTE_KEYS";
+
String CONFIGURATION = "CONFIGURATION";
+
+ String GLOBAL_LOGOUT = "GLO";
+
String IGNORE_SIGNATURES = "IGNORE_SIGNATURES";
+
String PRINCIPAL_ID = "jboss_identity.principal";
String ROLES = "ROLES";
String ROLES_ID = "jboss_identity.roles";
+
String ROLE_GENERATOR = "ROLE_GENERATOR";
String ROLE_VALIDATOR = "ROLE_VALIDATOR";
+
String SIGN_OUTGOING_MESSAGES = "SIGN_OUTGOING_MESSAGES";
String USERNAME_FIELD = "JBID_USERNAME";
Modified:
identity-federation/trunk/jboss-identity-web/src/main/java/org/jboss/identity/federation/web/filters/SPFilter.java
===================================================================
---
identity-federation/trunk/jboss-identity-web/src/main/java/org/jboss/identity/federation/web/filters/SPFilter.java 2009-10-09
18:59:17 UTC (rev 831)
+++
identity-federation/trunk/jboss-identity-web/src/main/java/org/jboss/identity/federation/web/filters/SPFilter.java 2009-10-09
19:54:41 UTC (rev 832)
@@ -209,7 +209,11 @@
response.sendError(saml2HandlerResponse.getErrorCode());
break;
}
-
saml2HandlerRequest.setTypeOfRequestToBeGenerated(GENERATE_REQUEST_TYPE.AUTH);
+ String glo = request.getParameter(GeneralConstants.GLOBAL_LOGOUT);
+ if(isNotNull(glo) && "true".equalsIgnoreCase(glo))
+
saml2HandlerRequest.setTypeOfRequestToBeGenerated(GENERATE_REQUEST_TYPE.LOGOUT);
+ else
+
saml2HandlerRequest.setTypeOfRequestToBeGenerated(GENERATE_REQUEST_TYPE.AUTH);
handler.generateSAMLRequest(saml2HandlerRequest,
saml2HandlerResponse);
}
}
Modified:
identity-federation/trunk/jboss-identity-web/src/test/java/org/jboss/test/identity/federation/web/workflow/saml2/SAML2LogoutWorkflowUnitTestCase.java
===================================================================
---
identity-federation/trunk/jboss-identity-web/src/test/java/org/jboss/test/identity/federation/web/workflow/saml2/SAML2LogoutWorkflowUnitTestCase.java 2009-10-09
18:59:17 UTC (rev 831)
+++
identity-federation/trunk/jboss-identity-web/src/test/java/org/jboss/test/identity/federation/web/workflow/saml2/SAML2LogoutWorkflowUnitTestCase.java 2009-10-09
19:54:41 UTC (rev 832)
@@ -45,6 +45,7 @@
import org.jboss.identity.federation.web.core.IdentityServer;
import org.jboss.identity.federation.web.filters.SPFilter;
import org.jboss.identity.federation.web.servlets.IDPServlet;
+import org.jboss.identity.federation.web.util.PostBindingUtil;
import org.jboss.test.identity.federation.web.mock.MockContextClassLoader;
import org.jboss.test.identity.federation.web.mock.MockFilterChain;
import org.jboss.test.identity.federation.web.mock.MockFilterConfig;
@@ -66,10 +67,66 @@
{
private String profile = "saml2/logout";
private ClassLoader tcl = Thread.currentThread().getContextClassLoader();
+ private String employee = "http://localhost:8080/employee/";
+ private String identity = "http://localhost:8080/idp/";
+ /**
+ * Test that the SP web filter generates the logout request
+ * to the IDP when there is a parameter "GLO" set to true
+ * @see {@code GeneralConstants#GLOBAL_LOGOUT}
+ * @throws Exception
+ */
public void testSPFilterLogOutRequestGeneration() throws Exception
- {
+ {
+ MockHttpSession session = new MockHttpSession();
+ session.setAttribute(GeneralConstants.PRINCIPAL_ID, new Principal()
+ {
+ public String getName()
+ {
+ return "anil";
+ }
+ });
+ List<String> rolesList = new ArrayList<String>();
+ rolesList.add("manager");
+ session.setAttribute(GeneralConstants.ROLES_ID, rolesList);
+
+ ServletContext servletContext = new MockServletContext();
+
+ //Let us feed the LogOutRequest to the SPFilter
+ MockContextClassLoader mclSPEmp = setupTCL(profile + "/sp/employee");
+ Thread.currentThread().setContextClassLoader(mclSPEmp);
+ SPFilter spEmpl = new SPFilter();
+ MockFilterConfig filterConfig = new MockFilterConfig(servletContext);
+ filterConfig.addInitParameter(GeneralConstants.IGNORE_SIGNATURES,
"true");
+
+ spEmpl.init(filterConfig);
+
+ MockHttpSession filterSession = new MockHttpSession();
+ MockHttpServletRequest filterRequest = new MockHttpServletRequest(filterSession,
"POST");
+ filterRequest.addParameter(GeneralConstants.GLOBAL_LOGOUT, "true");
+
+ MockHttpServletResponse filterResponse = new MockHttpServletResponse();
+ ByteArrayOutputStream filterbaos = new ByteArrayOutputStream();
+ filterResponse.setWriter(new PrintWriter(filterbaos));
+
+ spEmpl.doFilter(filterRequest, filterResponse, new MockFilterChain());
+
+
+ String spResponse = new String(filterbaos.toByteArray());
+ Document spHTMLResponse = DocumentUtil.getDocument(spResponse);
+ NodeList nodes = spHTMLResponse.getElementsByTagName("INPUT");
+ Element inputElement = (Element)nodes.item(0);
+ String logoutRequest =
inputElement.getAttributeNode("VALUE").getValue();
+ String relayState = null;
+ if(nodes.getLength() > 1)
+ relayState =
((Element)nodes.item(1)).getAttributeNode("VALUE").getValue();
+
+ byte[] b64Decoded = PostBindingUtil.base64Decode(logoutRequest);
+ SAML2Request saml2Request = new SAML2Request();
+ LogoutRequestType lor =
+ (LogoutRequestType) saml2Request.getRequestType(new
ByteArrayInputStream(b64Decoded));
+ assertEquals("Match Employee URL", employee,
lor.getIssuer().getValue());
}
public void testSAML2LogOutFromIDPServlet() throws Exception
Show replies by date