X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=security%2Fruntime%2Forg.argeo.security.core%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fsecurity%2Fldap%2FRoleDaoLdap.java;fp=security%2Fruntime%2Forg.argeo.security.core%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fsecurity%2Fldap%2FRoleDaoLdap.java;h=7a40a3faa7fe9cfe6afb3c6f28118d7a429df9f5;hb=727a852dcd2a6e80b11ae71ca37f50d202baae5c;hp=0000000000000000000000000000000000000000;hpb=6432a8e5a33929780a49a7265c1e9beb856ea050;p=lgpl%2Fargeo-commons.git diff --git a/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/ldap/RoleDaoLdap.java b/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/ldap/RoleDaoLdap.java new file mode 100644 index 000000000..7a40a3faa --- /dev/null +++ b/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/ldap/RoleDaoLdap.java @@ -0,0 +1,62 @@ +package org.argeo.security.ldap; + +import java.util.List; + +import javax.naming.Name; + +import org.argeo.security.dao.RoleDao; +import org.springframework.ldap.core.ContextMapper; +import org.springframework.ldap.core.ContextSource; +import org.springframework.ldap.core.DirContextAdapter; +import org.springframework.ldap.core.DistinguishedName; +import org.springframework.ldap.core.LdapTemplate; + +public class RoleDaoLdap implements RoleDao { + + private ArgeoLdapAuthoritiesPopulator authoritiesPopulator; + private final LdapTemplate ldapTemplate; + + public RoleDaoLdap(ContextSource contextSource) { + ldapTemplate = new LdapTemplate(contextSource); + } + + public void create(String role) { + Name dn = buildDn(role); + DirContextAdapter context = new DirContextAdapter(); + context.setAttributeValues("objectClass", new String[] { "top", + "groupOfUniqueNames" }); + context.setAttributeValue("cn", role); + ldapTemplate.bind(dn, context, null); + } + + @SuppressWarnings("unchecked") + public List listEditableRoles() { + return (List) ldapTemplate.listBindings(authoritiesPopulator + .getGroupSearchBase(), new ContextMapper() { + public Object mapFromContext(Object ctxArg) { + String groupName = ((DirContextAdapter) ctxArg) + .getStringAttribute(authoritiesPopulator + .getGroupRoleAttribute()); + String roleName = authoritiesPopulator + .convertGroupToRole(groupName); + return roleName; + } + }); + } + + public void delete(String role) { + // TODO Auto-generated method stub + + } + + public void setAuthoritiesPopulator( + ArgeoLdapAuthoritiesPopulator ldapAuthoritiesPopulator) { + this.authoritiesPopulator = ldapAuthoritiesPopulator; + } + + protected Name buildDn(String name) { + return new DistinguishedName("cn=" + name + "," + + authoritiesPopulator.getGroupSearchBase()); + } + +}