package net.unicon.cas.mfa.authentication;
import net.unicon.cas.mfa.util.MultiFactorUtils;
import org.jasig.cas.authentication.CredentialMetaData;
import org.jasig.cas.authentication.HandlerResult;
import org.jasig.cas.authentication.principal.Principal;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* A {@link CompositeAuthentication} implementation that houses an instance of
* {@link Principal} inside, restricts the {@link #getAuthenticationDate()} to
* the instance at which this authentication is created and exposes a mutable
* instance of authentication attributes via {@link #getAttributes()}.
* @author Misagh Moayyed
*/
public final class DefaultCompositeAuthentication implements CompositeAuthentication {
private static final long serialVersionUID = 6594344317585898494L;
private final Principal principal;
private final Date authenticationDate = new Date();
private final Map<String, Object> authenticationAttributes;
private final List<CredentialMetaData> credentials;
private final Map<String, HandlerResult> successes;
private final Map<String, Class<? extends Exception>> failures;
/**
* Initialize this instance with a principal and given authentication attributes.
*
* @param p the principal
* @param attributes attributes for this authentication
* @param credentials the credentials
* @param successes the successes
* @param failures the failures
*/
public DefaultCompositeAuthentication(final Principal p, final Map<String, Object> attributes,
final List<CredentialMetaData> credentials,
final Map<String, HandlerResult> successes,
final Map<String, Class<? extends Exception>> failures) {
this.principal = p;
this.authenticationAttributes = attributes;
this.credentials = credentials;
this.successes = successes;
this.failures = failures;
}
@Override
public Principal getPrincipal() {
return this.principal;
}
@Override
public Date getAuthenticationDate() {
return authenticationDate;
}
@Override
public Map<String, Object> getAttributes() {
return this.authenticationAttributes;
}
@Override
public List<CredentialMetaData> getCredentials() {
return this.credentials;
}
@Override
public Map<String, HandlerResult> getSuccesses() {
return this.successes;
}
@Override
public Map<String, Class<? extends Exception>> getFailures() {
return this.failures;
}
@Override
public Set<String> getSatisfiedAuthenticationMethods() {
return MultiFactorUtils.getSatisfiedAuthenticationMethods(this);
}
}