X-Git-Url: https://git.pterodactylus.net/?p=Sone.git;a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fweb%2Fpage%2FFreenetTemplatePage.java;h=cd15cbf99812d3db8af8544be84b7622f1ee43e5;hp=0668154012fb439f9ba364bf7827ca93a4c6fd09;hb=c9e306ac8e3ada846e87a0cc256a20fc148f381c;hpb=ee05a67b3f1e796b6c4bdcd709ef0983103c455f diff --git a/src/main/java/net/pterodactylus/sone/web/page/FreenetTemplatePage.java b/src/main/java/net/pterodactylus/sone/web/page/FreenetTemplatePage.java index 0668154..cd15cbf 100644 --- a/src/main/java/net/pterodactylus/sone/web/page/FreenetTemplatePage.java +++ b/src/main/java/net/pterodactylus/sone/web/page/FreenetTemplatePage.java @@ -1,5 +1,5 @@ /* - * shortener - TemplatePage.java - Copyright © 2010 David Roden + * Sone - FreenetTemplatePage.java - Copyright © 2010 David Roden * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -17,7 +17,9 @@ package net.pterodactylus.sone.web.page; +import java.io.IOException; import java.io.StringWriter; +import java.net.URI; import java.util.Collection; import java.util.Collections; import java.util.List; @@ -26,11 +28,14 @@ import java.util.Map.Entry; import java.util.logging.Level; import java.util.logging.Logger; -import net.pterodactylus.sone.web.page.Page.Request.Method; import net.pterodactylus.util.logging.Logging; import net.pterodactylus.util.template.Template; import net.pterodactylus.util.template.TemplateContext; import net.pterodactylus.util.template.TemplateContextFactory; +import net.pterodactylus.util.web.Method; +import net.pterodactylus.util.web.Page; +import net.pterodactylus.util.web.RedirectResponse; +import net.pterodactylus.util.web.Response; import freenet.clients.http.LinkEnabledCallback; import freenet.clients.http.PageMaker; import freenet.clients.http.PageNode; @@ -43,7 +48,7 @@ import freenet.support.HTMLNode; * * @author David ‘Bombe’ Roden */ -public class FreenetTemplatePage implements Page, LinkEnabledCallback { +public class FreenetTemplatePage implements FreenetPage, LinkEnabledCallback { /** The logger. */ private static final Logger logger = Logging.getLogger(FreenetTemplatePage.class); @@ -95,7 +100,7 @@ public class FreenetTemplatePage implements Page, LinkEnabledCallback { * The request to serve * @return The title of the page */ - protected String getPageTitle(Request request) { + protected String getPageTitle(FreenetRequest request) { return null; } @@ -103,12 +108,23 @@ public class FreenetTemplatePage implements Page, LinkEnabledCallback { * {@inheritDoc} */ @Override - public Response handleRequest(Request request) { + public boolean isPrefixPage() { + return false; + } + + /** + * {@inheritDoc} + */ + @Override + public Response handleRequest(FreenetRequest request, Response response) throws IOException { String redirectTarget = getRedirectTarget(request); if (redirectTarget != null) { return new RedirectResponse(redirectTarget); } + if (isFullAccessOnly() && !request.getToadletContext().isAllowedFullAccess()) { + return response.setStatusCode(401).setStatusText("Not authorized").setContentType("text/html"); + } ToadletContext toadletContext = request.getToadletContext(); if (request.getMethod() == Method.POST) { /* require form password. */ @@ -139,7 +155,7 @@ public class FreenetTemplatePage implements Page, LinkEnabledCallback { long start = System.nanoTime(); processTemplate(request, templateContext); long finish = System.nanoTime(); - logger.log(Level.FINEST, "Template was rendered in " + ((finish - start) / 1000) / 1000.0 + "ms."); + logger.log(Level.FINEST, "Template was rendered in %dms.", ((finish - start) / 1000) / 1000.0); } catch (RedirectException re1) { return new RedirectResponse(re1.getTarget()); } @@ -150,7 +166,7 @@ public class FreenetTemplatePage implements Page, LinkEnabledCallback { postProcess(request, templateContext); - return new Response(200, "OK", "text/html", pageNode.outer.generate()); + return response.setStatusCode(200).setStatusText("OK").setContentType("text/html").write(pageNode.outer.generate()); } /** @@ -183,16 +199,15 @@ public class FreenetTemplatePage implements Page, LinkEnabledCallback { * @throws RedirectException * if the processing page wants to redirect after processing */ - protected void processTemplate(Request request, TemplateContext templateContext) throws RedirectException { + protected void processTemplate(FreenetRequest request, TemplateContext templateContext) throws RedirectException { /* do nothing. */ } /** * This method will be called after - * {@link #processTemplate(net.pterodactylus.sone.web.page.Page.Request, TemplateContext)} - * has processed the template and the template was rendered. This method - * will not be called if - * {@link #processTemplate(net.pterodactylus.sone.web.page.Page.Request, TemplateContext)} + * {@link #processTemplate(FreenetRequest, TemplateContext)} has processed + * the template and the template was rendered. This method will not be + * called if {@link #processTemplate(FreenetRequest, TemplateContext)} * throws a {@link RedirectException}! * * @param request @@ -200,7 +215,7 @@ public class FreenetTemplatePage implements Page, LinkEnabledCallback { * @param templateContext * The template context that supplied the rendered data */ - protected void postProcess(Request request, TemplateContext templateContext) { + protected void postProcess(FreenetRequest request, TemplateContext templateContext) { /* do nothing. */ } @@ -212,7 +227,7 @@ public class FreenetTemplatePage implements Page, LinkEnabledCallback { * The request that is processed * @return The URL to redirect to, or {@code null} to not redirect */ - protected String getRedirectTarget(Page.Request request) { + protected String getRedirectTarget(FreenetRequest request) { return null; } @@ -223,10 +238,29 @@ public class FreenetTemplatePage implements Page, LinkEnabledCallback { * The request for which to return the link nodes * @return All link nodes that should be added to the HTML head */ - protected List> getAdditionalLinkNodes(Request request) { + protected List> getAdditionalLinkNodes(FreenetRequest request) { return Collections.emptyList(); } + /** + * Returns whether this page should only be allowed for requests from hosts + * with full access. + * + * @return {@code true} if this page should only be allowed for hosts with + * full access, {@code false} to allow this page for any host + */ + protected boolean isFullAccessOnly() { + return false; + } + + /** + * {@inheritDoc} + */ + @Override + public boolean isLinkExcepted(URI link) { + return false; + } + // // INTERFACE LinkEnabledCallback // @@ -236,13 +270,13 @@ public class FreenetTemplatePage implements Page, LinkEnabledCallback { */ @Override public boolean isEnabled(ToadletContext toadletContext) { - return true; + return !isFullAccessOnly(); } /** * Exception that can be thrown to signal that a subclassed {@link Page} * wants to redirect the user during the - * {@link FreenetTemplatePage#processTemplate(net.pterodactylus.sone.web.page.Page.Request, TemplateContext)} + * {@link FreenetTemplatePage#processTemplate(FreenetRequest, TemplateContext)} * method call. * * @author David ‘Bombe’ Roden