summaryrefslogtreecommitdiffstats
path: root/src/com/gitblit/wicket
diff options
context:
space:
mode:
authorJames Moger <james.moger@gitblit.com>2011-07-18 18:10:34 -0400
committerJames Moger <james.moger@gitblit.com>2011-07-18 18:10:34 -0400
commit7e5ee5a454ec396b5dc2f00e89adeca84d6ef683 (patch)
tree1dfa2f1914646df33818e42bd51c0773e3395814 /src/com/gitblit/wicket
parentb795b83d76b7a044c7d5bafeb8e45eefb1303581 (diff)
downloadgitblit-7e5ee5a454ec396b5dc2f00e89adeca84d6ef683.tar.gz
gitblit-7e5ee5a454ec396b5dc2f00e89adeca84d6ef683.zip
Allow specification of forward-slash character in urls (issue 11)
Diffstat (limited to 'src/com/gitblit/wicket')
-rw-r--r--src/com/gitblit/wicket/GitBlitWebApp.java2
-rw-r--r--src/com/gitblit/wicket/GitblitParamUrlCodingStrategy.java83
2 files changed, 84 insertions, 1 deletions
diff --git a/src/com/gitblit/wicket/GitBlitWebApp.java b/src/com/gitblit/wicket/GitBlitWebApp.java
index 1b13ea38..4b5e6604 100644
--- a/src/com/gitblit/wicket/GitBlitWebApp.java
+++ b/src/com/gitblit/wicket/GitBlitWebApp.java
@@ -110,7 +110,7 @@ public class GitBlitWebApp extends WebApplication {
if (!GitBlit.getBoolean(Keys.web.mountParameters, true)) {
parameters = new String[] {};
}
- mount(new MixedParamUrlCodingStrategy(location, clazz, parameters));
+ mount(new GitblitParamUrlCodingStrategy(location, clazz, parameters));
}
@Override
diff --git a/src/com/gitblit/wicket/GitblitParamUrlCodingStrategy.java b/src/com/gitblit/wicket/GitblitParamUrlCodingStrategy.java
new file mode 100644
index 00000000..c30b9c30
--- /dev/null
+++ b/src/com/gitblit/wicket/GitblitParamUrlCodingStrategy.java
@@ -0,0 +1,83 @@
+/*
+ * Copyright 2011 gitblit.com.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.gitblit.wicket;
+
+import org.apache.wicket.Page;
+import org.apache.wicket.protocol.http.WicketURLDecoder;
+import org.apache.wicket.protocol.http.WicketURLEncoder;
+import org.apache.wicket.request.target.coding.MixedParamUrlCodingStrategy;
+
+import com.gitblit.GitBlit;
+import com.gitblit.Keys;
+
+/**
+ * Simple subclass of mixed parameter url coding strategy that works around the
+ * encoded forward-slash issue that is present in some servlet containers.
+ *
+ * https://issues.apache.org/jira/browse/WICKET-1303
+ * http://tomcat.apache.org/security-6.html
+ *
+ * @author James Moger
+ *
+ */
+public class GitblitParamUrlCodingStrategy extends MixedParamUrlCodingStrategy {
+
+ /**
+ * Construct.
+ *
+ * @param <C>
+ * @param mountPath
+ * mount path (not empty)
+ * @param bookmarkablePageClass
+ * class of mounted page (not null)
+ * @param parameterNames
+ * the parameter names (not null)
+ */
+ public <C extends Page> GitblitParamUrlCodingStrategy(String mountPath,
+ Class<C> bookmarkablePageClass, String[] parameterNames) {
+ super(mountPath, bookmarkablePageClass, parameterNames);
+ }
+
+ /**
+ * Url encodes a string that is mean for a URL path (e.g., between slashes)
+ *
+ * @param string
+ * string to be encoded
+ * @return encoded string
+ */
+ protected String urlEncodePathComponent(String string) {
+ char altChar = GitBlit.getChar(Keys.web.forwardSlashCharacter, '/');
+ if (altChar != '/') {
+ string = string.replace('/', altChar);
+ }
+ return super.urlEncodePathComponent(string);
+ }
+
+ /**
+ * Returns a decoded value of the given value (taken from a URL path
+ * section)
+ *
+ * @param value
+ * @return Decodes the value
+ */
+ protected String urlDecodePathComponent(String value) {
+ char altChar = GitBlit.getChar(Keys.web.forwardSlashCharacter, '/');
+ if (altChar != '/') {
+ value = value.replace(altChar, '/');
+ }
+ return super.urlDecodePathComponent(value);
+ }
+} \ No newline at end of file