/** {@inheritDoc} */ @Override @Nonnull @NonnullElements public Iterable<EndpointType> resolve(@Nullable final CriteriaSet criteria) throws ResolverException { validateCriteria(criteria); if (canUseRequestedEndpoint(criteria)) { final EndpointType endpoint = (EndpointType) criteria.get(EndpointCriterion.class).getEndpoint(); if (doCheckEndpoint(criteria, endpoint)) { return Collections.<EndpointType>singletonList(endpoint); } else { log.debug("{} Requested endpoint was rejected by extended validation process", getLogPrefix()); return Collections.emptyList(); } } final List<EndpointType> candidates = getCandidatesFromMetadata(criteria); final Iterator<EndpointType> i = candidates.iterator(); while (i.hasNext()) { if (!doCheckEndpoint(criteria, i.next())) { i.remove(); } } log.debug("{} {} endpoints remain after filtering process", getLogPrefix(), candidates.size()); return candidates; }
/** * Optimize the case of resolving a single endpoint if a populated endpoint is supplied via * criteria, and validation is unnecessary due to a signed request. Note that this endpoint may * turn out to be unusable by the caller, but that's immaterial because the requester must have * dictated the binding and location, so we're not allowed to ignore that. * * @param criteria input criteria set * * @return true iff the supplied endpoint via {@link EndpointCriterion} should be returned */ private boolean canUseRequestedEndpoint(@Nonnull final CriteriaSet criteria) { final EndpointCriterion epc = criteria.get(EndpointCriterion.class); if (epc.isTrusted()) { final EndpointType requestedEndpoint = (EndpointType) epc.getEndpoint(); if (requestedEndpoint.getBinding() != null && (requestedEndpoint.getLocation() != null || requestedEndpoint.getResponseLocation() != null)) { return true; } } return false; }
/** {@inheritDoc} */ @Override public int hashCode() { return toString().hashCode(); }
/** * Create the set of criteria used to find a unique CAS service given a CAS service URL. * * @param serviceURL CAS service URL. * * @return Metadata resolver criteria set. */ @Nonnull protected CriteriaSet criteria(@Nonnull final String serviceURL) { final AssertionConsumerService loginACS = new AssertionConsumerServiceBuilder().buildObject(); loginACS.setBinding(LOGIN_BINDING); loginACS.setLocation(serviceURL); return new CriteriaSet( new EntityRoleCriterion(SPSSODescriptor.DEFAULT_ELEMENT_NAME), new EndpointCriterion<>(loginACS), new ProtocolCriterion(AbstractProtocolConfiguration.PROTOCOL_URI), new StartsWithLocationCriterion()); }
log.debug("{} Defaulting binding in \"unverified\" request to {}", getLogPrefix(), unverifiedBinding); return new EndpointCriterion(endpoint, true); } else { return new EndpointCriterion(endpoint, skipValidationSinceSigned);
new EndpointCriterion<>(arsTemplate, false);
/** {@inheritDoc} */ @Nullable @NonnullElements @Unmodifiable @NotLive public Set<MetadataIndexKey> generateKeys(@Nonnull final CriteriaSet criteriaSet) { Constraint.isNotNull(criteriaSet, "CriteriaSet was null"); EntityRoleCriterion roleCrit = criteriaSet.get(EntityRoleCriterion.class); EndpointCriterion<Endpoint> endpointCrit = criteriaSet.get(EndpointCriterion.class); if (roleCrit != null && endpointCrit != null) { HashSet<MetadataIndexKey> result = new HashSet<>(); result.addAll(processCriteria(criteriaSet, roleCrit.getRole(), endpointCrit.getEndpoint())); return result; } else { return null; } }
QName endpointType = epCriterion.getEndpoint().getSchemaType(); if (endpointType == null) { endpointType = epCriterion.getEndpoint().getElementQName();
/** {@inheritDoc} */ @Override @Nullable public EndpointType resolveSingle(@Nullable final CriteriaSet criteria) throws ResolverException { validateCriteria(criteria); if (canUseRequestedEndpoint(criteria)) { final EndpointType endpoint = (EndpointType) criteria.get(EndpointCriterion.class).getEndpoint(); if (doCheckEndpoint(criteria, endpoint)) { return endpoint; } else { log.debug("{} Requested endpoint was rejected by extended validation process", getLogPrefix()); return null; } } for (final EndpointType candidate : getCandidatesFromMetadata(criteria)) { if (doCheckEndpoint(criteria, candidate)) { return candidate; } } log.debug("{} No candidate endpoints met criteria", getLogPrefix()); return null; }
/** {@inheritDoc} */ @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (obj instanceof EndpointCriterion) { final Endpoint endpoint2 = ((EndpointCriterion) obj).getEndpoint(); if (!Objects.equals(endpoint.getElementQName(), endpoint2.getElementQName())) { return false; } else if (!Objects.equals(endpoint.getBinding(), endpoint2.getBinding())) { return false; } else if (!Objects.equals(endpoint.getLocation(), endpoint2.getLocation())) { return false; } else if (!Objects.equals(endpoint.getResponseLocation(), endpoint2.getResponseLocation())) { return false; } return true; } return false; } }
@Nonnull final EndpointType endpoint) { final EndpointType comparisonEndpoint = comparison.getEndpoint();