Package freenet.clients.http

Source Code of freenet.clients.http.ExternalLinkToadlet

package freenet.clients.http;

import freenet.client.HighLevelSimpleClient;
import freenet.clients.http.PageMaker.RenderParameters;
import freenet.l10n.NodeL10n;
import freenet.node.Node;
import freenet.support.HTMLNode;
import freenet.support.MultiValueTable;
import freenet.support.api.HTTPRequest;

import java.io.IOException;
import java.net.URI;

/**
* The External Link Toadlet
*/
public class ExternalLinkToadlet extends Toadlet {

  private static final int MAX_URL_LENGTH = 1024 * 1024;
  public static final String PATH = "/external-link/";
  private static final String magicHTTPEscapeString = "_CHECKED_HTTP_";

  private final Node node;

  ExternalLinkToadlet(HighLevelSimpleClient client, Node node) {
    super(client);
    this.node = node;
  }

  @Override
  public String path() {
    return PATH;
  }

  public void handleMethodPOST(URI uri, HTTPRequest request, ToadletContext ctx) throws ToadletContextClosedException, IOException {
    String url = request.getPartAsStringFailsafe(magicHTTPEscapeString, MAX_URL_LENGTH);
    MultiValueTable<String, String> headers = new MultiValueTable<String, String>();
    //If the user clicked cancel, or the URL is not defined, return to the main page.
    //TODO: This will mean the beginning of the first time wizard if it's still in progress.
    //TODO: Is it worth it to fix that?
    if (request.getPartAsStringFailsafe("Go", 32).isEmpty() || url.isEmpty()) {
      url = WelcomeToadlet.PATH;
    }
    headers.put("Location", url);
    ctx.sendReplyHeaders(302, "Found", headers, null, 0);
  }

  public void handleMethodGET(URI uri, HTTPRequest request, ToadletContext ctx) throws ToadletContextClosedException, IOException {

    //Unexpected: a URL should have been specified.
    if (request.getParam(magicHTTPEscapeString).isEmpty()) {
      MultiValueTable<String, String> headers = new MultiValueTable<String, String>();
      headers.put("Location", WelcomeToadlet.PATH);
      ctx.sendReplyHeaders(302, "Found", headers, null, 0);
      return;
    }

    //Confirm whether the user really means to access an HTTP link.
    //Only render status and navigation bars if the user has completed the wizard.
    boolean renderBars = node.clientCore.getToadletContainer().fproxyHasCompletedWizard();
    PageNode page = ctx.getPageMaker().getPageNode(l10n("confirmExternalLinkTitle"), ctx, new RenderParameters().renderNavigationLinks(renderBars).renderStatus(renderBars));
    HTMLNode pageNode = page.outer;
    HTMLNode contentNode = page.content;
    HTMLNode warnboxContent = ctx.getPageMaker().getInfobox("infobox-warning",
      l10n("confirmExternalLinkSubTitle"), contentNode, "confirm-external-link", true);
    HTMLNode externalLinkForm = ctx.addFormChild(warnboxContent, PATH, "confirmExternalLinkForm");

    final String target = request.getParam(magicHTTPEscapeString);
    externalLinkForm.addChild("#", l10n("confirmExternalLinkWithURL", "url", target));
    externalLinkForm.addChild("br");
    externalLinkForm.addChild("input",
      new String[]{"type", "name", "value"},
      new String[]{"hidden", magicHTTPEscapeString, target});
    externalLinkForm.addChild("input",
      new String[]{"type", "name", "value"},
      new String[]{"submit", "cancel", NodeL10n.getBase().getString("Toadlet.cancel")});
    externalLinkForm.addChild("input",
      new String[]{"type", "name", "value"},
      new String[]{"submit", "Go", l10n("goToExternalLink")});

    this.writeHTMLReply(ctx, 200, "OK", null, pageNode.generate(), true);
  }

  /**
   * Prepends a given URI with the path and parameter names to get this external link confirmation page.
   * @param uri URI to prompt for confirmation.
   * @return String appropriate for a link.
   */
  public static String escape(String uri) {
    return ExternalLinkToadlet.PATH+"?" + magicHTTPEscapeString + '=' + uri;
  }

  private static String l10n(String key, String pattern, String value) {
    return NodeL10n.getBase().getString("WelcomeToadlet." + key, new String[]{pattern}, new String[]{value});
  }

  private static String l10n(String key) {
    return NodeL10n.getBase().getString("WelcomeToadlet." + key);
  }
}
TOP

Related Classes of freenet.clients.http.ExternalLinkToadlet

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.