*/
@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. */
String formPassword = request.getHttpRequest().getPartAsStringFailsafe("formPassword", 32);
if (!formPassword.equals(toadletContext.getContainer().getFormPassword())) {
return new RedirectResponse(invalidFormPasswordRedirectTarget);
}
}
PageMaker pageMaker = toadletContext.getPageMaker();
PageNode pageNode = pageMaker.getPageNode(getPageTitle(request), toadletContext);
for (String styleSheet : getStyleSheets()) {
pageNode.addCustomStyleSheet(styleSheet);
}
for (Map<String, String> linkNodeParameters : getAdditionalLinkNodes(request)) {
HTMLNode linkNode = pageNode.headNode.addChild("link");
for (Entry<String, String> parameter : linkNodeParameters.entrySet()) {
linkNode.addAttribute(parameter.getKey(), parameter.getValue());
}
}
String shortcutIcon = getShortcutIcon();
if (shortcutIcon != null) {
pageNode.addForwardLink("icon", shortcutIcon);
}
TemplateContext templateContext = templateContextFactory.createTemplateContext();
templateContext.mergeContext(template.getInitialContext());
try {
long start = System.nanoTime();
processTemplate(request, templateContext);
long finish = System.nanoTime();
logger.log(Level.FINEST, String.format("Template was rendered in %.2fms.", ((finish - start) / 1000) / 1000.0));
} catch (RedirectException re1) {
return new RedirectResponse(re1.getTarget());
}
StringWriter stringWriter = new StringWriter();
template.render(templateContext, stringWriter);
pageNode.content.addChild("%", stringWriter.toString());