package org.dcache.services.login; import javax.security.auth.Subject; import java.util.Collections; import java.util.Set; import diskCacheV111.vehicles.Message; import org.dcache.auth.attributes.LoginAttribute; import static com.google.common.base.Preconditions.checkNotNull; /** * Requests a login by a login cell. */ public class LoginMessage extends Message { private static final long serialVersionUID = -162269433527077293L; private Set<LoginAttribute> _loginAttributes = Collections.emptySet(); private Set<Object> _publicCredentials; private Set<Object> _privateCredentials; public LoginMessage(Subject subject) { setSubject(subject); } @Override public void setSubject(Subject subject) { /* Subject does not serialize its credentials, so we need to * take care of those ourselves. */ super.setSubject(subject); _publicCredentials = subject.getPublicCredentials(); _privateCredentials = subject.getPrivateCredentials(); } @Override public Subject getSubject() { return new Subject(false, super.getSubject().getPrincipals(), _publicCredentials, _privateCredentials); } public void setLoginAttributes(Set<LoginAttribute> loginAttributes) { _loginAttributes = checkNotNull(loginAttributes); } public Set<LoginAttribute> getLoginAttributes() { return _loginAttributes; } }