Skip to content
Snippets Groups Projects
Commit 13fd19b4 authored by Benjamin Sousa's avatar Benjamin Sousa
Browse files

Merge branch 'split_manifest_header' into 'master'

Consume isMemberOf attribute as single value with semi-colon delimited list of manifest groups

In the List Library application, which is attempting to consume Manifest groups as UW Spring Security authorities, we discovered that multiple Manifest groups are not provided by the login server as multiple isMemberOf headers but as one string with the Manifest groups delimited by semi-colons.

This PR revises the default Preauth mapper to split the isMemberOf string apart into a Java collection, which is the correct format for the authorities argument to the UWUserDetailsImpl constructor.

Notify: @paul.erickson @ahoffmann @gutkowski @bkeen

See merge request !24
parents ae032cd2 68bc4c3f
No related branches found
No related tags found
No related merge requests found
...@@ -85,7 +85,18 @@ public interface PreauthenticatedUserDetailsAttributeMapper { ...@@ -85,7 +85,18 @@ public interface PreauthenticatedUserDetailsAttributeMapper {
String emplid = request.getHeader(isisEmplidHeader); String emplid = request.getHeader(isisEmplidHeader);
Collection<String> uddsMembership = safeGetHeaders(request, uddsHeader); Collection<String> uddsMembership = safeGetHeaders(request, uddsHeader);
String email = request.getHeader(emailAddressHeader); String email = request.getHeader(emailAddressHeader);
Collection<String> manifestGroups = safeGetHeaders(request, manifestHeader);
Collection<String> manifestGroups = new ArrayList<>();
String manifestValue = request.getHeader(manifestHeader);
if (manifestValue != null) {
String[] manifestGroupStrings = manifestValue.split(";");
for (String manifestGroupString : manifestGroupStrings) {
if (!manifestGroupString.trim().isEmpty()) {
manifestGroups.add(manifestGroupString.trim());
}
}
}
UWUserDetailsImpl result = UWUserDetailsImpl.newInstance(pvi, uid, "", cn, email, uddsMembership, manifestGroups); UWUserDetailsImpl result = UWUserDetailsImpl.newInstance(pvi, uid, "", cn, email, uddsMembership, manifestGroups);
result.setSource("edu.wisc.uwss.preauth"); result.setSource("edu.wisc.uwss.preauth");
result.setEppn(eppn); result.setEppn(eppn);
......
...@@ -73,8 +73,7 @@ public class PreauthenticatedUserDetailsAttributeMapperTest { ...@@ -73,8 +73,7 @@ public class PreauthenticatedUserDetailsAttributeMapperTest {
@Test @Test
public void mapUser_isMemberOf_contains_blank_values() { public void mapUser_isMemberOf_contains_blank_values() {
MockHttpServletRequest request = mockRequest(); MockHttpServletRequest request = mockRequest();
request.addHeader("isMemberOf", ""); request.addHeader("isMemberOf", "; ");
request.addHeader("isMemberOf", " ");
UWUserDetails result = filter.mapUser(request); UWUserDetails result = filter.mapUser(request);
assertNotNull(result); assertNotNull(result);
...@@ -88,8 +87,7 @@ public class PreauthenticatedUserDetailsAttributeMapperTest { ...@@ -88,8 +87,7 @@ public class PreauthenticatedUserDetailsAttributeMapperTest {
@Test @Test
public void mapUser_multipleManifestGroups() { public void mapUser_multipleManifestGroups() {
MockHttpServletRequest request = mockRequest(); MockHttpServletRequest request = mockRequest();
request.addHeader("isMemberOf", "uw:domain:onegroup"); request.addHeader("isMemberOf", "uw:domain:onegroup;uw:domain:anothergroup");
request.addHeader("isMemberOf", "uw:domain:anothergroup");
UWUserDetails result = filter.mapUser(request); UWUserDetails result = filter.mapUser(request);
assertNotNull(result); assertNotNull(result);
......
...@@ -38,7 +38,7 @@ public class UWUserDetailsAuthenticationFilterTest { ...@@ -38,7 +38,7 @@ public class UWUserDetailsAuthenticationFilterTest {
when(request.getHeader("cn")).thenReturn("Bucky Badger"); when(request.getHeader("cn")).thenReturn("Bucky Badger");
when(request.getHeaders("wisceduudds")).thenReturn(Collections.enumeration(Arrays.asList("A061234"))); when(request.getHeaders("wisceduudds")).thenReturn(Collections.enumeration(Arrays.asList("A061234")));
when(request.getHeader("mail")).thenReturn("foo@foo.wisc.edu"); when(request.getHeader("mail")).thenReturn("foo@foo.wisc.edu");
when(request.getHeaders("isMemberOf")).thenReturn(Collections.enumeration(Arrays.asList("somegroup"))); when(request.getHeader("isMemberOf")).thenReturn("somegroup");
UWUserDetails userDetails = filter.getPreAuthenticatedPrincipal(request); UWUserDetails userDetails = filter.getPreAuthenticatedPrincipal(request);
assertEquals("bbadger", userDetails.getUsername()); assertEquals("bbadger", userDetails.getUsername());
assertEquals("bbadger@wisc.edu", userDetails.getEppn()); assertEquals("bbadger@wisc.edu", userDetails.getEppn());
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment