X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.security.core%2Fsrc%2Forg%2Fargeo%2Fosgi%2Fuseradmin%2FLdifAuthorization.java;h=e06c42e1ffb213c501ce23b2bc2edd90498b74c0;hb=ea63d7d123a50ff10657946ce3d928a57944621d;hp=4ae2434b4ceb24381d0eac5ec4063710bfe80e53;hpb=3439a3b6aba14618b06c72cf59b220e216135c96;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.security.core/src/org/argeo/osgi/useradmin/LdifAuthorization.java b/org.argeo.security.core/src/org/argeo/osgi/useradmin/LdifAuthorization.java index 4ae2434b4..e06c42e1f 100644 --- a/org.argeo.security.core/src/org/argeo/osgi/useradmin/LdifAuthorization.java +++ b/org.argeo.security.core/src/org/argeo/osgi/useradmin/LdifAuthorization.java @@ -1,54 +1,82 @@ package org.argeo.osgi.useradmin; -import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Dictionary; import java.util.List; import org.osgi.service.useradmin.Authorization; import org.osgi.service.useradmin.Role; +import org.osgi.service.useradmin.User; -public class LdifAuthorization implements Authorization { - private final LdifUser user; +/** Basic authorization. */ +class LdifAuthorization implements Authorization { + private final String name; + private final String displayName; + private final List allRoles; - public LdifAuthorization(LdifUser user) { - this.user = user; + @SuppressWarnings("unchecked") + public LdifAuthorization(User user, List allRoles) { + if (user == null) { + this.name = null; + this.displayName = "anonymous"; + } else { + this.name = user.getName(); + Dictionary props = user.getProperties(); + Object displayName = props.get(LdifName.displayName); + if (displayName == null) + displayName = props.get(LdifName.cn); + if (displayName == null) + displayName = props.get(LdifName.uid); + if (displayName == null) + displayName = user.getName(); + if (displayName == null) + throw new UserDirectoryException("Cannot set display name for " + + user); + this.displayName = displayName.toString(); + } + // roles + String[] roles = new String[allRoles.size()]; + for (int i = 0; i < allRoles.size(); i++) { + roles[i] = allRoles.get(i).getName(); + } + this.allRoles = Collections.unmodifiableList(Arrays.asList(roles)); } @Override public String getName() { - return user.getName(); + return name; } @Override public boolean hasRole(String name) { - for (Role role : getAllRoles()) { - if (role.getName().equals(name)) - return true; - } - return false; + return allRoles.contains(name); } @Override public String[] getRoles() { - List allRoles = getAllRoles(); - String[] res = new String[allRoles.size() + 1]; - res[0] = user.getName(); - for (int i = 0; i < allRoles.size(); i++) - res[i + 1] = allRoles.get(i).getName(); - return res; + return allRoles.toArray(new String[allRoles.size()]); } - List getAllRoles() { - List allRoles = new ArrayList(); - collectRoles(user, allRoles); - return allRoles; + @Override + public int hashCode() { + if (name == null) + return super.hashCode(); + return name.hashCode(); } - private void collectRoles(LdifUser user, List allRoles) { - for (LdifGroup group : user.directMemberOf) { - // TODO check for loops - allRoles.add(group); - collectRoles(group, allRoles); - } + @Override + public boolean equals(Object obj) { + if (!(obj instanceof Authorization)) + return false; + Authorization that = (Authorization) obj; + if (name == null) + return that.getName() == null; + return name.equals(that.getName()); } + @Override + public String toString() { + return displayName; + } }