Author: mgrigorov
Date: Mon Jul 25 13:57:47 2011
New Revision: 1150703

URL: http://svn.apache.org/viewvc?rev=1150703&view=rev
Log:
WICKET-3926 CryptoMapper does not correctly decrypt URLs for the home page


Modified:
    
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/mapper/CryptoMapper.java
    
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/mapper/CryptoMapperTest.java

Modified: 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/mapper/CryptoMapper.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/mapper/CryptoMapper.java?rev=1150703&r1=1150702&r2=1150703&view=diff
==============================================================================
--- 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/mapper/CryptoMapper.java
 (original)
+++ 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/mapper/CryptoMapper.java
 Mon Jul 25 13:57:47 2011
@@ -175,6 +175,11 @@ public class CryptoMapper implements IRe
                        Url originalUrl = Url.parse(decryptedUrl, 
request.getCharset());
 
                        int originalNumberOfSegments = 
originalUrl.getSegments().size();
+                       if (originalNumberOfSegments == 0 &&
+                               originalUrl.getQueryParameters().isEmpty() == 
false)
+                       {
+                               originalNumberOfSegments = 1;
+                       }
                        int numberOfSegments = 
encryptedUrl.getSegments().size();
 
                        char[] encryptedChars = 
encryptedUrlString.toCharArray();
@@ -195,7 +200,8 @@ public class CryptoMapper implements IRe
                                segment += String.format("%02x", Math.abs(hash 
% 256));
                                hash = hashString(segment);
 
-                               if (segment.equals(segments.get(segNo)))
+                               if (segment.equals(segments.get(segNo)) &&
+                                       originalUrl.getSegments().size() >= 
segNo)
                                {
                                        
url.getSegments().add(originalUrl.getSegments().get(segNo - 1));
                                }

Modified: 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/mapper/CryptoMapperTest.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/mapper/CryptoMapperTest.java?rev=1150703&r1=1150702&r2=1150703&view=diff
==============================================================================
--- 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/mapper/CryptoMapperTest.java
 (original)
+++ 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/mapper/CryptoMapperTest.java
 Mon Jul 25 13:57:47 2011
@@ -121,4 +121,28 @@ public class CryptoMapperTest extends Ab
                PageParameters actualParameters = handler.getPageParameters();
                assertEquals(expectedParameters, actualParameters);
        }
+
+       /**
+        * https://issues.apache.org/jira/browse/WICKET-3926
+        */
+       public void testHomePageWithParameters()
+       {
+               String expectedEncrypted = 
"0lhSFdMIt3yZUNwbtLuXgDePMclxSbks/0lh9b";
+               PageParameters expectedParameters = new PageParameters();
+               expectedParameters.add("namedKey1", "namedValue1");
+
+               RenderPageRequestHandler renderPageRequestHandler = new 
RenderPageRequestHandler(
+                       new PageProvider(tester.getApplication().getHomePage(), 
expectedParameters));
+               Url url = mapper.mapHandler(renderPageRequestHandler);
+               assertEquals(expectedEncrypted, url.toString());
+
+               Request request = getRequest(url);
+               IRequestHandler requestHandler = mapper.mapRequest(request);
+               assertTrue(requestHandler instanceof RenderPageRequestHandler);
+
+               RenderPageRequestHandler handler = 
(RenderPageRequestHandler)requestHandler;
+               assertEquals(tester.getApplication().getHomePage(), 
handler.getPageClass());
+               PageParameters actualParameters = handler.getPageParameters();
+               assertEquals(expectedParameters, actualParameters);
+       }
 }


Reply via email to