|
|
|
@ -19,8 +19,6 @@ package org.springframework.security.saml2.provider.service.metadata; |
|
|
|
import java.io.UnsupportedEncodingException; |
|
|
|
import java.io.UnsupportedEncodingException; |
|
|
|
import java.net.URLEncoder; |
|
|
|
import java.net.URLEncoder; |
|
|
|
import java.nio.charset.StandardCharsets; |
|
|
|
import java.nio.charset.StandardCharsets; |
|
|
|
import java.util.ArrayList; |
|
|
|
|
|
|
|
import java.util.Collection; |
|
|
|
|
|
|
|
import java.util.Collections; |
|
|
|
import java.util.Collections; |
|
|
|
import java.util.LinkedHashMap; |
|
|
|
import java.util.LinkedHashMap; |
|
|
|
import java.util.Map; |
|
|
|
import java.util.Map; |
|
|
|
@ -126,21 +124,19 @@ public final class RequestMatcherMetadataResponseResolver implements Saml2Metada |
|
|
|
Iterable<RelyingPartyRegistration> registrations) { |
|
|
|
Iterable<RelyingPartyRegistration> registrations) { |
|
|
|
Map<String, RelyingPartyRegistration> results = new LinkedHashMap<>(); |
|
|
|
Map<String, RelyingPartyRegistration> results = new LinkedHashMap<>(); |
|
|
|
for (RelyingPartyRegistration registration : registrations) { |
|
|
|
for (RelyingPartyRegistration registration : registrations) { |
|
|
|
results.put(registration.getEntityId(), registration); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
Collection<RelyingPartyRegistration> resolved = new ArrayList<>(); |
|
|
|
|
|
|
|
for (RelyingPartyRegistration registration : results.values()) { |
|
|
|
|
|
|
|
UriResolver uriResolver = RelyingPartyRegistrationPlaceholderResolvers.uriResolver(request, registration); |
|
|
|
UriResolver uriResolver = RelyingPartyRegistrationPlaceholderResolvers.uriResolver(request, registration); |
|
|
|
String entityId = uriResolver.resolve(registration.getEntityId()); |
|
|
|
String entityId = uriResolver.resolve(registration.getEntityId()); |
|
|
|
String ssoLocation = uriResolver.resolve(registration.getAssertionConsumerServiceLocation()); |
|
|
|
results.computeIfAbsent(entityId, (e) -> { |
|
|
|
String sloLocation = uriResolver.resolve(registration.getSingleLogoutServiceLocation()); |
|
|
|
String ssoLocation = uriResolver.resolve(registration.getAssertionConsumerServiceLocation()); |
|
|
|
String sloResponseLocation = uriResolver.resolve(registration.getSingleLogoutServiceResponseLocation()); |
|
|
|
String sloLocation = uriResolver.resolve(registration.getSingleLogoutServiceLocation()); |
|
|
|
resolved.add(registration.mutate().entityId(entityId).assertionConsumerServiceLocation(ssoLocation) |
|
|
|
String sloResponseLocation = uriResolver.resolve(registration.getSingleLogoutServiceResponseLocation()); |
|
|
|
.singleLogoutServiceLocation(sloLocation).singleLogoutServiceResponseLocation(sloResponseLocation) |
|
|
|
return registration.mutate().entityId(entityId).assertionConsumerServiceLocation(ssoLocation) |
|
|
|
.build()); |
|
|
|
.singleLogoutServiceLocation(sloLocation) |
|
|
|
|
|
|
|
.singleLogoutServiceResponseLocation(sloResponseLocation).build(); |
|
|
|
|
|
|
|
}); |
|
|
|
} |
|
|
|
} |
|
|
|
String metadata = this.metadata.resolve(resolved); |
|
|
|
String metadata = this.metadata.resolve(results.values()); |
|
|
|
String value = (resolved.size() == 1) ? resolved.iterator().next().getRegistrationId() |
|
|
|
String value = (results.size() == 1) ? results.values().iterator().next().getRegistrationId() |
|
|
|
: UUID.randomUUID().toString(); |
|
|
|
: UUID.randomUUID().toString(); |
|
|
|
String fileName = this.filename.replace("{registrationId}", value); |
|
|
|
String fileName = this.filename.replace("{registrationId}", value); |
|
|
|
try { |
|
|
|
try { |
|
|
|
|