|
19 | 19 | import java.io.UnsupportedEncodingException;
|
20 | 20 | import java.net.URLEncoder;
|
21 | 21 | import java.nio.charset.StandardCharsets;
|
22 |
| -import java.util.ArrayList; |
23 |
| -import java.util.Collection; |
24 | 22 | import java.util.Collections;
|
25 | 23 | import java.util.LinkedHashMap;
|
26 | 24 | import java.util.Map;
|
@@ -126,21 +124,19 @@ private Saml2MetadataResponse responseByIterable(HttpServletRequest request,
|
126 | 124 | Iterable<RelyingPartyRegistration> registrations) {
|
127 | 125 | Map<String, RelyingPartyRegistration> results = new LinkedHashMap<>();
|
128 | 126 | for (RelyingPartyRegistration registration : registrations) {
|
129 |
| - results.put(registration.getEntityId(), registration); |
130 |
| - } |
131 |
| - Collection<RelyingPartyRegistration> resolved = new ArrayList<>(); |
132 |
| - for (RelyingPartyRegistration registration : results.values()) { |
133 | 127 | UriResolver uriResolver = RelyingPartyRegistrationPlaceholderResolvers.uriResolver(request, registration);
|
134 | 128 | String entityId = uriResolver.resolve(registration.getEntityId());
|
135 |
| - String ssoLocation = uriResolver.resolve(registration.getAssertionConsumerServiceLocation()); |
136 |
| - String sloLocation = uriResolver.resolve(registration.getSingleLogoutServiceLocation()); |
137 |
| - String sloResponseLocation = uriResolver.resolve(registration.getSingleLogoutServiceResponseLocation()); |
138 |
| - resolved.add(registration.mutate().entityId(entityId).assertionConsumerServiceLocation(ssoLocation) |
139 |
| - .singleLogoutServiceLocation(sloLocation).singleLogoutServiceResponseLocation(sloResponseLocation) |
140 |
| - .build()); |
| 129 | + results.computeIfAbsent(entityId, (e) -> { |
| 130 | + String ssoLocation = uriResolver.resolve(registration.getAssertionConsumerServiceLocation()); |
| 131 | + String sloLocation = uriResolver.resolve(registration.getSingleLogoutServiceLocation()); |
| 132 | + String sloResponseLocation = uriResolver.resolve(registration.getSingleLogoutServiceResponseLocation()); |
| 133 | + return registration.mutate().entityId(entityId).assertionConsumerServiceLocation(ssoLocation) |
| 134 | + .singleLogoutServiceLocation(sloLocation) |
| 135 | + .singleLogoutServiceResponseLocation(sloResponseLocation).build(); |
| 136 | + }); |
141 | 137 | }
|
142 |
| - String metadata = this.metadata.resolve(resolved); |
143 |
| - String value = (resolved.size() == 1) ? resolved.iterator().next().getRegistrationId() |
| 138 | + String metadata = this.metadata.resolve(results.values()); |
| 139 | + String value = (results.size() == 1) ? results.values().iterator().next().getRegistrationId() |
144 | 140 | : UUID.randomUUID().toString();
|
145 | 141 | String fileName = this.filename.replace("{registrationId}", value);
|
146 | 142 | try {
|
|
0 commit comments