LDAPConnection ldapConnection = getLdapConnection(); \r
if (ldapConnection != null) {\r
// Find the logging in user's DN\r
- String accountBase = settings.getString(Keys.realm.ldap_accountBase, "");\r
- String accountPattern = settings.getString(Keys.realm.ldap_accountPattern, "(&(objectClass=person)(sAMAccountName=${username}))");\r
+ String accountBase = settings.getString(Keys.realm.ldap.accountBase, "");\r
+ String accountPattern = settings.getString(Keys.realm.ldap.accountPattern, "(&(objectClass=person)(sAMAccountName=${username}))");\r
- accountPattern = StringUtils.replace(accountPattern, "${username}", simpleUsername);\r
+ accountPattern = StringUtils.replace(accountPattern, "${username}", escapeLDAPSearchFilter(simpleUsername));\r
\r
SearchResult result = doSearch(ldapConnection, accountBase, accountPattern);\r
if (result != null && result.getEntryCount() == 1) {\r
user.canAdmin = true;\r
}\r
}\r
- String displayName = settings.getString(Keys.realm.ldap_displayName, "displayName");\r
- String email = settings.getString(Keys.realm.ldap_email, "email");\r
+ \r
+ private void setUserAttributes(UserModel user, SearchResultEntry userEntry) {\r
+ // Is this user an admin?\r
+ setAdminAttribute(user);\r
+ \r
+ // Don't want visibility into the real password, make up a dummy\r
+ user.password = "StoredInLDAP";\r
+ \r
+ // Get Attributes for full name / email\r
++ String displayName = settings.getString(Keys.realm.ldap.displayName, "displayName");\r
++ String email = settings.getString(Keys.realm.ldap.email, "email");\r
+ \r
+ // Replace embedded ${} with attributes\r
+ if (displayName.contains("${")) {\r
+ for (Attribute userAttribute : userEntry.getAttributes())\r
+ displayName = StringUtils.replace(displayName, "${" + userAttribute.getName() + "}", userAttribute.getValue());\r
+ \r
+ user.displayName = displayName;\r
+ } else {\r
+ user.displayName = userEntry.getAttribute(displayName).getValue();\r
+ }\r
+ \r
+ if (email.contains("${")) {\r
+ for (Attribute userAttribute : userEntry.getAttributes())\r
+ email = StringUtils.replace(email, "${" + userAttribute.getName() + "}", userAttribute.getValue());\r
+ \r
+ user.emailAddress = email;\r
+ } else {\r
+ user.emailAddress = userEntry.getAttribute(email).getValue();\r
+ }\r
+ }\r
\r
private void getTeamsFromLdap(LDAPConnection ldapConnection, String simpleUsername, SearchResultEntry loggingInUser, UserModel user) {\r
String loggingInUserDN = loggingInUser.getDN();\r
\r
user.teams.clear(); // Clear the users team memberships - we're going to get them from LDAP\r
- String groupBase = settings.getString(Keys.realm.ldap_groupBase, "");\r
- String groupMemberPattern = settings.getString(Keys.realm.ldap_groupMemberPattern, "(&(objectClass=group)(member=${dn}))");\r
+ String groupBase = settings.getString(Keys.realm.ldap.groupBase, "");\r
+ String groupMemberPattern = settings.getString(Keys.realm.ldap.groupMemberPattern, "(&(objectClass=group)(member=${dn}))");\r
\r
- groupMemberPattern = StringUtils.replace(groupMemberPattern, "${dn}", loggingInUserDN);\r
- groupMemberPattern = StringUtils.replace(groupMemberPattern, "${username}", simpleUsername);\r
+ groupMemberPattern = StringUtils.replace(groupMemberPattern, "${dn}", escapeLDAPSearchFilter(loggingInUserDN));\r
+ groupMemberPattern = StringUtils.replace(groupMemberPattern, "${username}", escapeLDAPSearchFilter(simpleUsername));\r
\r
// Fill in attributes into groupMemberPattern\r
for (Attribute userAttribute : loggingInUser.getAttributes())\r
private LdapUserService ldapUserService;
- int ldapPort = 1389;
++ static int ldapPort = 1389;
+
- @Before
- public void createInMemoryLdapServer() throws Exception {
+ @BeforeClass
+ public static void createInMemoryLdapServer() throws Exception {
InMemoryDirectoryServerConfig config = new InMemoryDirectoryServerConfig("dc=MyDomain");
config.addAdditionalBindCredentials("cn=Directory Manager", "password");
- config.setListenerConfigs(InMemoryListenerConfig.createLDAPConfig("default", 389));
+ config.setListenerConfigs(InMemoryListenerConfig.createLDAPConfig("default", ldapPort));
config.setSchema(null);
InMemoryDirectoryServer ds = new InMemoryDirectoryServer(config);
@Before
public void createLdapUserService() {
+ ldapUserService = new LdapUserService();
+ ldapUserService.setup(getSettings());
+ }
+
+ private MemorySettings getSettings() {
Map<Object, Object> backingMap = new HashMap<Object, Object>();
- backingMap.put("realm.ldap.server", "ldap://localhost:389");
+ backingMap.put("realm.ldap.server", "ldap://localhost:" + ldapPort);
backingMap.put("realm.ldap.domain", "");
backingMap.put("realm.ldap.username", "cn=Directory Manager");
backingMap.put("realm.ldap.password", "password");