]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - org.argeo.cms.ui/src/org/argeo/cms/util/useradmin/UserAdminUtils.java
Continue finalising security. Fix issues with login in web.
[lgpl/argeo-commons.git] / org.argeo.cms.ui / src / org / argeo / cms / util / useradmin / UserAdminUtils.java
index 9ccc3057f3a355d66d369cdd06f3bd5633f2567f..fdd61d69dd461f7a6af2100305a145d12fb8d005 100644 (file)
@@ -1,23 +1,18 @@
 package org.argeo.cms.util.useradmin;
 
-import java.security.AccessController;
 import java.util.List;
 import java.util.Set;
 
 import javax.naming.InvalidNameException;
 import javax.naming.ldap.LdapName;
 import javax.naming.ldap.Rdn;
-import javax.security.auth.Subject;
-import javax.security.auth.x500.X500Principal;
 
 import org.argeo.cms.CmsException;
-import org.argeo.cms.CmsView;
-import org.argeo.cms.auth.AuthConstants;
 import org.argeo.cms.auth.CurrentUser;
-import org.argeo.cms.util.CmsUtils;
 import org.argeo.eclipse.ui.EclipseUiUtils;
 import org.argeo.jcr.JcrUtils;
-import org.argeo.osgi.useradmin.LdifName;
+import org.argeo.naming.LdapAttrs;
+import org.argeo.node.NodeConstants;
 import org.osgi.service.useradmin.Group;
 import org.osgi.service.useradmin.Role;
 import org.osgi.service.useradmin.User;
