if (endpoints == null || endpoints.size() == 0) {
return null;
}
Endpoint endpoint = null;
AuthnRequest request = (AuthnRequest) getSamlRequest();
if (request != null) {
endpoints = filterEndpointsByProtocolBinding(endpoints);
if (endpoints == null || endpoints.isEmpty()) {
return null;
}
if (request.getAssertionConsumerServiceIndex() != null) {
log.debug("Selecting endpoint by ACS index '{}' for request '{}' from entity '{}'",
new Object[] { request.getAssertionConsumerServiceIndex(), request.getID(),
getEntityMetadata().getEntityID() });
endpoint = selectEndpointByACSIndex(request, (List<IndexedEndpoint>) endpoints);
} else if (request.getAssertionConsumerServiceURL() != null) {
log
.debug(
"Selecting endpoint by ACS URL '{}' and protocol binding '{}' for request '{}' from entity '{}'",
new Object[] { request.getAssertionConsumerServiceURL(), request.getProtocolBinding(),
request.getID(), getEntityMetadata().getEntityID() });
endpoint = selectEndpointByACSURL(request, (List<IndexedEndpoint>) endpoints);
}
}
if (endpoint == null && request.getAssertionConsumerServiceIndex() == null
&& request.getAssertionConsumerServiceURL() == null) {
log.debug("No ACS index or URL given, selecting endpoint without additional constraints.");
if (endpoints.get(0) instanceof IndexedEndpoint) {
endpoint = selectIndexedEndpoint((List<IndexedEndpoint>) endpoints);
} else {
endpoint = selectNonIndexedEndpoint((List<Endpoint>) endpoints);