/** * {@inheritDoc} */ @Override public List<String> findGroupsForUser(String userDn) throws NamingException { String userName = LdapUtils.extractUserName(userDn); return execute(groupBases, queries.findGroupsForUser(userName, userDn)).getAllLdapNames(); }
/** * {@inheritDoc} */ @Override public boolean isUserMemberOfGroup(String user, String groupDn) throws NamingException { String userId = LdapUtils.extractUserName(user); return execute(userBases, queries.isUserMemberOfGroup(userId, groupDn)).hasSingleResult(); }
/** * {@inheritDoc} */ @Override public String findGroupDn(String group) throws NamingException { return execute(groupBases, queries.findGroupDnById(group)).getSingleLdapName(); }
/** * Returns a query for finding user DN based on user unique name. * @param userName user unique name (uid or sAMAccountName) * @return an instance of {@link Query} */ public Query findUserDnByName(String userName) { return Query.builder() .filter("(&(|<classes:{ class |(objectClass=<class>)}>)" + "(|(uid=<userName>)(sAMAccountName=<userName>)))") .map("classes", USER_OBJECT_CLASSES) .map("userName", userName) .limit(2) .build(); }
@Test public void testDirectUserMembershipGroupFilterWithDNCredentials() throws Exception { testCase = defaultBuilder() .userDNPatterns("sAMAccountName=%s,ou=Engineering,dc=ad,dc=example,dc=com") .groupDNPatterns("cn=%s,ou=Teams,dc=ad,dc=example,dc=com") .groupFilters(GROUP_TEAM1_NAME) .guidKey("sAMAccountName") .userMembershipKey("memberOf") .build(); testCase.assertAuthenticatePasses(ENGINEER_1.credentialsWithDn()); testCase.assertAuthenticateFails(MANAGER_1.credentialsWithDn()); }
@Test(expected = NamingException.class) public void testGetSingleLdapNameNoRecords() throws NamingException { MockResultCollection resultCollection = MockResultCollection.create() .addEmptySearchResult(); handler = new SearchResultHandler(resultCollection); try { handler.getSingleLdapName(); } finally { assertAllNamingEnumerationsClosed(resultCollection); } }
@Test public void testHasSingleResult() throws NamingException { MockResultCollection resultCollection = MockResultCollection.create() .addSearchResultWithDns("1"); handler = new SearchResultHandler(resultCollection); assertTrue(handler.hasSingleResult()); assertAllNamingEnumerationsClosed(resultCollection); }
@Test public void testUserBindPositiveWithShortname() { testCase = defaultBuilder() .userDNPatterns("uid=%s,ou=People,dc=example,dc=com") .groupDNPatterns("uid=%s,ou=Groups,dc=example,dc=com") .build(); testCase.assertAuthenticatePasses(USER1.credentialsWithId()); testCase.assertAuthenticatePasses(USER2.credentialsWithId()); }
/** * Builds an instance of {@link Query}. * @return configured directory service query */ public Query build() { validate(); String filter = createFilter(); updateControls(); return new Query(filter, controls); } }
private void applyFilter(DirSearch client, String user) throws AuthenticationException { if (filter != null) { if (LdapUtils.hasDomain(user)) { filter.apply(client, LdapUtils.extractUserName(user)); } else { filter.apply(client, user); } } } }
/** * {@inheritDoc} */ @Override public List<String> executeCustomQuery(String query) throws NamingException { return execute(Collections.singletonList(baseDn), queries.customQuery(query)) .getAllLdapNamesAndAttributes(); }
@Test public void testUserBindPositiveWithShortnameOldConfig() { testCase = defaultBuilder() .baseDN("ou=People,dc=example,dc=com") .build(); testCase.assertAuthenticatePasses(USER1.credentialsWithId()); testCase.assertAuthenticatePasses(USER2.credentialsWithId()); }
public void assertAuthenticateFailsUsingWrongPassword(Credentials credentials) { assertAuthenticateFails(credentials.getUser(), "not" + credentials.getPassword()); }
public static Attributes mockAttributes(String name, String value) throws NamingException { return mockAttributes(new NameValues(name, value)); }
@Override public void apply(DirSearch client, String user) throws AuthenticationException { for (Filter filter : chainedFilters) { filter.apply(client, user); } } }
private LdapAuthenticationTestCase.Builder defaultBuilder() { return LdapAuthenticationTestCase.builder().ldapServer(ldapServer); }
/** * Creates Query Builder. * @return query builder. */ public static QueryBuilder builder() { return new QueryBuilder(); }
/** * Returns a query for finding Group DN based on group unique ID. * @param groupId group unique identifier * @return an instance of {@link Query} */ public Query findGroupDnById(String groupId) { return Query.builder() .filter("(&(objectClass=<groupClassAttr>)(<guidAttr>=<groupID>))") .map("guidAttr", guidAttr) .map("groupClassAttr", groupClassAttr) .map("groupID", groupId) .limit(2) .build(); }
public void assertAuthenticateFails(Credentials credentials) { assertAuthenticateFails(credentials.getUser(), credentials.getPassword()); }
public static Attributes mockAttributes(String name1, String value1, String name2, String value2) throws NamingException { if (name1.equals(name2)) { return mockAttributes(new NameValues(name1, value1, value2)); } else { return mockAttributes(new NameValues(name1, value1), new NameValues(name2, value2)); } }