@@ -36,9 +31,9 @@ public class UserAdminUtils {
        public final static String getUsername(User user) {
                String username = null;
                if (user instanceof Group)
-                       username = getProperty(user, LdifName.cn.name());
+                       username = getProperty(user, LdapAttrs.cn.name());
                else
-                       username = getProperty(user, LdifName.uid.name());
+                       username = getProperty(user, LdapAttrs.uid.name());
                return username;
        }
 
@@ -73,13 +68,13 @@ public class UserAdminUtils {
 
        /** Simply retrieves the current logged-in user display name. */
        public static String getCurrentUserDisplayName(UserAdmin userAdmin) {
-               String username = getCurrentUsername();
+               String username = CurrentUser.getUsername();
                return getUserDisplayName(userAdmin, username);
        }
 
        /** Simply retrieves the current logged-in user display name. */
        public static String getCurrentUserMail(UserAdmin userAdmin) {
-               String username = getCurrentUsername();
+               String username = CurrentUser.getUsername();
                return getUserMail(userAdmin, username);
        }
 
@@ -97,7 +92,7 @@ public class UserAdminUtils {
 
        /** Simply checks if current user is the same as the passed one */
        public static boolean isCurrentUser(User user) {
-               String userName = getProperty(user, LdifName.dn.name());
+               String userName = getProperty(user, LdapAttrs.DN);
                try {
                        LdapName selfUserName = getCurrentUserLdapName();
                        LdapName userLdapName = new LdapName(userName);
@@ -106,37 +101,38 @@ public class UserAdminUtils {
                        else
                                return false;
                } catch (InvalidNameException e) {
-                       throw new CmsException("User " + user + " has an unvalid dn: "
-                                       + userName, e);
+                       throw new CmsException("User " + user + " has an unvalid dn: " + userName, e);
                }
        }
 
        public final static LdapName getCurrentUserLdapName() {
-               String name = getCurrentUsername();
+               String name = CurrentUser.getUsername();
                return getLdapName(name);
        }
 
-       /** Simply retrieves username for current user, generally a LDAP dn */
-       public static String getCurrentUsername() {
-               Subject subject = currentSubject();
-               String name = subject.getPrincipals(X500Principal.class).iterator()
-                               .next().toString();
-               return name;
-       }
-
        /**
-        * Fork of the {@link CurrentUser#currentSubject} method that is private.
-        * TODO Enhance and factorize
+        * Simply retrieves username for current user, generally a LDAP dn
+        * 
+        * @deprecated Use {@link CurrentUser#getUsername()}
         */
-       private static Subject currentSubject() {
-               CmsView cmsView = CmsUtils.getCmsView();
-               if (cmsView != null)
-                       return cmsView.getSubject();
-               Subject subject = Subject.getSubject(AccessController.getContext());
-               if (subject != null)
-                       return subject;
-               throw new RuntimeException("Cannot find related subject");
-       }
+       @Deprecated
+       public static String getCurrentUsername() {
+               return CurrentUser.getUsername();
+       }
+
+       // /**
+       // * Fork of the {@link CurrentUser#currentSubject} method that is private.
+       // * TODO Enhance and factorize
+       // */
+       // private static Subject currentSubject() {
+       // CmsView cmsView = CmsUtils.getCmsView();
+       // if (cmsView != null)
+       // return cmsView.getSubject();
+       // Subject subject = Subject.getSubject(AccessController.getContext());
+       // if (subject != null)
+       // return subject;
+       // throw new RuntimeException("Cannot find related subject");
+       // }
 
        // HOME MANAGEMENT
        /**
@@ -144,7 +140,7 @@ public class UserAdminUtils {
         * the base home node
         */
        public static String getCurrentUserHomeRelPath() {
-               return getHomeRelPath(getCurrentUsername());
+               return getHomeRelPath(CurrentUser.getUsername());
        }
 
        /**
@@ -162,12 +158,11 @@ public class UserAdminUtils {
        public static String getUserUid(String dn) {
                LdapName ldapName = getLdapName(dn);
                Rdn last = ldapName.getRdn(ldapName.size() - 1);
-               if (last.getType().toLowerCase().equals(LdifName.uid.name())
-                               || last.getType().toLowerCase().equals(LdifName.cn.name()))
+               if (last.getType().toLowerCase().equals(LdapAttrs.uid.name())
+                               || last.getType().toLowerCase().equals(LdapAttrs.cn.name()))
                        return (String) last.getValue();
                else
-                       throw new CmsException("Cannot retrieve user uid, "
-                                       + "non valid dn: " + dn);
+                       throw new CmsException("Cannot retrieve user uid, " + "non valid dn: " + dn);
        }
 
        /**
@@ -178,9 +173,9 @@ public class UserAdminUtils {
                Role user = getRole(userAdmin, getLdapName(dn));
                if (user == null)
                        return getUserUid(dn);
-               String displayName = getProperty(user, LdifName.displayName.name());
+               String displayName = getProperty(user, LdapAttrs.displayName.name());
                if (EclipseUiUtils.isEmpty(displayName))
-                       displayName = getProperty(user, LdifName.cn.name());
+                       displayName = getProperty(user, LdapAttrs.cn.name());
                if (EclipseUiUtils.isEmpty(displayName))
                        return getUserUid(dn);
                else
@@ -196,7 +191,7 @@ public class UserAdminUtils {
                if (user == null)
                        return null;
                else
-                       return getProperty(user, LdifName.mail.name());
+                       return getProperty(user, LdapAttrs.mail.name());
        }
 
        // VARIOUS UI HELPERS
@@ -207,7 +202,7 @@ public class UserAdminUtils {
        /** Simply retrieves a display name of the relevant domain */
        public final static String getDomainName(User user) {
                String dn = user.getName();
-               if (dn.endsWith(AuthConstants.ROLES_BASEDN))
+               if (dn.endsWith(NodeConstants.ROLES_BASEDN))
                        return "System roles";
                try {
                        LdapName name = new LdapName(dn);
@@ -216,7 +211,7 @@ public class UserAdminUtils {
                        int i = 0;
                        loop: while (i < rdns.size()) {
                                Rdn currrRdn = rdns.get(i);
-                               if (!LdifName.dc.name().equals(currrRdn.getType()))
+                               if (!LdapAttrs.dc.name().equals(currrRdn.getType()))
                                        break loop;
                                else {
                                        String currVal = (String) currrRdn.getValue();
@@ -239,4 +234,4 @@ public class UserAdminUtils {
                        throw new CmsException("Cannot parse LDAP name " + dn, e);
                }
        }
-}
\ No newline at end of file
+}