Skip to content
This repository was archived by the owner on Sep 28, 2022. It is now read-only.

Commit ebd1459

Browse files
author
Dominik Frantisek Bucik
committed
feat: 🎸 AARC_IDP_HINTING implemented
1 parent 9c135ec commit ebd1459

File tree

5 files changed

+609
-4
lines changed

5 files changed

+609
-4
lines changed

perun-oidc-server-webapp/src/main/webapp/WEB-INF/user-context.xml

+19-2
Original file line numberDiff line numberDiff line change
@@ -583,10 +583,27 @@
583583
<list>
584584
<bean id="httpPostBinding" class="org.springframework.security.saml.processor.HTTPPostBinding">
585585
<constructor-arg name="parserPool" ref="parserPool"/>
586-
<constructor-arg name="velocityEngine" value="#{T(org.springframework.security.saml.util.VelocityFactory).getEngine()}"/>
586+
<constructor-arg name="encoder">
587+
<bean class="cz.muni.ics.oidc.saml.PerunPostEncoder">
588+
<constructor-arg name="engine" value="#{T(org.springframework.security.saml.util.VelocityFactory).getEngine()}"/>
589+
<constructor-arg name="templateId" value="/templates/saml2-post-binding.vm"/>
590+
</bean>
591+
</constructor-arg>
592+
<constructor-arg name="decoder">
593+
<bean class="org.opensaml.saml2.binding.decoding.HTTPPostDecoder">
594+
<constructor-arg name="pool" ref="parserPool"/>
595+
</bean>
596+
</constructor-arg>
587597
</bean>
588598
<bean id="httpRedirectDeflateBinding" class="org.springframework.security.saml.processor.HTTPRedirectDeflateBinding">
589-
<constructor-arg name="parserPool" ref="parserPool"/>
599+
<constructor-arg name="encoder">
600+
<bean class="cz.muni.ics.oidc.saml.PerunHTTPRedirectDeflateEncoder"/>
601+
</constructor-arg>
602+
<constructor-arg name="decoder">
603+
<bean class="org.opensaml.saml2.binding.decoding.HTTPRedirectDeflateDecoder">
604+
<constructor-arg name="pool" ref="parserPool"/>
605+
</bean>
606+
</constructor-arg>
590607
</bean>
591608
</list>
592609
</constructor-arg>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package cz.muni.ics.oidc.saml;
2+
3+
import org.opensaml.common.binding.SAMLMessageContext;
4+
import org.opensaml.saml2.binding.encoding.HTTPRedirectDeflateEncoder;
5+
import org.opensaml.util.URLBuilder;
6+
import org.opensaml.ws.message.encoder.MessageEncodingException;
7+
import org.opensaml.xml.util.Pair;
8+
import org.springframework.util.StringUtils;
9+
10+
import static cz.muni.ics.oidc.server.filters.PerunFilterConstants.AARC_IDP_HINT;
11+
12+
public class PerunHTTPRedirectDeflateEncoder extends HTTPRedirectDeflateEncoder {
13+
14+
@Override
15+
protected String buildRedirectURL(SAMLMessageContext messageContext, String endpointURL, String message)
16+
throws MessageEncodingException
17+
{
18+
String url = super.buildRedirectURL(messageContext, endpointURL, message);
19+
if (messageContext instanceof PerunSAMLMessageContext) {
20+
PerunSAMLMessageContext mcxt = (PerunSAMLMessageContext) messageContext;
21+
if (StringUtils.hasText(mcxt.getAarcIdpHint())) {
22+
URLBuilder builder = new URLBuilder(url);
23+
builder.getQueryParams().add(new Pair<>(AARC_IDP_HINT, mcxt.getAarcIdpHint()));
24+
url = builder.buildURL();
25+
}
26+
}
27+
return url;
28+
}
29+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package cz.muni.ics.oidc.saml;
2+
3+
import org.apache.velocity.VelocityContext;
4+
import org.apache.velocity.app.VelocityEngine;
5+
import org.opensaml.common.binding.SAMLMessageContext;
6+
import org.opensaml.saml2.binding.encoding.HTTPPostEncoder;
7+
import org.opensaml.ws.message.MessageContext;
8+
import org.opensaml.ws.message.encoder.MessageEncodingException;
9+
import org.slf4j.Logger;
10+
import org.slf4j.LoggerFactory;
11+
import org.springframework.util.StringUtils;
12+
13+
public class PerunPostEncoder extends HTTPPostEncoder {
14+
15+
private static final Logger log = LoggerFactory.getLogger(PerunPostEncoder.class);
16+
17+
public PerunPostEncoder(VelocityEngine engine, String templateId) {
18+
super(engine, templateId);
19+
}
20+
21+
@Override
22+
protected void doEncode(MessageContext messageContext) throws MessageEncodingException {
23+
super.doEncode(messageContext);
24+
}
25+
26+
@Override
27+
protected void populateVelocityContext(VelocityContext velocityContext, SAMLMessageContext messageContext, String endpointURL) throws MessageEncodingException {
28+
super.populateVelocityContext(velocityContext, messageContext, endpointURL);
29+
if (messageContext instanceof PerunSAMLMessageContext) {
30+
PerunSAMLMessageContext mcxt = (PerunSAMLMessageContext) messageContext;
31+
if (StringUtils.hasText(mcxt.getAarcIdpHint())) {
32+
velocityContext.put("aarc_idp_hint", mcxt.getAarcIdpHint());
33+
}
34+
}
35+
}
36+
}

0 commit comments

Comments
 (0)