package org.jasig.cas.client.jetty;
import org.eclipse.jetty.server.UserIdentity;
import org.jasig.cas.client.authentication.AttributePrincipal;
import org.jasig.cas.client.util.CommonUtils;
import org.jasig.cas.client.validation.Assertion;
import javax.security.auth.Subject;
import java.security.Principal;
import java.util.Collection;
/**
* CAS user identity backed by assertion data.
*
* @author Marvin S. Addison
*/
public class CasUserIdentity implements UserIdentity {
/** CAS principal. */
private AttributePrincipal principal;
/** Assertion attribute containing role data. */
private String roleAttribute;
/**
* Creates a new instance from a CAS assertion containing principal information.
*
* @param assertion CAS assertion resulting from successful ticket validation.
* @param roleAttribute Principal attribute containing role data.
*/
public CasUserIdentity(final Assertion assertion, final String roleAttribute) {
CommonUtils.assertNotNull(assertion, "Assertion cannot be null");
this.principal = assertion.getPrincipal();
this.roleAttribute = roleAttribute;
}
@Override
public Subject getSubject() {
final Subject subject = new Subject();
subject.getPrincipals().add(principal);
return subject;
}
@Override
public Principal getUserPrincipal() {
return principal;
}
@Override
public boolean isUserInRole(final String role, final Scope scope) {
if (roleAttribute != null) {
final Object value = principal.getAttributes().get(roleAttribute);
if (value instanceof Collection) {
return ((Collection) value).contains(role);
} else if (value instanceof String) {
return value.equals(role);
}
}
return false;
}
@Override
public String toString() {
return principal.getName();
}
}