package org.apereo.cas.authentication;
import org.apereo.cas.authentication.principal.Service;
/**
* This is {@link DefaultAuthenticationSystemSupport}.
*
* @author Misagh Moayyed
* @author Dmitriy Kopylenko
* @since 4.2.0
*/
public class DefaultAuthenticationSystemSupport implements AuthenticationSystemSupport {
private final AuthenticationTransactionManager authenticationTransactionManager;
private final PrincipalElectionStrategy principalElectionStrategy;
public DefaultAuthenticationSystemSupport(final AuthenticationTransactionManager authenticationTransactionManager,
final PrincipalElectionStrategy principalElectionStrategy) {
this.authenticationTransactionManager = authenticationTransactionManager;
this.principalElectionStrategy = principalElectionStrategy;
}
@Override
public AuthenticationTransactionManager getAuthenticationTransactionManager() {
return this.authenticationTransactionManager;
}
@Override
public PrincipalElectionStrategy getPrincipalElectionStrategy() {
return this.principalElectionStrategy;
}
@Override
public AuthenticationResultBuilder handleInitialAuthenticationTransaction(final Service service,
final Credential... credential) throws AuthenticationException {
final DefaultAuthenticationResultBuilder builder = new DefaultAuthenticationResultBuilder(this.principalElectionStrategy);
if (credential != null && credential.length > 0) {
builder.collect(credential[0]);
}
return this.handleAuthenticationTransaction(service, builder, credential);
}
@Override
public AuthenticationResultBuilder establishAuthenticationContextFromInitial(final Authentication authentication, final Credential credentials) {
return new DefaultAuthenticationResultBuilder(this.principalElectionStrategy).collect(authentication).collect(credentials);
}
@Override
public AuthenticationResultBuilder handleAuthenticationTransaction(final Service service,
final AuthenticationResultBuilder authenticationResultBuilder,
final Credential... credential) throws AuthenticationException {
final AuthenticationTransaction transaction = AuthenticationTransaction.wrap(service, credential);
this.authenticationTransactionManager.handle(transaction, authenticationResultBuilder);
return authenticationResultBuilder;
}
@Override
public AuthenticationResult finalizeAllAuthenticationTransactions(final AuthenticationResultBuilder authenticationResultBuilder,
final Service service) {
return authenticationResultBuilder.build(service);
}
@Override
public AuthenticationResult handleAndFinalizeSingleAuthenticationTransaction(final Service service, final Credential... credential)
throws AuthenticationException {
return finalizeAllAuthenticationTransactions(handleInitialAuthenticationTransaction(service, credential), service);
}
}