This is an automated email from the ASF dual-hosted git repository.

reiern70 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/wicket.git


The following commit(s) were added to refs/heads/master by this push:
     new f2719ba321 [WICKET-7028] do CSP related header generation both at 
onRequestHandlerResolved and onRequestHandlerExecuted. The same is applied for 
CrossOriginEmbedderPolicyRequestCycleListener and 
CrossOriginOpenerPolicyRequestCycleListener
f2719ba321 is described below

commit f2719ba321ff308852279deeb5396c915e4de3a5
Author: reiern70 <[email protected]>
AuthorDate: Wed Apr 5 14:48:09 2023 +0300

    [WICKET-7028] do CSP related header generation both at 
onRequestHandlerResolved and onRequestHandlerExecuted. The same is applied for 
CrossOriginEmbedderPolicyRequestCycleListener and 
CrossOriginOpenerPolicyRequestCycleListener
---
 ...ssOriginEmbedderPolicyRequestCycleListener.java | 19 +++++++++++--
 ...rossOriginOpenerPolicyRequestCycleListener.java | 19 +++++++++++--
 .../apache/wicket/csp/CSPRequestCycleListener.java | 32 +++++++++++++++-------
 3 files changed, 54 insertions(+), 16 deletions(-)

diff --git 
a/wicket-core/src/main/java/org/apache/wicket/coep/CrossOriginEmbedderPolicyRequestCycleListener.java
 
b/wicket-core/src/main/java/org/apache/wicket/coep/CrossOriginEmbedderPolicyRequestCycleListener.java
index e2f47f8152..d207787961 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/coep/CrossOriginEmbedderPolicyRequestCycleListener.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/coep/CrossOriginEmbedderPolicyRequestCycleListener.java
@@ -36,7 +36,7 @@ import jakarta.servlet.http.HttpServletRequest;
  * <code>Cross-Origin-Embedder-Policy</code>. The header is not set for the 
paths that are exempted
  * from COEP. The only valid value of COEP is <code>require-corp</code>, so if 
the listener is
  * enabled the policy value will be specified as so.
- *
+ * <p>
  * COEP prevents a document from loading any non-same-origin resources which 
don't explicitly grant
  * the document permission to be loaded. Using COEP and COOP together allows 
developers to safely
  * use powerful features such as <code>SharedArrayBuffer</code>,
@@ -44,7 +44,7 @@ import jakarta.servlet.http.HttpServletRequest;
  * {@link CrossOriginOpenerPolicyRequestCycleListener} for instructions on how 
to enable COOP.
  * Read more about cross-origin isolation on
  * <a href="https://web.dev/why-coop-coep/";>https://web.dev/why-coop-coep/</a>
- *
+ * <p>
  * 
  * @author Santiago Diaz - [email protected]
  * @author Ecenaz Jen Ozmen - [email protected]
@@ -58,7 +58,7 @@ public class CrossOriginEmbedderPolicyRequestCycleListener 
implements IRequestCy
 
        static final String REQUIRE_CORP = "require-corp";
 
-       private CrossOriginEmbedderPolicyConfiguration coepConfig;
+       private final CrossOriginEmbedderPolicyConfiguration coepConfig;
 
        public 
CrossOriginEmbedderPolicyRequestCycleListener(CrossOriginEmbedderPolicyConfiguration
 coepConfig)
        {
@@ -67,6 +67,18 @@ public class CrossOriginEmbedderPolicyRequestCycleListener 
implements IRequestCy
 
        @Override
        public void onRequestHandlerResolved(RequestCycle cycle, 
IRequestHandler handler)
+       {
+               // WICKET-7028- this is needed for redirect to buffer use case.
+               protect(cycle, handler);
+       }
+
+       @Override
+       public void onRequestHandlerExecuted(RequestCycle cycle, 
IRequestHandler handler)
+       {
+               protect(cycle, handler);
+       }
+
+       protected void protect(RequestCycle cycle, IRequestHandler handler)
        {
                final Object containerRequest = 
cycle.getRequest().getContainerRequest();
                if (containerRequest instanceof HttpServletRequest)
@@ -91,4 +103,5 @@ public class CrossOriginEmbedderPolicyRequestCycleListener 
implements IRequestCy
                        }
                }
        }
+
 }
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/coop/CrossOriginOpenerPolicyRequestCycleListener.java
 
b/wicket-core/src/main/java/org/apache/wicket/coop/CrossOriginOpenerPolicyRequestCycleListener.java
index afbc569efe..4842360b98 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/coop/CrossOriginOpenerPolicyRequestCycleListener.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/coop/CrossOriginOpenerPolicyRequestCycleListener.java
@@ -31,7 +31,7 @@ import jakarta.servlet.http.HttpServletRequest;
  * Sets <a href="https://github.com/whatwg/html/pull/5334/files";>Cross-Origin 
