Search in sources :

Example 1 with LdapContextFactory

use of org.apache.shiro.realm.ldap.LdapContextFactory in project zeppelin by apache.

the class LdapRealmTest method testRolesFor.

@Test
public void testRolesFor() throws NamingException {
    LdapRealm realm = new LdapRealm();
    realm.setGroupSearchBase("cn=groups,dc=apache");
    realm.setGroupObjectClass("posixGroup");
    realm.setMemberAttributeValueTemplate("cn={0},ou=people,dc=apache");
    HashMap<String, String> rolesByGroups = new HashMap<>();
    rolesByGroups.put("group-three", "zeppelin-role");
    realm.setRolesByGroup(rolesByGroups);
    LdapContextFactory ldapContextFactory = mock(LdapContextFactory.class);
    LdapContext ldapCtx = mock(LdapContext.class);
    Session session = mock(Session.class);
    // expected search results
    BasicAttributes group1 = new BasicAttributes();
    group1.put(realm.getGroupIdAttribute(), "group-one");
    group1.put(realm.getMemberAttribute(), "principal");
    // user doesn't belong to this group
    BasicAttributes group2 = new BasicAttributes();
    group2.put(realm.getGroupIdAttribute(), "group-two");
    group2.put(realm.getMemberAttribute(), "someoneelse");
    // mapped to a different Zeppelin role
    BasicAttributes group3 = new BasicAttributes();
    group3.put(realm.getGroupIdAttribute(), "group-three");
    group3.put(realm.getMemberAttribute(), "principal");
    NamingEnumeration<SearchResult> results = enumerationOf(group1, group2, group3);
    when(ldapCtx.search(any(String.class), any(String.class), any(SearchControls.class))).thenReturn(results);
    Set<String> roles = realm.rolesFor(new SimplePrincipalCollection("principal", "ldapRealm"), "principal", ldapCtx, ldapContextFactory, session);
    verify(ldapCtx).search("cn=groups,dc=apache", "(objectclass=posixGroup)", realm.getGroupSearchControls());
    assertEquals(new HashSet(Arrays.asList("group-one", "zeppelin-role")), roles);
}
Also used : BasicAttributes(javax.naming.directory.BasicAttributes) HashMap(java.util.HashMap) SimplePrincipalCollection(org.apache.shiro.subject.SimplePrincipalCollection) SearchResult(javax.naming.directory.SearchResult) LdapContextFactory(org.apache.shiro.realm.ldap.LdapContextFactory) SearchControls(javax.naming.directory.SearchControls) LdapContext(javax.naming.ldap.LdapContext) Session(org.apache.shiro.session.Session) HashSet(java.util.HashSet) Test(org.junit.Test)

Aggregations

HashMap (java.util.HashMap)1 HashSet (java.util.HashSet)1 BasicAttributes (javax.naming.directory.BasicAttributes)1 SearchControls (javax.naming.directory.SearchControls)1 SearchResult (javax.naming.directory.SearchResult)1 LdapContext (javax.naming.ldap.LdapContext)1 LdapContextFactory (org.apache.shiro.realm.ldap.LdapContextFactory)1 Session (org.apache.shiro.session.Session)1 SimplePrincipalCollection (org.apache.shiro.subject.SimplePrincipalCollection)1 Test (org.junit.Test)1