Skip to content
Snippets Groups Projects
Commit 060ab40d authored by Nicholas Blair's avatar Nicholas Blair
Browse files

Merge branch 'UWSS-Issue1' into 'master'

Add support for deprecated mapping

To add backwards compatibility, additional mappings were added in the Attribute mapping.  Unit tests confirmed successful mapping.

Please review: @npblair @paul.erickson @ahoffmann 

See merge request !13
parents 5083ef15 ee448f04
No related branches found
No related tags found
1 merge request!13Add support for deprecated mapping
......@@ -3,13 +3,16 @@
*/
package edu.wisc.uwss.local;
import edu.wisc.uwss.UWUserDetails;
import edu.wisc.uwss.UWUserDetailsImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import edu.wisc.uwss.UWUserDetails;
import edu.wisc.uwss.UWUserDetailsImpl;
/**
* Interface providing a mechanism to bind a row from the local users properties
* file to a {@link UWUserDetails} instance.
......@@ -44,6 +47,8 @@ public interface LocalUserDetailsAttributesMapper {
*/
public static class Default implements LocalUserDetailsAttributesMapper {
private static final Logger logger = LoggerFactory.getLogger(LocalUserDetailsAttributesMapper.class);
/**
* {@inheritDoc}
*
......@@ -56,23 +61,36 @@ public interface LocalUserDetailsAttributesMapper {
*/
@Override
public UWUserDetails mapUser(String username, String[] values) {
if(values.length > 6) {
if (values.length > 6) {
String[] uddsValues = Arrays.copyOfRange(values, 6, values.length);
List<String> membership = new ArrayList<>();
for(String v : uddsValues) {
membership.add(v);
}
Collections.addAll(membership, uddsValues);
// pvi, username, password, email,
return new UWUserDetailsImpl(values[1], username, values[0], values[2], values[5], membership)
.setFirstName(values[3])
.setLastName(values[4]);
} else {
} else if (values.length == 6) {
// String pvi, String username, String password, String fullName, String emailAddress
return new UWUserDetailsImpl(values[1], username, values[0], values[2], values[5])
.setFirstName(values[3])
.setLastName(values[4]);
}
return mapUserDeprecatedFormat(username, values);
}
@Deprecated
UWUserDetails mapUserDeprecatedFormat(String username, String[] values) {
if (values.length == 5) {
logger.warn("Mapping deprecated in UWSS 1.2. Expected: username=password,fullName,firstName,lastName,emailAddress[,membership1,[membership2...]]");
List<String> membership = new ArrayList<>();
membership.add(values[4]);
return new UWUserDetailsImpl(values[1], username, values[0], values[2], values[3], membership);
} else {
//length must equal 4
logger.warn("Mapping deprecated in UWSS 1.2. Expected: username=password,fullName,firstName,lastName,emailAddress[,membership1,[membership2...]]");
return new UWUserDetailsImpl(values[1], username, values[0], values[2], values[3]);
}
}
}
}
......@@ -3,26 +3,21 @@
*/
package edu.wisc.uwss.local;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import java.io.IOException;
import java.util.Arrays;
import java.util.Collection;
import java.util.Properties;
import edu.wisc.uwss.HasModifiableSource;
import edu.wisc.uwss.UWUserDetails;
import edu.wisc.uwss.UWUserDetailsImpl;
import org.junit.Test;
import org.springframework.core.io.ClassPathResource;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import edu.wisc.uwss.HasModifiableSource;
import edu.wisc.uwss.UWUserDetails;
import edu.wisc.uwss.UWUserDetailsImpl;
import java.io.IOException;
import java.util.Arrays;
import java.util.Collection;
import java.util.Properties;
import static org.junit.Assert.*;
/**
* Tests for {@link LocalUserDetailsManagerImpl}.
......@@ -303,5 +298,41 @@ public class LocalUserDetailsManagerImplTest {
// observe firstname modified by the callback
assertEquals("something custom", result.getFirstName());
}
@Test
public void unsupportedFormatWithUDDS() {
LocalUserDetailsAttributesMapper attributesMapper = new LocalUserDetailsAttributesMapper.Default();
//demo STAR user with UDDS:
String row = "aalpaca,UW123D455,Amy Alpaca,amy.alpaca@demo.wisc.edu,A064079";
String[] values = row.split(",");
String username = "aalpaca";
UWUserDetails uwUserDetails = attributesMapper.mapUser(username, values);
assertEquals(username, uwUserDetails.getUsername());
assertEquals("aalpaca", uwUserDetails.getPassword());
assertEquals("UW123D455", uwUserDetails.getPvi());
assertEquals("Amy Alpaca", uwUserDetails.getFullName());
assertEquals("amy.alpaca@demo.wisc.edu", uwUserDetails.getEmailAddress());
assertTrue(uwUserDetails.getUddsMembership().contains("A064079"));
}
@Test
public void unsupportedFormatWithoutUDDS() {
LocalUserDetailsAttributesMapper attributesMapper = new LocalUserDetailsAttributesMapper.Default();
//demo STAR user without UDDS:
String row = "jim,UW000A003,Jim Doe,jim.doe@demo.wisc.edu";
String[] values = row.split(",");
String username = "aalpaca";
UWUserDetails uwUserDetails = attributesMapper.mapUser(username, values);
assertEquals(username, uwUserDetails.getUsername());
assertEquals("jim", uwUserDetails.getPassword());
assertEquals("UW000A003", uwUserDetails.getPvi());
assertEquals("Jim Doe", uwUserDetails.getFullName());
assertEquals("jim.doe@demo.wisc.edu", uwUserDetails.getEmailAddress());
assertTrue(uwUserDetails.getUddsMembership().isEmpty());
}
}
\ No newline at end of file
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