]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - org.argeo.cms.ui.workbench/src/org/argeo/eclipse/ui/workbench/internal/users/UsersUtils.java
Merge org.argeo.eclipse.ui.workbench in org.argeo.cms.ui.workbench
[lgpl/argeo-commons.git] / org.argeo.cms.ui.workbench / src / org / argeo / eclipse / ui / workbench / internal / users / UsersUtils.java
diff --git a/org.argeo.cms.ui.workbench/src/org/argeo/eclipse/ui/workbench/internal/users/UsersUtils.java b/org.argeo.cms.ui.workbench/src/org/argeo/eclipse/ui/workbench/internal/users/UsersUtils.java
new file mode 100644 (file)
index 0000000..397ecde
--- /dev/null
@@ -0,0 +1,100 @@
+package org.argeo.eclipse.ui.workbench.internal.users;
+
+import java.security.AccessController;
+import java.util.List;
+
+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.eclipse.ui.EclipseUiException;
+import org.argeo.osgi.useradmin.LdifName;
+import org.osgi.service.useradmin.Role;
+import org.osgi.service.useradmin.User;
+
+/** Utility methods to manage user concepts in the ui.workbench bundle */
+public class UsersUtils {
+       // TODO this constant is defined in the CMS
+       public final static String ROLES_BASEDN = "ou=roles,ou=node";
+
+       public final static boolean isCurrentUser(User user) {
+               String userName = getProperty(user, LdifName.dn.name());
+               try {
+                       LdapName selfUserName = getLdapName();
+                       LdapName userLdapName = new LdapName(userName);
+                       if (userLdapName.equals(selfUserName))
+                               return true;
+                       else
+                               return false;
+               } catch (InvalidNameException e) {
+                       throw new EclipseUiException("User " + user + " has an unvalid dn: "
+                                       + userName, e);
+               }
+       }
+
+       public final static LdapName getLdapName() {
+               Subject subject = Subject.getSubject(AccessController.getContext());
+               String name = subject.getPrincipals(X500Principal.class).iterator()
+                               .next().toString();
+               LdapName dn;
+               try {
+                       dn = new LdapName(name);
+               } catch (InvalidNameException e) {
+                       throw new EclipseUiException("Invalid user dn " + name, e);
+               }
+               return dn;
+       }
+
+       public final static String getCommonName(User user) {
+               return getProperty(user, LdifName.cn.name());
+       }
+
+       /** Simply retrieves a display name of the relevant domain */
+       public final static String getDomainName(User user) {
+               String dn = (String) user.getProperties().get(LdifName.dn.name());
+               if (dn.endsWith(ROLES_BASEDN))
+                       return "System roles";
+               try {
+                       LdapName name;
+                       name = new LdapName(dn);
+                       List<Rdn> rdns = name.getRdns();
+                       String dname = null;
+                       int i = 0;
+                       loop: while (i < rdns.size()) {
+                               Rdn currrRdn = rdns.get(i);
+                               if (!"dc".equals(currrRdn.getType()))
+                                       break loop;
+                               else {
+                                       String currVal = (String) currrRdn.getValue();
+                                       dname = dname == null ? currVal : currVal + "." + dname;
+                               }
+                               i++;
+                       }
+                       return dname;
+               } catch (InvalidNameException e) {
+                       throw new EclipseUiException("Unable to get domain name for " + dn, e);
+               }
+       }
+
+       public final static String getProperty(Role role, String key) {
+               Object obj = role.getProperties().get(key);
+               if (obj != null)
+                       return (String) obj;
+               else
+                       return "";
+       }
+
+       /*
+        * INTERNAL METHODS: Below methods are meant to stay here and are not part
+        * of a potential generic backend to manage the useradmin
+        */
+       public final static boolean notNull(String string) {
+               if (string == null)
+                       return false;
+               else
+                       return !"".equals(string.trim());
+       }
+
+}
\ No newline at end of file