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=8260f4470f514ea347ca53f5b4dfc632c4a4de66;hp=8f167c3683c58f7e7537194f50b14881cd6aaae9;hpb=93a457cf047cebb0170abd0f37a9b4291a2ae3e9;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 8f167c368..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,64 +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() { - if (user == null) - return null; - 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(); - if (user != null) - allRoles.add(0, user); - String[] res = new String[allRoles.size()]; - for (int i = 0; i < allRoles.size(); i++) - res[i] = allRoles.get(i).getName(); - return res; + return allRoles.toArray(new String[allRoles.size()]); } - List getAllRoles() { - List allRoles = new ArrayList(); - if (user != null) - collectRoles(user, allRoles); - else - collectAnonymousRoles(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()); } - private void collectAnonymousRoles(List allRoles) { - // TODO gather anonymous roles + @Override + public String toString() { + return displayName; } - }