package org.dcache.auth; import com.google.common.collect.Collections2; import javax.security.auth.Subject; import java.security.Principal; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Objects; /** * The class is a Wrapper for the Subject, used for StringTemplate * to fetch particular subject's attributes that could be specified * in billing.properties or dcache.conf and will be printed in billing files. */ public class SubjectWrapper { private final Subject _subject; public SubjectWrapper(Subject subject) { _subject = subject; } public Long getUid() { return Subjects.isNobody(_subject) ? null : Subjects.getUid(_subject); } public Long getPrimaryGid() { return Subjects.isNobody(_subject) ? null : Subjects.getPrimaryGid(_subject); } public long[] getGids() { return Subjects.getGids(_subject); } public String getDn() { return Subjects.getDn(_subject); } public String getPrimaryFqan() { return Objects.toString(Subjects.getPrimaryFqan(_subject), null); } public Collection<String> getFqans() { return Collections2.transform(Subjects.getFqans(_subject), FQAN::toString); } public String getUserName() { return Subjects.getUserName(_subject); } public String getLoginName() { return Subjects.getLoginName(_subject); } public String getDisplayName() { return Subjects.getDisplayName(_subject); } public List<Principal> getPrincipals() { return new ArrayList<>(_subject.getPrincipals()); } @Override public String toString() { return _subject.getPrincipals().toString(); } }