package org.argeo.osgi.useradmin; import java.net.URI; import java.util.ArrayList; import java.util.Dictionary; import java.util.List; import javax.naming.NameNotFoundException; import javax.naming.NamingException; import javax.naming.directory.Attributes; import javax.naming.directory.BasicAttributes; import javax.naming.ldap.LdapName; import org.argeo.naming.LdapAttrs; import org.osgi.framework.Filter; import org.osgi.service.useradmin.User; public class OsUserDirectory extends AbstractUserDirectory { private final String osUsername = System.getProperty("user.name"); private final LdapName osUserDn; private final LdifUser osUser; public OsUserDirectory(URI uriArg, Dictionary props) { super(uriArg, props, false); try { osUserDn = new LdapName(LdapAttrs.uid.name() + "=" + osUsername + "," + getUserBase() + "," + getBaseDn()); Attributes attributes = new BasicAttributes(); attributes.put(LdapAttrs.uid.name(), osUsername); osUser = new LdifUser(this, osUserDn, attributes); } catch (NamingException e) { throw new UserDirectoryException("Cannot create system user", e); } } @Override protected List getDirectGroups(LdapName dn) { return new ArrayList<>(); } @Override protected Boolean daoHasRole(LdapName dn) { return osUserDn.equals(dn); } @Override protected DirectoryUser daoGetRole(LdapName key) throws NameNotFoundException { if (osUserDn.equals(key)) return osUser; else throw new NameNotFoundException("Not an OS role"); } @Override protected List doGetRoles(Filter f) { List res = new ArrayList<>(); if (f == null || f.match(osUser.getProperties())) res.add(osUser); return res; } @Override protected AbstractUserDirectory scope(User user) { throw new UnsupportedOperationException(); } }