Package freenet.node.useralerts

Source Code of freenet.node.useralerts.IPUndetectedUserAlert

/* This code is part of Freenet. It is distributed under the GNU General
* Public License, version 2 (or at your option any later version). See
* http://www.gnu.org/ for further details of the GPL. */
package freenet.node.useralerts;

import static java.util.concurrent.TimeUnit.MINUTES;

import freenet.config.Option;
import freenet.config.SubConfig;
import freenet.l10n.NodeL10n;
import freenet.node.Node;
import freenet.support.HTMLNode;

public class IPUndetectedUserAlert extends AbstractUserAlert {
 
  public IPUndetectedUserAlert(Node n) {
    super(true, null, null, null, null, (short) 0, true, NodeL10n.getBase().getString("UserAlert.hide"), false, null);
    this.node = n;
  }
 
  final Node node;
 
  @Override
  public String getTitle() {
    return l10n("unknownAddressTitle");
  }

  @Override
  public String getText() {
    if(node.ipDetector.noDetectPlugins())
      return l10n("noDetectorPlugins");
    if(node.ipDetector.isDetecting())
      return l10n("detecting");
    else
      return l10n("unknownAddress", "port", Integer.toString(node.getDarknetPortNumber())) + ' ' + textPortForwardSuggestion();
  }

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

  private String l10n(String key, String pattern, String value) {
    return NodeL10n.getBase().getString("IPUndetectedUserAlert."+key, pattern, value);
  }

  private String l10n(String key, String[] patterns, String[] values) {
    return NodeL10n.getBase().getString("IPUndetectedUserAlert."+key, patterns, values);
  }
 
  @Override
  public boolean isValid() {
    if(node.isOpennetEnabled())
      return false;
    if(node.peers.countConnectiblePeers() >= 5 && (node.getUptime() < MINUTES.toMillis(1) || node.ipDetector.isDetecting()))
      return false;
    return true;
  }

  @Override
  public HTMLNode getHTMLText() {
    HTMLNode textNode = new HTMLNode("div");
    SubConfig sc = node.config.get("node");
    Option<?> o = sc.getOption("tempIPAddressHint");
   
    NodeL10n.getBase().addL10nSubstitution(textNode, "IPUndetectedUserAlert."+(node.ipDetector.isDetecting() ? "detectingWithConfigLink" : "unknownAddressWithConfigLink"),
        new String[] { "link" },
        new HTMLNode[] { HTMLNode.link("/config/"+sc.getPrefix()) });
   
    int peers = node.peers.getDarknetPeers().length;
    if(peers > 0)
      textNode.addChild("p", l10n("noIPMaybeFromPeers", "number", Integer.toString(peers)));
   
    if(node.ipDetector.noDetectPlugins()) {
      HTMLNode p = textNode.addChild("p");
      NodeL10n.getBase().addL10nSubstitution(p, "IPUndetectedUserAlert.loadDetectPlugins", new String[] { "plugins", "config", },
          new HTMLNode[] { HTMLNode.link("/plugins/"), HTMLNode.link("/config/node") });
    } else if(!node.ipDetector.hasJSTUN() && !node.ipDetector.isDetecting()) {
      HTMLNode p = textNode.addChild("p");
      NodeL10n.getBase().addL10nSubstitution(p, "IPUndetectedUserAlert.loadJSTUN", new String[] { "plugins" },
          new HTMLNode[] { HTMLNode.link("/plugins/") });
    }
   
    addPortForwardSuggestion(textNode);
   
    HTMLNode formNode = textNode.addChild("form", new String[] { "action", "method" }, new String[] { "/config/"+sc.getPrefix(), "post" });
    formNode.addChild("input", new String[] { "type", "name", "value" }, new String[] { "hidden", "formPassword", node.clientCore.formPassword });
    formNode.addChild("input", new String[] { "type", "name", "value" }, new String[] { "hidden", "subconfig", sc.getPrefix() });
    HTMLNode listNode = formNode.addChild("ul", "class", "config");
    HTMLNode itemNode = listNode.addChild("li");
    itemNode.addChild("span", "class", "configshortdesc", o.getLocalisedShortDesc()).addChild("input", new String[] { "type", "name", "value" }, new String[] { "text", sc.getPrefix() + ".tempIPAddressHint", o.getValueDisplayString() });
    itemNode.addChild("span", "class", "configlongdesc", o.getLocalisedLongDesc());
    formNode.addChild("input", new String[] { "type", "value" }, new String[] { "submit", NodeL10n.getBase().getString("UserAlert.apply") });
    formNode.addChild("input", new String[] { "type", "value" }, new String[] { "reset", NodeL10n.getBase().getString("UserAlert.reset") });
   
    return textNode;
  }

  private void addPortForwardSuggestion(HTMLNode textNode) {
    // FIXME we should support any number of ports, UDP or TCP, and pick them up from the node as we do with the forwarding plugin ... that would be a bit of a pain for L10n though ...
    int darknetPort = node.getDarknetPortNumber();
    int opennetPort = node.getOpennetFNPPort();
    if(opennetPort <= 0) {
      textNode.addChild("#", " "+l10n("suggestForwardPort", "port", Integer.toString(darknetPort)));
    } else {
      textNode.addChild("#", " "+l10n("suggestForwardTwoPorts", new String[] { "port1", "port2" },
          new String[] { Integer.toString(darknetPort), Integer.toString(opennetPort) }));
    }
  }

  private String textPortForwardSuggestion() {
    // FIXME we should support any number of ports, UDP or TCP, and pick them up from the node as we do with the forwarding plugin ... that would be a bit of a pain for L10n though ...
    int darknetPort = node.getDarknetPortNumber();
    int opennetPort = node.getOpennetFNPPort();
    if(opennetPort <= 0) {
      return l10n("suggestForwardPort", "port", Integer.toString(darknetPort));
    } else {
      return " "+l10n("suggestForwardTwoPorts", new String[] { "port1", "port2" },
          new String[] { Integer.toString(darknetPort), Integer.toString(opennetPort) });
    }
  }

  @Override
  public short getPriorityClass() {
    if(node.ipDetector.isDetecting())
      return UserAlert.WARNING;
    else
      return UserAlert.ERROR;
  }

  @Override
  public String getShortText() {
    if(node.ipDetector.noDetectPlugins())
      return l10n("noDetectorPlugins");
    if(node.ipDetector.isDetecting())
      return l10n("detectingShort");
    else
      return l10n("unknownAddressShort");
  }

}
TOP

Related Classes of freenet.node.useralerts.IPUndetectedUserAlert

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.