Repository: deltaspike
Updated Branches:
  refs/heads/master e8171f115 -> cd75b04e3


DELTASPIKE-752 optional config (deltaspike.window-id.max_length)


Project: http://git-wip-us.apache.org/repos/asf/deltaspike/repo
Commit: http://git-wip-us.apache.org/repos/asf/deltaspike/commit/cd75b04e
Tree: http://git-wip-us.apache.org/repos/asf/deltaspike/tree/cd75b04e
Diff: http://git-wip-us.apache.org/repos/asf/deltaspike/diff/cd75b04e

Branch: refs/heads/master
Commit: cd75b04e3c557f778b6a1dcdcf7f21a6c9d2be40
Parents: e8171f1
Author: gpetracek <gpetra...@apache.org>
Authored: Mon Oct 27 11:51:09 2014 +0100
Committer: gpetracek <gpetra...@apache.org>
Committed: Mon Oct 27 11:59:51 2014 +0100

----------------------------------------------------------------------
 .../component/window/WindowIdHtmlRenderer.java  |  7 ++---
 .../impl/scope/window/DefaultClientWindow.java  | 16 ++++++++----
 .../jsf/impl/util/ClientWindowHelper.java       | 27 +++++++++++++++++++-
 3 files changed, 41 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/deltaspike/blob/cd75b04e/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/component/window/WindowIdHtmlRenderer.java
----------------------------------------------------------------------
diff --git 
a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/component/window/WindowIdHtmlRenderer.java
 
b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/component/window/WindowIdHtmlRenderer.java
index e995ff8..ddac083 100644
--- 
a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/component/window/WindowIdHtmlRenderer.java
+++ 
b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/component/window/WindowIdHtmlRenderer.java
@@ -30,7 +30,6 @@ import javax.servlet.http.Cookie;
 
 import org.apache.deltaspike.core.api.provider.BeanProvider;
 import org.apache.deltaspike.core.spi.scope.window.WindowContext;
-import org.apache.deltaspike.jsf.impl.scope.window.DefaultClientWindow;
 import org.apache.deltaspike.jsf.impl.util.ClientWindowHelper;
 import org.apache.deltaspike.jsf.spi.scope.window.ClientWindowConfig;
 
