Allow for admin teams with spaces in their name.
| | |
| | | import java.net.URI;
|
| | | import java.net.URISyntaxException;
|
| | | import java.security.GeneralSecurityException;
|
| | | import java.util.List;
|
| | |
|
| | | import org.slf4j.Logger;
|
| | | import org.slf4j.LoggerFactory;
|
| | |
| | | }
|
| | |
|
| | | private void setAdminAttribute(UserModel user) {
|
| | | String adminString = settings.getString(Keys.realm.ldap_admins, "");
|
| | | String[] admins = adminString.split(" ");
|
| | | user.canAdmin = false;
|
| | | for (String admin : admins) {
|
| | | if (admin.startsWith("@")) { // Team
|
| | | if (user.getTeam(admin.substring(1)) != null)
|
| | | user.canAdmin = true;
|
| | | } else
|
| | | if (user.getName().equalsIgnoreCase(admin))
|
| | | user.canAdmin = true;
|
| | | }
|
| | | user.canAdmin = false;
|
| | | List<String> admins = settings.getStrings(Keys.realm.ldap_admins);
|
| | | for (String admin : admins) {
|
| | | if (admin.startsWith("@")) { // Team
|
| | | if (user.getTeam(admin.substring(1)) != null)
|
| | | user.canAdmin = true;
|
| | | } else
|
| | | if (user.getName().equalsIgnoreCase(admin))
|
| | | user.canAdmin = true;
|
| | | }
|
| | | }
|
| | |
|
| | | private void getTeamsFromLdap(LDAPConnection ldapConnection, String simpleUsername, SearchResultEntry loggingInUser, UserModel user) {
|
| | |
| | | * @return list of strings
|
| | | */
|
| | | public static List<String> getStringsFromValue(String value, String separator) {
|
| | | List<String> strings = new ArrayList<String>();
|
| | | try {
|
| | | String[] chunks = value.split(separator);
|
| | | for (String chunk : chunks) {
|
| | | chunk = chunk.trim();
|
| | | if (chunk.length() > 0) {
|
| | | strings.add(chunk);
|
| | | }
|
| | | }
|
| | | } catch (PatternSyntaxException e) {
|
| | | throw new RuntimeException(e);
|
| | | }
|
| | | return strings;
|
| | | }
|
| | | List<String> strings = new ArrayList<String>();
|
| | | try {
|
| | | String[] chunks = value.split(separator + "(?=([^\"]*\"[^\"]*\")*[^\"]*$)"); |
| | | for (String chunk : chunks) {
|
| | | chunk = chunk.trim();
|
| | | if (chunk.length() > 0) {
|
| | | if (chunk.charAt(0) == '"' && chunk.charAt(chunk.length() - 1) == '"') {
|
| | | // strip double quotes
|
| | | chunk = chunk.substring(1, chunk.length() - 1).trim();
|
| | | }
|
| | | strings.add(chunk);
|
| | | }
|
| | | }
|
| | | } catch (PatternSyntaxException e) {
|
| | | throw new RuntimeException(e);
|
| | | }
|
| | | return strings;
|
| | | }
|
| | |
|
| | | /**
|
| | | * Validates that a name is composed of letters, digits, or limited other
|
| | |
| | | backingMap.put("realm.ldap.accountPattern", "(&(objectClass=person)(sAMAccountName=${username}))"); |
| | | backingMap.put("realm.ldap.groupBase", "OU=Groups,OU=UserControl,OU=MyOrganization,DC=MyDomain"); |
| | | backingMap.put("realm.ldap.groupPattern", "(&(objectClass=group)(member=${dn}))"); |
| | | backingMap.put("realm.ldap.admins", "UserThree @Git_Admins"); |
| | | backingMap.put("realm.ldap.admins", "UserThree @Git_Admins \"@Git Admins\""); |
| | | |
| | | MemorySettings ms = new MemorySettings(backingMap); |
| | | |
| | |
| | | assertNotNull(userTwoModel); |
| | | assertNotNull(userTwoModel.getTeam("git_users")); |
| | | assertNull(userTwoModel.getTeam("git_admins")); |
| | | assertFalse(userTwoModel.canAdmin); |
| | | assertNotNull(userTwoModel.getTeam("git admins")); |
| | | assertTrue(userTwoModel.canAdmin); |
| | | |
| | | UserModel userThreeModel = ldapUserService.authenticate("UserThree", "userThreePassword".toCharArray()); |
| | | assertNotNull(userThreeModel); |
| | |
| | |
|
| | | @Test
|
| | | public void testStringsFromValue() throws Exception {
|
| | | List<String> strings = StringUtils.getStringsFromValue("A B C D");
|
| | | assertEquals(4, strings.size());
|
| | | assertEquals("A", strings.get(0));
|
| | | assertEquals("B", strings.get(1));
|
| | | assertEquals("C", strings.get(2));
|
| | | assertEquals("D", strings.get(3));
|
| | | }
|
| | | List<String> strings = StringUtils.getStringsFromValue("\"A A \" B \"C C\" D \"\" \"E\"");
|
| | | assertEquals(6, strings.size());
|
| | | assertEquals("A A", strings.get(0));
|
| | | assertEquals("B", strings.get(1));
|
| | | assertEquals("C C", strings.get(2));
|
| | | assertEquals("D", strings.get(3));
|
| | | assertEquals("", strings.get(4));
|
| | | assertEquals("E", strings.get(5));
|
| | |
|
| | | strings = StringUtils.getStringsFromValue("\"A A \", B, \"C C\", D, \"\", \"E\"", ",");
|
| | | assertEquals(6, strings.size());
|
| | | assertEquals("A A", strings.get(0));
|
| | | assertEquals("B", strings.get(1));
|
| | | assertEquals("C C", strings.get(2));
|
| | | assertEquals("D", strings.get(3));
|
| | | assertEquals("", strings.get(4));
|
| | | assertEquals("E", strings.get(5));
|
| | | }
|
| | |
|
| | | @Test
|
| | | public void testStringsFromValue2() throws Exception {
|
| | |
| | | sAMAccountName: Git_Admins |
| | | member: CN=UserOne,OU=US,OU=Users,OU=UserControl,OU=MyOrganization,DC=MyDomain |
| | | |
| | | dn: CN=Git Admins,OU=Groups,OU=UserControl,OU=MyOrganization,DC=MyDomain |
| | | objectClass: top |
| | | objectClass: group |
| | | cn: Git Admins |
| | | sAMAccountName: Git_Admins_With_Space |
| | | member: CN=UserTwo,OU=US,OU=Users,OU=UserControl,OU=MyOrganization,DC=MyDomain |
| | | |
| | | dn: CN=Git_Users,OU=Groups,OU=UserControl,OU=MyOrganization,DC=MyDomain |
| | | objectClass: top |
| | | objectClass: group |
| | |
| | | sAMAccountName: UserTwo |
| | | userPassword: userTwoPassword |
| | | memberOf: CN=Git_Users,OU=Groups,OU=UserControl,OU=MyOrganization,DC=MyDomain |
| | | memberOf: CN=Git Admins,OU=Groups,OU=UserControl,OU=MyOrganization,DC=MyDomain |
| | | |
| | | dn: CN=UserThree,OU=Canada,OU=Users,OU=UserControl,OU=MyOrganization,DC=MyDomain |
| | | objectClass: user |