package org.dcache.auth; import com.google.common.base.Joiner; import java.util.Set; import java.util.TreeSet; public class UserAuthRecord extends UserAuthBase { private static final long serialVersionUID = 2212212275053022221L; public Set<String> principals; public UserAuthRecord(String user, String DN, String fqan, boolean readOnly, int priority, int uid, int[] GIDs, String home, String root, String fsroot, Set<String> principals) { super(user, DN, fqan, readOnly, priority, uid, GIDs, home, root, fsroot); this.principals = new TreeSet<>(principals); } public UserAuthRecord(String user, String DN, String fqan, boolean readOnly, int priority, int uid, int gid, String home, String root, String fsroot, Set<String> principals) { super(user, DN, fqan, readOnly, priority, uid, gid, home, root, fsroot); this.principals = new TreeSet<>(principals); } public UserAuthRecord(String user, boolean readOnly, int uid, int[] GIDs, String home, String root, String fsroot, Set<String> principals) { super(user, readOnly, uid, GIDs, home, root, fsroot); this.principals = new TreeSet<>(principals); } public UserAuthRecord(String user, boolean readOnly, int uid, int gid, String home, String root, String fsroot, Set<String> principals) { super(user, readOnly, uid, gid, home, root, fsroot); this.principals = new TreeSet<>(principals); } /** * nonprivate default constructor to satisfy the JPA requirements */ public UserAuthRecord() { } public void appendToStringBuffer(StringBuffer sb) { sb.append(Username); if(ReadOnly) { sb.append(" read-only"); } else { sb.append(" read-write"); } sb.append( ' ').append( UID).append( ' '); sb.append(Joiner.on(",").skipNulls().join(GIDs.iterator())).append(' '); sb.append( Home ).append(' '); sb.append( Root ).append(' '); sb.append( FsRoot ).append('\n'); if(principals != null) { for(String principal : principals) { sb.append(" ").append(principal).append('\n'); } } } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append(Username); sb.append(' ').append( DN); sb.append(' ').append( getFqan()); if(ReadOnly) { sb.append(" read-only"); } else { sb.append(" read-write"); } sb.append( ' ').append( UID).append( ' '); sb.append( GIDs ).append(' '); sb.append( Home ).append(' '); sb.append( Root ).append(' '); sb.append( FsRoot ).append('\n'); if(principals != null) { for(String principal : principals) { sb.append(" ").append(principal).append('\n'); } } return sb.toString(); } public String toDetailedString() { StringBuilder sb = new StringBuilder(" User Authentication Record for "); sb.append(Username).append(" :\n"); sb.append(" DN = ").append(DN).append('\n'); sb.append(" FQAN = ").append(getFqan()).append('\n'); sb.append(" read-only = ").append(readOnlyStr()) .append('\n'); sb.append(" UID = ").append(UID).append('\n'); sb.append(" GIDs = "); sb.append(Joiner.on(",").skipNulls().join(GIDs.iterator())).append('\n'); sb.append(" Home = ").append(Home).append('\n'); sb.append(" Root = ").append(Root).append('\n'); sb.append(" FsRoot = ").append(FsRoot).append('\n'); if(principals != null) { sb.append(" Secure Ids accepted by this user :\n"); for(String principal : principals) { sb.append(" SecureId = \"").append(principal).append("\"\n"); } } return sb.toString(); } @Override public boolean isAnonymous() { return false; } @Override public boolean isWeak() { return false; } public boolean hasSecureIdentity(String p) { if(principals!=null) { return principals.contains(p); } return false; } public boolean isValid() { return Username != null; } public void addSecureIdentity(String id) { principals.add(id); } public void addSecureIdentities(Set<String> ids) { principals.addAll(ids); } public void removeSecureIdentities(Set<String> ids) { principals.removeAll(ids); } @Override public boolean equals(Object obj) { if (obj == this) { return true; } if (obj == null || !(obj instanceof UserAuthRecord)) { return false; } UserAuthRecord r = (UserAuthRecord) obj; return Username.equals(r.Username) && ReadOnly == r.ReadOnly && UID == r.UID && GIDs.equals(r.GIDs) && Home.equals(r.Home) && Root.equals(r.Root) && FsRoot.equals(r.FsRoot) && this.getFqan().equals(r.getFqan()); } }