package org.apereo.cas.authentication; import org.apereo.cas.support.events.authentication.CasAuthenticationTransactionCompletedEvent; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationEvent; import org.springframework.context.ApplicationEventPublisher; /** * This is {@link DefaultAuthenticationTransactionManager}. * * @author Misagh Moayyed * @since 4.2.0 */ public class DefaultAuthenticationTransactionManager implements AuthenticationTransactionManager { private static final Logger LOGGER = LoggerFactory.getLogger(DefaultAuthenticationTransactionManager.class); @Autowired private ApplicationEventPublisher eventPublisher; private final AuthenticationManager authenticationManager; public DefaultAuthenticationTransactionManager(final AuthenticationManager authenticationManager) { this.authenticationManager = authenticationManager; } @Override public AuthenticationTransactionManager handle(final AuthenticationTransaction authenticationTransaction, final AuthenticationResultBuilder authenticationResult) throws AuthenticationException { if (!authenticationTransaction.getCredentials().isEmpty()) { final Authentication authentication = this.authenticationManager.authenticate(authenticationTransaction); LOGGER.debug("Successful authentication; Collecting authentication result [{}]", authentication); publishEvent(new CasAuthenticationTransactionCompletedEvent(this, authentication)); authenticationResult.collect(authentication); } else { LOGGER.debug("Transaction ignored since there are no credentials to authenticate"); } return this; } @Override public AuthenticationManager getAuthenticationManager() { return this.authenticationManager; } private void publishEvent(final ApplicationEvent event) { if (this.eventPublisher != null) { this.eventPublisher.publishEvent(event); } } }