]>
git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.cms.ui/src/org/argeo/cms/util/UserAdminUtils.java
2aa23b2d0023af4c25a4d687ca1830bd808bee95
1 package org
.argeo
.cms
.util
;
5 import javax
.naming
.InvalidNameException
;
6 import javax
.naming
.ldap
.LdapName
;
7 import javax
.naming
.ldap
.Rdn
;
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
;
18 /** Centralise common patterns to manage users with a {@link UserAdmin} */
19 public class UserAdminUtils
{
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
);
30 /** Retrieves the current logged-in {@link User} */
31 public static User
getCurrentUser(UserAdmin userAdmin
) {
32 return (User
) userAdmin
.getRole(CurrentUser
.getUsername());
35 /** Retrieves the current logged-in user {@link LdapName} */
36 public final static LdapName
getCurrentUserLdapName() {
37 String name
= CurrentUser
.getUsername();
38 return getLdapName(name
);
41 /** Retrieves the current logged-in user display name. */
42 public static String
getCurrentUserMail(UserAdmin userAdmin
) {
43 String username
= CurrentUser
.getUsername();
44 return getUserMail(userAdmin
, username
);
47 // OTHER USERS HELPERS
49 * Retrieves the local id of a user or group, that is respectively the uid
50 * or cn of the passed dn with no {@link UserAdmin}
52 public static String
getUserLocalId(String dn
) {
53 LdapName ldapName
= getLdapName(dn
);
54 Rdn last
= ldapName
.getRdn(ldapName
.size() - 1);
55 if (last
.getType().toLowerCase().equals(LdapAttrs
.uid
.name())
56 || last
.getType().toLowerCase().equals(LdapAttrs
.cn
.name()))
57 return (String
) last
.getValue();
59 throw new CmsException("Cannot retrieve user local id, non valid dn: " + dn
);
63 * Returns the local username if no user with this dn is found or if the
64 * found user has no defined display name
66 public static String
getUserDisplayName(UserAdmin userAdmin
, String dn
) {
67 Role user
= userAdmin
.getRole(dn
);
70 dName
= getUserLocalId(dn
);
72 dName
= getProperty(user
, LdapAttrs
.displayName
.name());
73 if (EclipseUiUtils
.isEmpty(dName
))
74 dName
= getProperty(user
, LdapAttrs
.cn
.name());
75 if (EclipseUiUtils
.isEmpty(dName
))
76 dName
= getUserLocalId(dn
);
82 * Returns null if no user with this dn is found or if the found user has no
85 public static String
getUserMail(UserAdmin userAdmin
, String dn
) {
86 Role user
= userAdmin
.getRole(dn
);
90 return getProperty(user
, LdapAttrs
.mail
.name());
95 * Easily retrieves one of the {@link Role}'s property or an empty String if
96 * the requested property is not defined
98 public final static String
getProperty(Role role
, String key
) {
99 Object obj
= role
.getProperties().get(key
);
107 * Simply retrieves a LDAP name from a {@link LdapAttrs.DN} with no
110 private static LdapName
getLdapName(String dn
) {
112 return new LdapName(dn
);
113 } catch (InvalidNameException e
) {
114 throw new CmsException("Cannot parse LDAP name " + dn
, e
);
118 /** Simply retrieves a display name of the relevant domain */
119 public final static String
getDomainName(User user
) {
120 String dn
= user
.getName();
121 if (dn
.endsWith(NodeConstants
.ROLES_BASEDN
))
122 return "System roles";
124 LdapName name
= new LdapName(dn
);
125 List
<Rdn
> rdns
= name
.getRdns();
128 loop
: while (i
< rdns
.size()) {
129 Rdn currrRdn
= rdns
.get(i
);
130 if (!LdapAttrs
.dc
.name().equals(currrRdn
.getType()))
133 String currVal
= (String
) currrRdn
.getValue();
134 dname
= dname
== null ? currVal
: currVal
+ "." + dname
;
139 } catch (InvalidNameException e
) {
140 throw new CmsException("Unable to get domain name for " + dn
, e
);
145 public final static String
buildDefaultCn(String firstName
, String lastName
) {
146 return (firstName
.trim() + " " + lastName
.trim() + " ").trim();