]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/users/internal/UsersUtils.java
Enhance privilege display to ease JCR privilege management
[lgpl/argeo-commons.git] / org.argeo.eclipse.ui.workbench / src / org / argeo / eclipse / ui / workbench / users / internal / UsersUtils.java
1 package org.argeo.eclipse.ui.workbench.users.internal;
2
3 import java.security.AccessController;
4 import java.util.List;
5
6 import javax.naming.InvalidNameException;
7 import javax.naming.ldap.LdapName;
8 import javax.naming.ldap.Rdn;
9 import javax.security.auth.Subject;
10 import javax.security.auth.x500.X500Principal;
11
12 import org.argeo.ArgeoException;
13 import org.argeo.osgi.useradmin.LdifName;
14 import org.osgi.service.useradmin.Role;
15 import org.osgi.service.useradmin.User;
16
17 /** Utility methods to manage user concepts in the ui.workbench bundle */
18 public class UsersUtils {
19 // TODO this constant is defined in the CMS
20 public final static String ROLES_BASEDN = "ou=roles,ou=node";
21
22 public final static boolean isCurrentUser(User user) {
23 String userName = getProperty(user, LdifName.dn.name());
24 try {
25 LdapName selfUserName = getLdapName();
26 LdapName userLdapName = new LdapName(userName);
27 if (userLdapName.equals(selfUserName))
28 return true;
29 else
30 return false;
31 } catch (InvalidNameException e) {
32 throw new ArgeoException("User " + user + " has an unvalid dn: "
33 + userName, e);
34 }
35 }
36
37 public final static LdapName getLdapName() {
38 Subject subject = Subject.getSubject(AccessController.getContext());
39 String name = subject.getPrincipals(X500Principal.class).iterator()
40 .next().toString();
41 LdapName dn;
42 try {
43 dn = new LdapName(name);
44 } catch (InvalidNameException e) {
45 throw new ArgeoException("Invalid user dn " + name, e);
46 }
47 return dn;
48 }
49
50 public final static String getCommonName(User user) {
51 return getProperty(user, LdifName.cn.name());
52 }
53
54 /** Simply retrieves a display name of the relevant domain */
55 public final static String getDomainName(User user) {
56 String dn = (String) user.getProperties().get(LdifName.dn.name());
57 if (dn.endsWith(ROLES_BASEDN))
58 return "System roles";
59 try {
60 LdapName name;
61 name = new LdapName(dn);
62 List<Rdn> rdns = name.getRdns();
63 String dname = null;
64 int i = 0;
65 loop: while (i < rdns.size()) {
66 Rdn currrRdn = rdns.get(i);
67 if (!"dc".equals(currrRdn.getType()))
68 break loop;
69 else {
70 String currVal = (String) currrRdn.getValue();
71 dname = dname == null ? currVal : currVal + "." + dname;
72 }
73 i++;
74 }
75 return dname;
76 } catch (InvalidNameException e) {
77 throw new ArgeoException("Unable to get domain name for " + dn, e);
78 }
79 }
80
81 public final static String getProperty(Role role, String key) {
82 Object obj = role.getProperties().get(key);
83 if (obj != null)
84 return (String) obj;
85 else
86 return "";
87 }
88
89 /*
90 * INTERNAL METHODS: Below methods are meant to stay here and are not part
91 * of a potential generic backend to manage the useradmin
92 */
93 public final static boolean notNull(String string) {
94 if (string == null)
95 return false;
96 else
97 return !"".equals(string.trim());
98 }
99
100 }