package org.apereo.cas.authentication; import org.apereo.cas.authentication.principal.DefaultPrincipalFactory; import org.apereo.cas.authentication.principal.Principal; import org.apereo.cas.authentication.principal.PrincipalFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.Collection; import java.util.Map; /** * This is {@link DefaultPrincipalElectionStrategy} that selects the primary principal * to be the first principal in the chain of authentication history. * * @author Misagh Moayyed * @since 4.2.0 */ public class DefaultPrincipalElectionStrategy implements PrincipalElectionStrategy { private static final Logger LOGGER = LoggerFactory.getLogger(DefaultPrincipalElectionStrategy.class); private static final long serialVersionUID = 6704726217030836315L; private final PrincipalFactory principalFactory; public DefaultPrincipalElectionStrategy() { this(new DefaultPrincipalFactory()); } public DefaultPrincipalElectionStrategy(final PrincipalFactory principalFactory) { this.principalFactory = principalFactory; } @Override public Principal nominate(final Collection<Authentication> authentications, final Map<String, Object> principalAttributes) { final Principal principal = authentications.iterator().next().getPrincipal(); final Principal finalPrincipal = this.principalFactory.createPrincipal(principal.getId(), principalAttributes); LOGGER.debug("Nominated [{}] as the primary principal", finalPrincipal); return finalPrincipal; } }