|
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