Opener Policy</a>
  * headers on the responses based on the policy specified by {@link 
CrossOriginOpenerPolicyConfiguration}. The header
  * is not set for the paths that are exempted from COOP.
- *
+ * <p>
  * COOP is a mitigation against cross-origin information leaks and is used to 
make websites
  * cross-origin isolated. Setting the COOP header allows you to ensure that a 
top-level window is
  * isolated from other documents by putting them in a different browsing 
context group, so they
@@ -41,7 +41,7 @@ import jakarta.servlet.http.HttpServletRequest;
  * {@link CrossOriginEmbedderPolicyRequestCycleListener} for instructions * on 
how to enable COOP.
  * Read more about cross-origin isolation on
  * <a href="https://web.dev/why-coop-coep/";>https://web.dev/why-coop-coep/</a>
- *
+ * <p>
  *
  * @author Santiago Diaz - [email protected]
  * @author Ecenaz Jen Ozmen - [email protected]
@@ -55,7 +55,7 @@ public class CrossOriginOpenerPolicyRequestCycleListener 
implements IRequestCycl
 
        static final String COOP_HEADER = "Cross-Origin-Opener-Policy";
 
-       private CrossOriginOpenerPolicyConfiguration coopConfig;
+       private final CrossOriginOpenerPolicyConfiguration coopConfig;
 
        public 
CrossOriginOpenerPolicyRequestCycleListener(CrossOriginOpenerPolicyConfiguration
 coopConfig)
        {
@@ -64,6 +64,19 @@ public class CrossOriginOpenerPolicyRequestCycleListener 
implements IRequestCycl
 
        @Override
        public void onRequestHandlerResolved(RequestCycle cycle, 
IRequestHandler handler)
+       {
+               // WICKET-7028- this is needed for redirect to buffer use case.
+               protect(cycle, handler);
+       }
+
+       @Override
+       public void onRequestHandlerExecuted(RequestCycle cycle, 
IRequestHandler handler)
+       {
+               protect(cycle, handler);
+       }
+
+
+       protected void protect(RequestCycle cycle, IRequestHandler handler)
        {
                final Object containerRequest = 
cycle.getRequest().getContainerRequest();
                if (containerRequest instanceof HttpServletRequest)
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/csp/CSPRequestCycleListener.java 
b/wicket-core/src/main/java/org/apache/wicket/csp/CSPRequestCycleListener.java
index cfd83f3137..a64469ded3 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/csp/CSPRequestCycleListener.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/csp/CSPRequestCycleListener.java
@@ -38,8 +38,20 @@ public class CSPRequestCycleListener implements 
IRequestCycleListener
                this.settings = settings;
        }
 
+       @Override
+       public void onRequestHandlerResolved(RequestCycle cycle, 
IRequestHandler handler)
+       {
+               // WICKET-7028- this is needed for redirect to buffer use case.
+               protect(cycle, handler);
+       }
+
        @Override
        public void onRequestHandlerExecuted(RequestCycle cycle, 
IRequestHandler handler)
+       {
+               protect(cycle, handler);
+       }
+
+       protected void protect(RequestCycle cycle, IRequestHandler handler)
        {
                if (!mustProtect(handler) || !(cycle.getResponse() instanceof 
WebResponse))
                {
@@ -53,16 +65,16 @@ public class CSPRequestCycleListener implements 
IRequestCycleListener
                }
 
                settings.getConfiguration().entrySet().stream().filter(entry -> 
entry.getValue().isSet())
-                       .forEach(entry -> {
-                               CSPHeaderMode mode = entry.getKey();
-                               CSPHeaderConfiguration config = 
entry.getValue();
-                               String headerValue = 
config.renderHeaderValue(settings, cycle);
-                               webResponse.setHeader(mode.getHeader(), 
headerValue);
-                               if (config.isAddLegacyHeaders())
-                               {
-                                       
webResponse.setHeader(mode.getLegacyHeader(), headerValue);
-                               }
-                       });
+                               .forEach(entry -> {
+                                       CSPHeaderMode mode = entry.getKey();
+                                       CSPHeaderConfiguration config = 
entry.getValue();
+                                       String headerValue = 
config.renderHeaderValue(settings, cycle);
+                                       webResponse.setHeader(mode.getHeader(), 
headerValue);
+                                       if (config.isAddLegacyHeaders())
+                                       {
+                                               
webResponse.setHeader(mode.getLegacyHeader(), headerValue);
+                                       }
+                               });
        }
 
        /**

Reply via email to