[java-identity-provider] branch main updated: IDP-2244 - Logout flow completion logic in views is SAML-specific
Scott Cantor
cantor.2 at osu.edu
Wed Feb 14 18:13:30 UTC 2024
This is an automated email from the git hooks/post-receive script.
scantor pushed a commit to branch main
in repository java-identity-provider.
View the commit online:
http://git.shibboleth.net/view/?p=java-identity-provider.git;a=commit;h=7e950641065c39736ffcfa86db759e957ec92e14
The following commit(s) were added to refs/heads/main by this push:
new 7e9506410 IDP-2244 - Logout flow completion logic in views is SAML-specific
7e9506410 is described below
commit 7e950641065c39736ffcfa86db759e957ec92e14
Author: Scott Cantor <cantor.2 at osu.edu>
AuthorDate: Wed Feb 14 13:13:27 2024 -0500
IDP-2244 - Logout flow completion logic in views is SAML-specific
https://shibboleth.atlassian.net/browse/IDP-2244
---
.../shibboleth/idp/flows/logout/logout-flow.xml | 4 ++--
.../shibboleth/idp/module/views/logout-complete.vm | 4 ++--
.../net/shibboleth/idp/views/logout/propagate.vm | 4 ++--
.../idp/session/context/LogoutContext.java | 28 ++++++++++++++++++++++
4 files changed, 34 insertions(+), 6 deletions(-)
diff --git a/idp-conf-impl/src/main/resources/net/shibboleth/idp/flows/logout/logout-flow.xml b/idp-conf-impl/src/main/resources/net/shibboleth/idp/flows/logout/logout-flow.xml
index 0ad62af6d..0530ad1ca 100644
--- a/idp-conf-impl/src/main/resources/net/shibboleth/idp/flows/logout/logout-flow.xml
+++ b/idp-conf-impl/src/main/resources/net/shibboleth/idp/flows/logout/logout-flow.xml
@@ -126,7 +126,7 @@
<evaluate expression="SaveLogoutContext" />
<evaluate expression="environment" result="requestScope.environment" />
<evaluate expression="opensamlProfileRequestContext" result="requestScope.profileRequestContext" />
- <evaluate expression="opensamlProfileRequestContext.getSubcontext(T(net.shibboleth.idp.session.context.LogoutContext))" result="requestScope.logoutContext" />
+ <evaluate expression="opensamlProfileRequestContext.ensureSubcontext(T(net.shibboleth.idp.session.context.LogoutContext)).setFlowComplete(true)" result="requestScope.logoutContext" />
<evaluate expression="opensamlProfileRequestContext.getSubcontext(T(net.shibboleth.idp.profile.context.MultiRelyingPartyContext))" result="requestScope.multiRPContext" />
<evaluate expression="T(net.shibboleth.shared.codec.HTMLEncoder)" result="requestScope.htmlEncoder" />
<evaluate expression="T(java.net.URLEncoder)" result="requestScope.urlEncoder" />
@@ -145,7 +145,7 @@
<evaluate expression="WriteAuditLog" />
<evaluate expression="environment" result="requestScope.environment" />
<evaluate expression="opensamlProfileRequestContext" result="requestScope.profileRequestContext" />
- <evaluate expression="opensamlProfileRequestContext.getSubcontext(T(net.shibboleth.idp.session.context.LogoutContext))" result="requestScope.logoutContext" />
+ <evaluate expression="opensamlProfileRequestContext.ensureSubcontext(T(net.shibboleth.idp.session.context.LogoutContext)).setFlowComplete(true)" result="requestScope.logoutContext" />
<evaluate expression="opensamlProfileRequestContext.getSubcontext(T(net.shibboleth.idp.profile.context.MultiRelyingPartyContext))" result="requestScope.multiRPContext" />
<evaluate expression="T(net.shibboleth.shared.codec.HTMLEncoder)" result="requestScope.encoder" />
<evaluate expression="flowRequestContext.getActiveFlow().getApplicationContext().getBean('shibboleth.CSPDigester')" result="requestScope.cspDigester" />
diff --git a/idp-conf-impl/src/main/resources/net/shibboleth/idp/module/views/logout-complete.vm b/idp-conf-impl/src/main/resources/net/shibboleth/idp/module/views/logout-complete.vm
index fcadf0c0f..7126a1eb6 100644
--- a/idp-conf-impl/src/main/resources/net/shibboleth/idp/module/views/logout-complete.vm
+++ b/idp-conf-impl/src/main/resources/net/shibboleth/idp/module/views/logout-complete.vm
@@ -49,8 +49,8 @@ $response.addHeader("Content-Security-Policy", "script-src 'none'; base-uri 'non
<li><a href="#springMessageText("idp.url.helpdesk", '#')">#springMessageText("idp.login.needHelp", "Need Help?")</a></li>
</ul>
- <!-- If SAML logout, complete the flow by adding a hidden iframe. -->
- #if ( $profileRequestContext.getProfileId().contains("saml2/logout") )
+ <!-- If required, complete the flow by adding a hidden iframe. -->
+ #if (!$logoutContext.flowComplete)
<iframe style="display:none" src="$flowExecutionUrl&_eventId=proceed"></iframe>
#end
</section>
diff --git a/idp-conf-impl/src/main/resources/net/shibboleth/idp/views/logout/propagate.vm b/idp-conf-impl/src/main/resources/net/shibboleth/idp/views/logout/propagate.vm
index 8b2a454cf..70085c218 100644
--- a/idp-conf-impl/src/main/resources/net/shibboleth/idp/views/logout/propagate.vm
+++ b/idp-conf-impl/src/main/resources/net/shibboleth/idp/views/logout/propagate.vm
@@ -171,7 +171,7 @@
#end
#end
-<!-- If SAML logout, complete the flow by adding a hidden iframe. -->
-#if ( $profileRequestContext.getProfileId().contains("saml2/logout") )
+<!-- If required, complete the flow by adding a hidden iframe. -->
+#if (!$logoutContext.flowComplete)
<iframe style="display:none" src="$flowExecutionUrl&_eventId=proceed"></iframe>
#end
diff --git a/idp-session-api/src/main/java/net/shibboleth/idp/session/context/LogoutContext.java b/idp-session-api/src/main/java/net/shibboleth/idp/session/context/LogoutContext.java
index 175cd187f..d3cd7ea5d 100644
--- a/idp-session-api/src/main/java/net/shibboleth/idp/session/context/LogoutContext.java
+++ b/idp-session-api/src/main/java/net/shibboleth/idp/session/context/LogoutContext.java
@@ -46,6 +46,9 @@ public final class LogoutContext extends BaseContext {
/** An index of the session objects by an externally assigned key. */
@Nonnull private final Map<String,SPSession> keyedSessionMap;
+
+ /** Signal that logout master flow is complete. */
+ private boolean flowComplete;
/** Constructor. */
public LogoutContext() {
@@ -96,4 +99,29 @@ public final class LogoutContext extends BaseContext {
return sessionMap.get(id);
}
+ /**
+ * Gets whether the master logout flow has completed or requires further signaling.
+ *
+ * @return true iff the flow is completed
+ *
+ * @since 5.1.0
+ */
+ public boolean isFlowComplete() {
+ return flowComplete;
+ }
+
+ /**
+ * Sets whether the master logout flow has completed or requires further signaling.
+ *
+ * @param flag flag to set
+ *
+ * @return this context
+ *
+ * @since 5.1.0
+ */
+ @Nonnull public LogoutContext setFlowComplete(final boolean flag) {
+ flowComplete = flag;
+
+ return this;
+ }
}
\ No newline at end of file
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the commits
mailing list