as i and eelco have mentioned numerous times in this thread - there is
an example in wicket-examples/niceurls that we are using to validate our
ideas. this is a good starting point if you want to take a look at the code
to save you a bit of digging around: most of the relevant code lives in
WebRequestEncoder and IPageParametersEncoder implementations.
-Igor
On 12/3/05, * Gili* <[EMAIL PROTECTED]
<mailto:[EMAIL PROTECTED]>> wrote:
Where should I be looking in the new codebase for the clean
URL code
you were discussing? It's not where I was expecting it.
Gili
Igor Vaynberg wrote:
> this is for ENCRYPTED urls and has nothing to do with what we are
> discussing here.
>
> -Igor
>
>
> On 12/3/05, *Gili* < [EMAIL PROTECTED]
<mailto:[EMAIL PROTECTED]>
> <mailto: [EMAIL PROTECTED]
<mailto:[EMAIL PROTECTED]>>> wrote:
>
>
> There you go, this is the CVS diff I was commenting on.
> bookmarkablePage is replaced with "5".
>
>
>
> -------- Original Message --------
> Subject: [Wicket-autocvs] wicket/src/java/wicket/protocol/http
> WebResponseWithCryptedUrl.java,1.7,1.8
> WebRequestWithCryptedUrl.java ,1.10,1.11
> Date: Sun, 20 Nov 2005 14:20:33 +0000
> From: Juergen Donnerstag <[EMAIL PROTECTED]
<mailto:[EMAIL PROTECTED]>
> <mailto:[EMAIL PROTECTED]
<mailto:[EMAIL PROTECTED]>>>
> To: [EMAIL PROTECTED]
<mailto:[EMAIL PROTECTED]>
> <mailto:[EMAIL PROTECTED]
<mailto:[EMAIL PROTECTED]>>
>
> Update of /cvsroot/wicket/wicket/src/java/wicket/protocol/http
> In directory
>
sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5227/src/java/wicket/protocol/http
>
> Modified Files:
> WebResponseWithCryptedUrl.java WebRequestWithCryptedUrl.java
> Log Message:
> fixed [ 1348681 ] Crypted URLs break onSelectionChanged handling
>
> Index: WebRequestWithCryptedUrl.java
>
===================================================================
> RCS file:
>
/cvsroot/wicket/wicket/src/java/wicket/protocol/http/WebRequestWithCryptedUrl.java,v
> retrieving revision 1.10
> retrieving revision 1.11
> diff -C2 -d -r1.10 -r1.11
> *** WebRequestWithCryptedUrl.java 21 Oct 2005 15:21:59
-0000 1.10
> --- WebRequestWithCryptedUrl.java 20 Nov 2005 14:20:31
-0000 1.11
> ***************
> *** 35,39 ****
>
> /**
> ! * it extends WebRequest and decodes URLs encoded by
> * WebResponseWithCryptedUrl. One reason for obfuscating
the URL's
> query string
> * might be, that you don't want the details to be visible
to the
> user to
> --- 35,39 ----
>
> /**
> ! * It extends WebRequest and decodes URLs encoded by
> * WebResponseWithCryptedUrl. One reason for obfuscating
the URL's
> query string
> * might be, that you don't want the details to be visible
to the
> user to
> ***************
> *** 46,53 ****
> /** URL querystring decoded */
> private final String queryString;
> !
> /** URL query parameters decoded */
> private final ValueMap parameters;
> !
> /**
> * Constructor.
> --- 46,53 ----
> /** URL querystring decoded */
> private final String queryString;
> !
> /** URL query parameters decoded */
> private final ValueMap parameters;
> !
> /**
> * Constructor.
> ***************
> *** 66,76 ****
> // Get the crypt implementation from the
application
> ICrypt urlCrypt = Application.get().newCrypt();
> // Decrypt the query string
> final String queryString =
urlCrypt.decrypt(secureParam);
> !
> // The querystring might have been shortened
(length
> reduced).
> // In that case, lengthen the query string again.
> this.queryString = rebuildUrl(queryString);
> !
> // extract parameter key/value pairs from the
query
> string
> this.parameters =
analyzeQueryString(this.queryString);
> --- 66,77 ----
> // Get the crypt implementation from the
application
> ICrypt urlCrypt = Application.get().newCrypt();
> +
> // Decrypt the query string
> final String queryString =
urlCrypt.decrypt(secureParam);
> !
> // The querystring might have been shortened
(length
> reduced).
> // In that case, lengthen the query string again.
> this.queryString = rebuildUrl(queryString);
> !
> // extract parameter key/value pairs from the
query
> string
> this.parameters =
analyzeQueryString(this.queryString);
> ***************
> *** 85,101 ****
> this.parameters = new ValueMap();
> }
> !
> // If available, add POST parameters as well. They
are not
> encrypted.
> // The parameters from HttpRequest
> final Enumeration paramNames =
request.getParameterNames();
> // For all parameters (POST + URL query string)
> while ( paramNames.hasMoreElements())
> {
> ! String paramName = (String)paramNames.nextElement();
> !
> // Ignore the "x" parameter
> if (!"x".equalsIgnoreCase(paramName))
> {
> ! String[] values =
> request.getParameterValues(paramName);
> // add key/value to our parameter map
> this.parameters.put(paramName, values);
> --- 86,103 ----
> this.parameters = new ValueMap();
> }
> !
> // If available, add POST parameters as well. They
are not
> encrypted.
> // The parameters from HttpRequest
> final Enumeration paramNames =
request.getParameterNames();
> +
> // For all parameters (POST + URL query string)
> while (paramNames.hasMoreElements())
> {
> ! String paramName =
(String)paramNames.nextElement();
> !
> // Ignore the "x" parameter
> if (!"x".equalsIgnoreCase(paramName))
> {
> ! String[] values =
> request.getParameterValues(paramName);
> // add key/value to our parameter map
> this.parameters.put(paramName, values);
> ***************
> *** 118,122 ****
> queryString = Strings.replaceAll(queryString, "3=",
> "interface=");
> queryString = Strings.replaceAll(queryString, "5=",
> "bookmarkablePage=");
> !
> return queryString;
> }
> --- 120,124 ----
> queryString = Strings.replaceAll(queryString, "3=",
> "interface=");
> queryString = Strings.replaceAll(queryString, "5=",
> "bookmarkablePage=");
> !
> return queryString;
> }
> ***************
> *** 134,138 ****
> // Get a list of strings separated by the delimiter
> final StringList pairs =
StringList.tokenize(queryString,
> "&");
> !
> // Go through each string in the list
> for (IStringIterator iterator = pairs.iterator();
> iterator.hasNext();)
> --- 136,140 ----
> // Get a list of strings separated by the delimiter
> final StringList pairs = StringList.tokenize
> (queryString, "&");
> !
> // Go through each string in the list
> for (IStringIterator iterator = pairs.iterator();
> iterator.hasNext();)
> ***************
> *** 178,185 ****
> }
> }
> !
> return params;
> }
> !
> /**
> * Gets the request parameter with the given key.
> --- 180,187 ----
> }
> }
> !
> return params;
> }
> !
> /**
> * Gets the request parameter with the given key.
>
> Index: WebResponseWithCryptedUrl.java
>
===================================================================
> RCS file:
>
/cvsroot/wicket/wicket/src/java/wicket/protocol/http/WebResponseWithCryptedUrl.java,v
> retrieving revision 1.7
> retrieving revision 1.8
> diff -C2 -d -r1.7 -r1.8
> *** WebResponseWithCryptedUrl.java 6 Oct 2005 21:17:33
-0000 1.7
> --- WebResponseWithCryptedUrl.java 20 Nov 2005 14:20:31
-0000 1.8
> ***************
> *** 71,78 ****
> // The url's path
> String urlPrefix = url.substring(0, pos);
> !
> // Extract the querystring
> String queryString = url.substring(pos + 1);
> !
> // if the querystring starts with a
parameter like
> // "x=", than don#t change the querystring
as it
> --- 71,78 ----
> // The url's path
> String urlPrefix = url.substring (0, pos);
> !
> // Extract the querystring
> String queryString = url.substring(pos + 1);
> !
> // if the querystring starts with a
parameter like
> // "x=", than don#t change the querystring
as it
> ***************
> *** 85,93 ****
> // information.
> queryString = shortenUrl(queryString);
> !
> // encrypt the query string
> -
> final String encryptedQueryString =
> urlCrypt.encrypt(queryString);
> !
> // build the new complete url
> final String encryptedUrl = urlPrefix
+ "?x=" +
> escapeUrl(encryptedQueryString);
> --- 85,92 ----
> // information.
> queryString = shortenUrl(queryString);
> !
> // encrypt the query string
> final String encryptedQueryString =
> urlCrypt.encrypt(queryString);
> !
> // build the new complete url
> final String encryptedUrl = urlPrefix
+ "?x=" +
> escapeUrl(encryptedQueryString);
> ***************
> *** 96,104 ****
> }
> }
> !
> // we didn't change anything
> return url;
> }
> !
> /**
> * Escape invalid URL characters
> --- 95,103 ----
> }
> }
> !
> // we didn't change anything
> return url;
> }
> !
> /**
> * Escape invalid URL characters
> ***************
> *** 109,125 ****
> private String escapeUrl(String queryString)
> {
> ! queryString = Strings.replaceAll(queryString, " ",
"%20");
> ! queryString = Strings.replaceAll(queryString, "\"",
"%22");
> ! queryString = Strings.replaceAll(queryString, "%",
"%26");
> ! queryString = Strings.replaceAll(queryString, "=",
"%3D");
> ! queryString = Strings.replaceAll (queryString, "/",
"%2F");
> ! queryString = Strings.replaceAll(queryString, "+",
"%2B");
> ! queryString = Strings.replaceAll (queryString, "&",
"%26");
> ! queryString = Strings.replaceAll(queryString, "~",
"%7E");
> ! queryString = Strings.replaceAll(queryString, "?",
"%3F");
>
> ! return queryString;
> }
> !
> /**
> * Try to shorten the querystring without loosing
information
> --- 108,148 ----
> private String escapeUrl(String queryString)
> {
> ! StringBuffer buf = new StringBuffer(
queryString.length()
> * 2);
> ! for (int i=0; i < queryString.length(); i++)
> ! {
> ! char ch = queryString.charAt(i);
> ! switch (ch)
> ! {
> ! case ' ': buf.append ("%20"); break;
> ! case '<': buf.append("%3C"); break;
> ! case '>': buf.append("%3E"); break;
> ! case '#': buf.append("%23"); break;
> ! case '{': buf.append("%7B"); break;
> ! case '}': buf.append("%7D"); break;
> ! case '|': buf.append("%7C"); break;
> ! case '^': buf.append("%5E"); break;
> ! case '\"': buf.append("%22"); break;
> ! case '%': buf.append("%26"); break;
> ! case '=': buf.append("%3D"); break;
> ! case '/': buf.append("%2F"); break;
> ! case '+': buf.append("%2B"); break;
> ! case '&': buf.append("%26"); break;
> ! case '~': buf.append("%7E"); break;
> ! case '?': buf.append("%3F"); break;
> ! case '\\': buf.append("%5C"); break;
> ! case '[': buf.append("%5B"); break;
> ! case ']': buf.append("%5D"); break;
> ! case '`': buf.append("%60"); break;
> ! case ';': buf.append("%3B"); break;
> ! case ':': buf.append("%3A"); break;
> ! case '@': buf.append("%40"); break;
> ! case '$': buf.append("%24"); break;
> ! default: buf.append(ch);
> ! }
> ! }
>
> ! return buf.toString();
> }
> !
> /**
> * Try to shorten the querystring without loosing
information
> ***************
> *** 135,139 ****
> queryString = Strings.replaceAll(queryString,
"interface=",
> "3=");
> queryString = Strings.replaceAll (queryString,
> "bookmarkablePage=", "5=");
> !
> // For debugging only: determine possibilities to
further
> shorten
> // the query string
> --- 158,162 ----
> queryString = Strings.replaceAll(queryString,
"interface=",
> "3=");
> queryString = Strings.replaceAll(queryString,
> "bookmarkablePage=", "5=");
> !
> // For debugging only: determine possibilities to
further
> shorten
> // the query string
> ***************
> *** 149,153 ****
> }
> }
> !
> return queryString;
> }
> --- 172,176 ----
> }
> }
> !
> return queryString;
> }
>
>
>
> -------------------------------------------------------
> This SF.Net email is sponsored by the JBoss Inc. Get
Certified Today
> Register for a JBoss Training Course. Free Certification Exam
> for All Training Attendees Through End of 2005. For more info
visit:
> http://ads.osdn.com/?ad_id=7628&alloc_id=16845&op=click
<http://ads.osdn.com/?ad_id=7628&alloc_id=16845&op=click>
> <http://ads.osdn.com/?ad_id=7628&alloc_id=16845&op=click
<http://ads.osdn.com/?ad_id=7628&alloc_id=16845&op=click>>
> _______________________________________________
> Wicket-autocvs mailing list
> [EMAIL PROTECTED]
<mailto:[EMAIL PROTECTED]>
> <mailto: [EMAIL PROTECTED]
<mailto:[EMAIL PROTECTED]>>
> https://lists.sourceforge.net/lists/listinfo/wicket-autocvs
<https://lists.sourceforge.net/lists/listinfo/wicket-autocvs>
>
>
>
> Gili wrote:
>
> >
> > No problem. I was simply basing this on CVS diffs I
saw on the
> mailing list, so I didn't pull this out of the air. I'll
check it
> out now.
> >
> > Gili
> >
> > Eelco Hillenius wrote:
> >
> >>> I haven't taken a look at the latest code yet
> >>
> >>
> >>
> >>
> >> Well, please do that first before commenting :)
> >>
> >> Eelco
> >>
> >>
> >> -------------------------------------------------------
> >> This SF.net email is sponsored by: Splunk Inc. Do you
grep through
> log files
> >> for problems? Stop! Download the new AJAX search engine
that makes
> >> searching your log files as easy as surfing
the web. DOWNLOAD
> SPLUNK!
> >> http://ads.osdn.com/?ad_idv37&alloc_id865&op=click
<http://ads.osdn.com/?ad_idv37&alloc_id865&op=click>
> <http://ads.osdn.com/?ad_idv37&alloc_id865&op=click
<http://ads.osdn.com/?ad_idv37&alloc_id865&op=click>>
> >> _______________________________________________
> >> Wicket-user mailing list
> >> Wicket-user@lists.sourceforge.net
<mailto:Wicket-user@lists.sourceforge.net>
> <mailto: Wicket-user@lists.sourceforge.net
<mailto:Wicket-user@lists.sourceforge.net>>
> >> https://lists.sourceforge.net/lists/listinfo/wicket-user
> < https://lists.sourceforge.net/lists/listinfo/wicket-user>
> >>
> >
>
> --
> http://www.desktopbeautifier.com/
>
>
>
> -------------------------------------------------------
> This SF.net email is sponsored by: Splunk Inc. Do you grep
through
> log files
> for problems? Stop! Download the new AJAX search engine
that makes
> searching your log files as easy as surfing
the web. DOWNLOAD SPLUNK!
> http://ads.osdn.com/?ad_id=7637&alloc_id=16865&op=click
<http://ads.osdn.com/?ad_id=7637&alloc_id=16865&op=click>
> <http://ads.osdn.com/?ad_id=7637&alloc_id=16865&op=click
<http://ads.osdn.com/?ad_id=7637&alloc_id=16865&op=click>>
> _______________________________________________
> Wicket-user mailing list
> Wicket-user@lists.sourceforge.net
<mailto:Wicket-user@lists.sourceforge.net>
> <mailto:Wicket-user@lists.sourceforge.net
<mailto:Wicket-user@lists.sourceforge.net>>
> https://lists.sourceforge.net/lists/listinfo/wicket-user
>
>
--
http://www.desktopbeautifier.com/
-------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc. Do you grep through
log files
for problems? Stop! Download the new AJAX search engine that makes
searching your log files as easy as surfing the web. DOWNLOAD SPLUNK!
http://ads.osdn.com/?ad_id=7637&alloc_id=16865&op=click
<http://ads.osdn.com/?ad_id=7637&alloc_id=16865&op=click>
_______________________________________________
Wicket-user mailing list
Wicket-user@lists.sourceforge.net
<mailto:Wicket-user@lists.sourceforge.net>
https://lists.sourceforge.net/lists/listinfo/wicket-user