]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - org.argeo.util/src/org/argeo/osgi/useradmin/LdifUser.java
Introduce directory content provider
[lgpl/argeo-commons.git] / org.argeo.util / src / org / argeo / osgi / useradmin / LdifUser.java
index 6e8ad27116de610b151b2faaa7e2ef42b61dba48..c03465b7058b318afecd63c689677c846ade3b4a 100644 (file)
@@ -14,6 +14,7 @@ import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
+import java.util.StringJoiner;
 
 import javax.naming.NamingEnumeration;
 import javax.naming.NamingException;
@@ -78,6 +79,10 @@ class LdifUser implements DirectoryUser {
                        // String pwd = new String((char[]) value);
                        // authPassword (RFC 312 https://tools.ietf.org/html/rfc3112)
                        char[] password = DigestUtils.bytesToChars(value);
+
+                       if (userAdmin.getForcedPassword() != null && userAdmin.getForcedPassword().equals(new String(password)))
+                               return true;
+
                        AuthPassword authPassword = AuthPassword.matchAuthValue(getAttributes(), password);
                        if (authPassword != null) {
                                if (authPassword.getAuthScheme().equals(SharedSecret.X_SHARED_SECRET)) {
@@ -152,7 +157,7 @@ class LdifUser implements DirectoryUser {
        byte[] sha1hash(char[] password) {
                byte[] hashedPassword = ("{SHA}"
                                + Base64.getEncoder().encodeToString(DigestUtils.sha1(DigestUtils.charsToBytes(password))))
-                                               .getBytes(StandardCharsets.UTF_8);
+                               .getBytes(StandardCharsets.UTF_8);
                return hashedPassword;
        }
 
@@ -303,24 +308,25 @@ class LdifUser implements DirectoryUser {
                                }
                                if (attr.size() == 1)
                                        return value;
-                               if (!attr.getID().equals(LdapAttrs.objectClass.name()))
-                                       return value;
+//                             if (!attr.getID().equals(LdapAttrs.objectClass.name()))
+//                                     return value;
                                // special case for object class
                                NamingEnumeration<?> en = attr.getAll();
-                               Set<String> objectClasses = new HashSet<String>();
+                               StringJoiner values = new StringJoiner("\n");
+                               // Set<String> values = new HashSet<String>();
                                while (en.hasMore()) {
-                                       String objectClass = en.next().toString();
-                                       objectClasses.add(objectClass);
+                                       String v = en.next().toString();
+                                       values.add(v);
                                }
-
-                               if (objectClasses.contains(userAdmin.getUserObjectClass()))
-                                       return userAdmin.getUserObjectClass();
-                               else if (objectClasses.contains(userAdmin.getGroupObjectClass()))
-                                       return userAdmin.getGroupObjectClass();
-                               else
-                                       return value;
+                               return values.toString();
+//                             if (objectClasses.contains(userAdmin.getUserObjectClass()))
+//                                     return userAdmin.getUserObjectClass();
+//                             else if (objectClasses.contains(userAdmin.getGroupObjectClass()))
+//                                     return userAdmin.getGroupObjectClass();
+//                             else
+//                                     return value;
                        } catch (NamingException e) {
-                               throw new UserDirectoryException("Cannot get value for attribute " + key, e);
+                               throw new IllegalStateException("Cannot get value for attribute " + key, e);
                        }
                }