X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;ds=sidebyside;f=org.argeo.enterprise%2Fsrc%2Forg%2Fargeo%2Fosgi%2Fuseradmin%2FAbstractUserDirectory.java;fp=org.argeo.enterprise%2Fsrc%2Forg%2Fargeo%2Fosgi%2Fuseradmin%2FAbstractUserDirectory.java;h=5e7cbc61cde708cdf832e96e1a4736874757a4ff;hb=db7aecc7170c024e0e39135cf6b8aa6ce7569ccb;hp=e8dd6f2a6974af43f0b5dda922256c847c27f8b7;hpb=145a1d5d22d3a321754bc0925f716cfe811571f9;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.enterprise/src/org/argeo/osgi/useradmin/AbstractUserDirectory.java b/org.argeo.enterprise/src/org/argeo/osgi/useradmin/AbstractUserDirectory.java index e8dd6f2a6..5e7cbc61c 100644 --- a/org.argeo.enterprise/src/org/argeo/osgi/useradmin/AbstractUserDirectory.java +++ b/org.argeo.enterprise/src/org/argeo/osgi/useradmin/AbstractUserDirectory.java @@ -40,6 +40,9 @@ import org.osgi.service.useradmin.UserAdmin; /** Base class for a {@link UserDirectory}. */ public abstract class AbstractUserDirectory implements UserAdmin, UserDirectory { + static final String SHARED_STATE_USERNAME = "javax.security.auth.login.name"; + static final String SHARED_STATE_PASSWORD = "javax.security.auth.login.password"; + private final static Log log = LogFactory.getLog(AbstractUserDirectory.class); private final Hashtable properties; @@ -104,6 +107,8 @@ public abstract class AbstractUserDirectory implements UserAdmin, UserDirectory protected abstract List doGetRoles(Filter f); + protected abstract AbstractUserDirectory scope(User user); + public void init() { } @@ -245,7 +250,17 @@ public abstract class AbstractUserDirectory implements UserAdmin, UserDirectory @Override public Authorization getAuthorization(User user) { - return new LdifAuthorization((DirectoryUser) user, getAllRoles((DirectoryUser) user)); + if (user == null || user instanceof DirectoryUser) { + return new LdifAuthorization(user, getAllRoles((DirectoryUser) user)); + } else { + // bind + AbstractUserDirectory scopedUserAdmin = scope(user); + DirectoryUser directoryUser = (DirectoryUser) scopedUserAdmin.getRole(user.getName()); + LdifAuthorization authorization = new LdifAuthorization(directoryUser, + scopedUserAdmin.getAllRoles(directoryUser)); + scopedUserAdmin.destroy(); + return authorization; + } } @Override @@ -412,6 +427,10 @@ public abstract class AbstractUserDirectory implements UserAdmin, UserDirectory return properties; } + public Dictionary cloneProperties() { + return new Hashtable<>(properties); + } + public void setExternalRoles(UserAdmin externalRoles) { this.externalRoles = externalRoles; }