package org.apereo.cas.services;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import org.apereo.cas.authentication.principal.Principal;
import org.apereo.cas.authentication.principal.Service;
import java.io.Serializable;
/**
* Strategy interface to define what username attribute should
* be returned for a given registered service.
*
* @author Misagh Moayyed
* @since 4.1.0
*/
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY)
public interface RegisteredServiceUsernameAttributeProvider extends Serializable {
/**
* Resolve the username that is to be returned to CAS clients.
*
* @param principal the principal
* @param service the service for which attribute should be calculated
* @param registeredService the registered service owning this user name attribute provider
* @return the username value configured for this service
*/
String resolveUsername(Principal principal, Service service, RegisteredService registeredService);
}