@@ -42,6 +41,7 @@ public class WindowIdHtmlRenderer extends Renderer
 {
     private volatile WindowContext windowContext;
     private volatile ClientWindowConfig clientWindowConfig;
+    private int maxWindowIdCount = 10;
 
     /**
      * 'deltaspikeJsWindowId' will be used to:
@@ -61,9 +61,9 @@ public class WindowIdHtmlRenderer extends Renderer
         //already ensured by DefaultClientWindow
         //just to ensure that we don't get a security issue in case of a 
customized client-window implementation
         //will never happen usually -> no real overhead
-        if (windowId != null && windowId.length() > 
DefaultClientWindow.SECURE_ID_LENGTH)
+        if (windowId != null && windowId.length() > this.maxWindowIdCount)
         {
-            windowId = windowId.substring(0, 
DefaultClientWindow.SECURE_ID_LENGTH);
+            windowId = windowId.substring(0, this.maxWindowIdCount);
         }
 
         String mode = 
getClientWindowConfig().getClientWindowRenderMode(context).name();
@@ -95,6 +95,7 @@ public class WindowIdHtmlRenderer extends Renderer
                 if (windowContext == null)
                 {
                     windowContext = 
BeanProvider.getContextualReference(WindowContext.class);
+                    maxWindowIdCount = 
ClientWindowHelper.getMaxWindowIdLength();
                 }
             }
         }

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/cd75b04e/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/scope/window/DefaultClientWindow.java
----------------------------------------------------------------------
diff --git 
a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/scope/window/DefaultClientWindow.java
 
b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/scope/window/DefaultClientWindow.java
index 2767b69..1fa61f6 100644
--- 
a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/scope/window/DefaultClientWindow.java
+++ 
b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/scope/window/DefaultClientWindow.java
@@ -25,6 +25,7 @@ import org.apache.deltaspike.jsf.impl.util.JsfUtils;
 import org.apache.deltaspike.jsf.spi.scope.window.ClientWindow;
 import org.apache.deltaspike.jsf.spi.scope.window.ClientWindowConfig;
 
+import javax.annotation.PostConstruct;
 import javax.enterprise.context.ApplicationScoped;
 import javax.faces.FacesException;
 import javax.faces.context.ExternalContext;
@@ -69,9 +70,6 @@ public class DefaultClientWindow implements ClientWindow
      */
     public static final String DELTASPIKE_WINDOW_ID_URL_PARAM = "dswid";
 
-    /*enough for the integer generated by #generateNewWindowId - see 
DELTASPIKE-752 */
-    public static final int SECURE_ID_LENGTH = 10;
-
     private static final String 
PER_USE_CLIENT_WINDOW_URL_QUERY_PARAMETER_DISABLED_KEY =
             ClientWindow.class.getName() + ".ClientWindowRenderModeEnablement";
 
@@ -108,15 +106,23 @@ public class DefaultClientWindow implements ClientWindow
     @Inject
     private WindowContext windowContext;
 
+    private int maxWindowIdCount = 10;
+
+
+    @PostConstruct
+    protected void init()
+    {
+        this.maxWindowIdCount = ClientWindowHelper.getMaxWindowIdLength();
+    }
 
     @Override
     public String getWindowId(FacesContext facesContext)
     {
         String windowId = getOrCreateWindowId(facesContext);
 
-        if (windowId != null && windowId.length() > SECURE_ID_LENGTH)
+        if (windowId != null && windowId.length() > this.maxWindowIdCount)
         {
-            windowId = windowId.substring(0, SECURE_ID_LENGTH);
+            windowId = windowId.substring(0, this.maxWindowIdCount);
         }
         return windowId;
     }

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/cd75b04e/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/util/ClientWindowHelper.java
----------------------------------------------------------------------
diff --git 
a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/util/ClientWindowHelper.java
 
b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/util/ClientWindowHelper.java
index 79a5996..927cb38 100644
--- 
a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/util/ClientWindowHelper.java
+++ 
b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/util/ClientWindowHelper.java
@@ -22,21 +22,27 @@ import java.io.IOException;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Map.Entry;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 import javax.enterprise.inject.Typed;
 import javax.faces.FacesException;
 import javax.faces.context.ExternalContext;
 import javax.faces.context.FacesContext;
 import javax.servlet.http.Cookie;
 import javax.servlet.http.HttpServletResponse;
+
+import org.apache.deltaspike.core.api.config.ConfigResolver;
 import org.apache.deltaspike.jsf.spi.scope.window.ClientWindow;
 
 @Typed()
 public abstract class ClientWindowHelper
-{    
+{
     public static final String INITIAL_REDIRECT_WINDOW_ID = 
ClientWindowHelper.class.getName()
             + ".INITIAL_REDIRECT_WINDOW_ID";
     public static final String REQUEST_WINDOW_ID_COOKIE_PREFIX = "dsrwid-";
 
+    private static final Logger LOG = 
Logger.getLogger(ClientWindowHelper.class.getName());
+
     /**
      * Handles the initial redirect for the URL modus, if no windowId is 
available in the current request URL.
      *
@@ -154,4 +160,23 @@ public abstract class ClientWindowHelper
         cookie.setMaxAge(0);
         ((HttpServletResponse) 
context.getExternalContext().getResponse()).addCookie(cookie);
     }
+
+    public static int getMaxWindowIdLength()
+    {
+        //10 is enough for the integer generated by 
DefaultClientWindow#generateNewWindowId - see DELTASPIKE-752
+        int result = 
Integer.parseInt(ConfigResolver.getPropertyValue("deltaspike.window-id.max_length",
 "" + 10));
+
+        if (result > 10)
+        {
+            if (LOG.isLoggable(Level.WARNING))
+            {
+                LOG.warning("ATTENTION: if you change this value to be 
significant longer than 10, " +
+                    "you can introduce a security issue in 
WindowIdHtmlRenderer. " +
+                    "If you increase it because window.name contains a value 
already, " +
+                    "please revisit that usage or " +
+                    "create shorter unique ids since they just need to be 
unique within the user-session.");
+            }
+        }
+        return result;
+    }
 }

Reply via email to