1 package org.argeo.osgi.useradmin; 2 3 import java.net.URI; 4 import java.util.ArrayList; 5 import java.util.Dictionary; 6 import java.util.List; 7 8 import javax.naming.NameNotFoundException; 9 import javax.naming.NamingException; 10 import javax.naming.directory.Attributes; 11 import javax.naming.directory.BasicAttributes; 12 import javax.naming.ldap.LdapName; 13 14 import org.argeo.naming.LdapAttrs; 15 import org.osgi.framework.Filter; 16 import org.osgi.service.useradmin.User; 17 18 public class OsUserDirectory extends AbstractUserDirectory { 19 private final String osUsername = System.getProperty("user.name"); 20 private final LdapName osUserDn; 21 private final LdifUser osUser; 22 23 public OsUserDirectory(URI uriArg, Dictionary<String, ?> props) { 24 super(uriArg, props); 25 try { 26 osUserDn = new LdapName(LdapAttrs.uid.name() + "=" + osUsername + "," + getUserBase() + "," + getBaseDn()); 27 Attributes attributes = new BasicAttributes(); 28 attributes.put(LdapAttrs.uid.name(), osUsername); 29 osUser = new LdifUser(this, osUserDn, attributes); 30 } catch (NamingException e) { 31 throw new UserDirectoryException("Cannot create system user", e); 32 } 33 } 34 35 @Override 36 protected List<LdapName> getDirectGroups(LdapName dn) { 37 return new ArrayList<>(); 38 } 39 40 @Override 41 protected Boolean daoHasRole(LdapName dn) { 42 return osUserDn.equals(dn); 43 } 44 45 @Override 46 protected DirectoryUser daoGetRole(LdapName key) throws NameNotFoundException { 47 if (osUserDn.equals(key)) 48 return osUser; 49 else 50 throw new NameNotFoundException("Not an OS role"); 51 } 52 53 @Override 54 protected List<DirectoryUser> doGetRoles(Filter f) { 55 List<DirectoryUser> res = new ArrayList<>(); 56 if (f==null || f.match(osUser.getProperties())) 57 res.add(osUser); 58 return res; 59 } 60 61 @Override 62 protected AbstractUserDirectory scope(User user) { 63 throw new UnsupportedOperationException(); 64 } 65 66 }