package org.apereo.cas.support.wsfederation.authentication.handler.support;
import org.apereo.cas.authentication.Credential;
import org.apereo.cas.authentication.HandlerResult;
import org.apereo.cas.authentication.PreventedException;
import org.apereo.cas.authentication.handler.support.AbstractPreAndPostProcessingAuthenticationHandler;
import org.apereo.cas.authentication.principal.Principal;
import org.apereo.cas.authentication.principal.PrincipalFactory;
import org.apereo.cas.services.ServicesManager;
import org.apereo.cas.support.wsfederation.authentication.principal.WsFederationCredential;
import javax.security.auth.login.FailedLoginException;
import java.security.GeneralSecurityException;
import java.util.ArrayList;
import java.util.Map;
/**
* This handler authenticates Security token/credentials.
*
* @author John Gasper
* @since 4.2.0
*/
public class WsFederationAuthenticationHandler extends AbstractPreAndPostProcessingAuthenticationHandler {
public WsFederationAuthenticationHandler(final String name, final ServicesManager servicesManager, final PrincipalFactory principalFactory) {
super(name, servicesManager, principalFactory, null);
}
/**
* Determines if this handler can support the credentials provided.
*
* @param credentials the credentials to test
* @return true if supported, otherwise false
*/
@Override
public boolean supports(final Credential credentials) {
return credentials != null && WsFederationCredential.class.isAssignableFrom(credentials.getClass());
}
@Override
protected HandlerResult doAuthentication(final Credential credential) throws GeneralSecurityException, PreventedException {
final WsFederationCredential wsFederationCredentials = (WsFederationCredential) credential;
if (wsFederationCredentials != null) {
final Map attributes = wsFederationCredentials.getAttributes();
final Principal principal = this.principalFactory.createPrincipal(wsFederationCredentials.getId(), attributes);
return this.createHandlerResult(wsFederationCredentials, principal, new ArrayList<>());
}
throw new FailedLoginException();
}
}