Add unit test for sone template page and fix parameter encoding
[Sone.git] / src / main / java / net / pterodactylus / sone / web / SoneTemplatePage.java
index b3e7a6a..6278321 100644 (file)
@@ -26,6 +26,8 @@ import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 
+import javax.annotation.Nonnull;
+
 import net.pterodactylus.sone.data.Sone;
 import net.pterodactylus.sone.main.SonePlugin;
 import net.pterodactylus.sone.web.page.FreenetRequest;
@@ -236,14 +238,14 @@ public class SoneTemplatePage extends FreenetTemplatePage {
         * {@inheritDoc}
         */
        @Override
-       protected void processTemplate(FreenetRequest request, TemplateContext templateContext) throws RedirectException {
+       protected final void processTemplate(FreenetRequest request, TemplateContext templateContext) throws RedirectException {
                super.processTemplate(request, templateContext);
                Sone currentSone = getCurrentSone(request.getToadletContext(), false);
                templateContext.set("core", webInterface.getCore());
                templateContext.set("currentSone", currentSone);
                templateContext.set("localSones", webInterface.getCore().getLocalSones());
                templateContext.set("request", request);
-               templateContext.set("currentVersion", SonePlugin.VERSION);
+               templateContext.set("currentVersion", SonePlugin.getPluginVersion());
                templateContext.set("hasLatestVersion", webInterface.getCore().getUpdateChecker().hasLatestVersion());
                templateContext.set("latestEdition", webInterface.getCore().getUpdateChecker().getLatestEdition());
                templateContext.set("latestVersion", webInterface.getCore().getUpdateChecker().getLatestVersion());
@@ -252,6 +254,10 @@ public class SoneTemplatePage extends FreenetTemplatePage {
                Collections.sort(notifications, Notification.CREATED_TIME_SORTER);
                templateContext.set("notifications", notifications);
                templateContext.set("notificationHash", notifications.hashCode());
+               handleRequest(request, templateContext);
+       }
+
+       protected void handleRequest(@Nonnull FreenetRequest request, @Nonnull TemplateContext templateContext) throws RedirectException {
        }
 
        /**
@@ -266,24 +272,29 @@ public class SoneTemplatePage extends FreenetTemplatePage {
                                StringBuilder requestParameters = new StringBuilder();
                                for (String parameterName : httpRequest.getParameterNames()) {
                                        if (requestParameters.length() > 0) {
-                                               requestParameters.append("%26");
+                                               requestParameters.append("&");
                                        }
                                        String[] parameterValues = httpRequest.getMultipleParam(parameterName);
                                        for (String parameterValue : parameterValues) {
-                                               try {
-                                                       requestParameters.append(URLEncoder.encode(parameterName, "UTF-8")).append("%3d").append(URLEncoder.encode(parameterValue, "UTF-8"));
-                                               } catch (UnsupportedEncodingException uee1) {
-                                                       /* A JVM without UTF-8? I don’t think so. */
-                                               }
+                                               requestParameters.append(urlEncode(parameterName)).append("=").append(urlEncode(parameterValue));
                                        }
                                }
                                originalUrl += "?" + requestParameters.toString();
                        }
-                       return "login.html?target=" + originalUrl;
+                       return "login.html?target=" + urlEncode(originalUrl);
                }
                return null;
        }
 
+       private static String urlEncode(String value) {
+               try {
+                       return URLEncoder.encode(value, "UTF-8");
+               } catch (UnsupportedEncodingException uee1) {
+                                                       /* A JVM without UTF-8? I don’t think so. */
+                       throw new RuntimeException(uee1);
+               }
+       }
+
        /**
         * {@inheritDoc}
         */