]> git.argeo.org Git - lgpl/argeo-commons.git/blob - UserAdminUtils.java
83f3d0042d42bb17b1869864959774b4b2e500a5
[lgpl/argeo-commons.git] / UserAdminUtils.java
1 package org.argeo.cms.util;
2
3 import java.util.List;
4
5 import javax.naming.InvalidNameException;
6 import javax.naming.ldap.LdapName;
7 import javax.naming.ldap.Rdn;
8
9 import org.argeo.cms.CmsException;
10 import org.argeo.cms.auth.CurrentUser;
11 import org.argeo.eclipse.ui.EclipseUiUtils;
12 import org.argeo.naming.LdapAttrs;
13 import org.argeo.node.NodeConstants;
14 import org.osgi.service.useradmin.Role;
15 import org.osgi.service.useradmin.User;
16 import org.osgi.service.useradmin.UserAdmin;
17
18 /** Centralise common patterns to manage users with a {@link UserAdmin} */
19 public class UserAdminUtils {
20
21 // CURRENTUSER HELPERS
22 /** Checks if current user is the same as the passed one */
23 public static boolean isCurrentUser(User user) {
24 String userUsername = getProperty(user, LdapAttrs.DN);
25 LdapName userLdapName = getLdapName(userUsername);
26 LdapName selfUserName = getCurrentUserLdapName();
27 return userLdapName.equals(selfUserName);
28 }
29
30 /** Retrieves the current logged-in {@link User} */
31 public static User getCurrentUser(UserAdmin userAdmin) {
32 return (User) userAdmin.getRole(CurrentUser.getUsername());
33 }
34
35 /** Retrieves the current logged-in user {@link LdapName} */
36 public final static LdapName getCurrentUserLdapName() {
37 String name = CurrentUser.getUsername();
38 return getLdapName(name);
39 }
40
41 /** Retrieves the current logged-in user mail */
42 public static String getCurrentUserMail(UserAdmin userAdmin) {
43 String username = CurrentUser.getUsername();
44 return getUserMail(userAdmin, username);
45 }
46
47 /** Retrieves the current logged-in user common name */
48 public final static String getCommonName(User user) {
49 return getProperty(user, LdapAttrs.cn.name());
50 }
51
52 // OTHER USERS HELPERS
53 /**
54 * Retrieves the local id of a user or group, that is respectively the uid
55 * or cn of the passed dn with no {@link UserAdmin}
56 */
57 public static String getUserLocalId(String dn) {
58 LdapName ldapName = getLdapName(dn);
59 Rdn last = ldapName.getRdn(ldapName.size() - 1);
60 if (last.getType().toLowerCase().equals(LdapAttrs.uid.name())
61 || last.getType().toLowerCase().equals(LdapAttrs.cn.name()))
62 return (String) last.getValue();
63 else
64 throw new CmsException("Cannot retrieve user local id, non valid dn: " + dn);
65 }
66
67 /**
68 * Returns the local username if no user with this dn is found or if the
69 * found user has no defined display name
70 */
71 public static String getUserDisplayName(UserAdmin userAdmin, String dn) {
72 Role user = userAdmin.getRole(dn);
73 String dName;
74 if (user == null)
75 dName = getUserLocalId(dn);
76 else {
77 dName = getProperty(user, LdapAttrs.displayName.name());
78 if (EclipseUiUtils.isEmpty(dName))
79 dName = getProperty(user, LdapAttrs.cn.name());
80 if (EclipseUiUtils.isEmpty(dName))
81 dName = getUserLocalId(dn);
82 }
83 return dName;
84 }
85
86 /**
87 * Returns null if no user with this dn is found or if the found user has no
88 * defined mail
89 */
90 public static String getUserMail(UserAdmin userAdmin, String dn) {
91 Role user = userAdmin.getRole(dn);
92 if (user == null)
93 return null;
94 else
95 return getProperty(user, LdapAttrs.mail.name());
96 }
97
98 // LDAP NAMES HELPERS
99 /**
100 * Easily retrieves one of the {@link Role}'s property or an empty String if
101 * the requested property is not defined
102 */
103 public final static String getProperty(Role role, String key) {
104 Object obj = role.getProperties().get(key);
105 if (obj != null)
106 return (String) obj;
107 else
108 return "";
109 }
110
111 /**
112 * Simply retrieves a LDAP name from a {@link LdapAttrs.DN} with no
113 * exception
114 */
115 private static LdapName getLdapName(String dn) {
116 try {
117 return new LdapName(dn);
118 } catch (InvalidNameException e) {
119 throw new CmsException("Cannot parse LDAP name " + dn, e);
120 }
121 }
122
123 /** Simply retrieves a display name of the relevant domain */
124 public final static String getDomainName(User user) {
125 String dn = user.getName();
126 if (dn.endsWith(NodeConstants.ROLES_BASEDN))
127 return "System roles";
128 try {
129 LdapName name = new LdapName(dn);
130 List<Rdn> rdns = name.getRdns();
131 String dname = null;
132 int i = 0;
133 loop: while (i < rdns.size()) {
134 Rdn currrRdn = rdns.get(i);
135 if (!LdapAttrs.dc.name().equals(currrRdn.getType()))
136 break loop;
137 else {
138 String currVal = (String) currrRdn.getValue();
139 dname = dname == null ? currVal : currVal + "." + dname;
140 }
141 i++;
142 }
143 return dname;
144 } catch (InvalidNameException e) {
145 throw new CmsException("Unable to get domain name for " + dn, e);
146 }
147 }
148
149 // VARIOUS HELPERS
150 public final static String buildDefaultCn(String firstName, String lastName) {
151 return (firstName.trim() + " " + lastName.trim() + " ").trim();
152 }
153 }