Changeset dc13ed6


Ignore:
Timestamp:
Dec 1, 2017 3:53:16 PM (3 years ago)
Author:
zzz <zzz@…>
Branches:
master
Children:
80e3c96
Parents:
17b72dd5
Message:

Console: Move /configkeyring HTML to console,
don't truncate hashes, tag for translation,
display as b32, trim form data, better form errors,
fix removing entries, parameterize form messages (ticket #2108)

Files:
7 edited

Legend:

Unmodified
Added
Removed
  • apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigKeyringHandler.java

    r17b72dd5 rdc13ed6  
    11package net.i2p.router.web.helpers;
    22
     3import net.i2p.data.Base32;
    34import net.i2p.data.DataFormatException;
    45import net.i2p.data.Hash;
     
    3132                    sk.fromBase64(_key);
    3233                } catch (DataFormatException dfe) {}
    33                 if (h != null && h.getData() != null && sk.getData() != null) {
     34                if (h == null || h.getData() == null) {
     35                    addFormError(_t("Invalid destination"));
     36                } else if (sk.getData() == null) {
     37                    addFormError(_t("Invalid key"));
     38                } else {
    3439                    _context.keyRing().put(h, sk);
    35                     addFormNotice(_t("Key for") + " " + h.toBase64() + " " + _t("added to keyring"));
    36                 } else {
    37                     addFormError(_t("Invalid destination or key"));
     40                    addFormNotice(_t("Key for {0} added to keyring",
     41                                     Base32.encode(h.getData()) + ".b32.i2p"));
    3842                }
    3943            } else {  // Delete
    4044                if (h != null && h.getData() != null) {
    4145                    if (_context.keyRing().remove(h) != null)
    42                         addFormNotice(_t("Key for") + " " + h.toBase64() + " " + _t("removed from keyring"));
     46                        addFormNotice(_t("Key for {0} removed from keyring",
     47                                         Base32.encode(h.getData()) + ".b32.i2p"));
    4348                    else
    44                         addFormNotice(_t("Key for") + " " + h.toBase64() + " " + _t("not found in keyring"));
     49                        addFormNotice(_t("Key for {0} not found in keyring",
     50                                         Base32.encode(h.getData()) + ".b32.i2p"));
    4551                } else {
    4652                    addFormError(_t("Invalid destination"));
     
    5258    }
    5359
    54     public void setPeer(String peer) { _peer = peer; }
    55     public void setKey(String peer) { _key = peer; }
     60    public void setPeer(String peer) { if (peer != null) _peer = peer.trim(); }
     61    public void setKey(String key) { if (key != null) _key = key.trim(); }
    5662}
  • apps/routerconsole/java/src/net/i2p/router/web/helpers/ConfigKeyringHelper.java

    r17b72dd5 rdc13ed6  
    33import java.io.IOException;
    44import java.io.StringWriter;
     5import java.util.Map;
    56
     7import net.i2p.data.Base32;
     8import net.i2p.data.Destination;
     9import net.i2p.data.Hash;
     10import net.i2p.data.SessionKey;
     11import net.i2p.router.TunnelPoolSettings;
    612import net.i2p.router.web.HelperBase;
    713
     
    1319        StringWriter sw = new StringWriter(4*1024);
    1420        try {
    15             _context.keyRing().renderStatusHTML(sw);
     21            renderStatusHTML(sw);
    1622        } catch (IOException ioe) {
    1723            ioe.printStackTrace();
     
    1925        return sw.toString();
    2026    }
     27
     28    /**
     29     *  @since 0.9.33 moved from PersistentKeyRing
     30     */
     31    private void renderStatusHTML(StringWriter out) throws IOException {
     32        StringBuilder buf = new StringBuilder(1024);
     33        buf.append("\n<table class=\"configtable\"><tr><th align=\"left\">").append(_t("Destination"))
     34           .append("<th align=\"left\">").append(_t("Name"))
     35           .append("<th align=\"left\">").append(_t("Encryption Key"))
     36           .append("</tr>");
     37        for (Map.Entry<Hash, SessionKey> e : _context.keyRing().entrySet()) {
     38            buf.append("\n<tr><td>");
     39            Hash h = e.getKey();
     40            buf.append(Base32.encode(h.getData())).append(".b32.i2p");
     41            buf.append("</td><td>");
     42            Destination dest = _context.netDb().lookupDestinationLocally(h);
     43            if (dest != null && _context.clientManager().isLocal(dest)) {
     44                TunnelPoolSettings in = _context.tunnelManager().getInboundSettings(h);
     45                if (in != null && in.getDestinationNickname() != null)
     46                    buf.append(in.getDestinationNickname());
     47            } else {
     48                String host = _context.namingService().reverseLookup(h);
     49                if (host != null)
     50                    buf.append(host);
     51            }
     52            buf.append("</td><td>");
     53            SessionKey sk = e.getValue();
     54            buf.append(sk.toBase64());
     55            buf.append("</td>\n");
     56        }
     57        buf.append("</table>\n");
     58        out.write(buf.toString());
     59        out.flush();
     60    }
    2161}
  • apps/routerconsole/jsp/configkeyring.jsp

    r17b72dd5 rdc13ed6  
    3333          </td>
    3434        </tr><tr>
    35           <td align="right"><b><%=intl._t("Dest. name, hash, or full key")%>:</b></td>
     35          <td align="right"><b><%=intl._t("Full destination, name, base 32, or hash")%>:</b></td>
    3636          <td><textarea name="peer" cols="44" rows="1" style="height: 3em;" wrap="off" spellcheck="false"></textarea></td>
    3737        </tr><tr>
  • core/java/src/net/i2p/util/KeyRing.java

    r17b72dd5 rdc13ed6  
    1717    }
    1818
     19    /**
     20     *  @deprecated unused since 0.9.33; code moved to routerconsole
     21     */
     22    @Deprecated
    1923    public void renderStatusHTML(Writer out) throws IOException {}
    2024}
  • history.txt

    r17b72dd5 rdc13ed6  
     12017-12-01 zzz
     2 * Build: Split net.i2p.router.web into two packages
     3 * Console: Move /configkeyring HTML to console, fix deletion,
     4   don't truncate hashes, better form errors, tag for translation (ticket #2108)
     5 * Streaming: Double the RTO on congestion (ticket #1939)
     6
     72017-11-27 zzz
     8 * Debian: Exclude gradle, IntelliJ, Docker, .tx, gcj files from source tarballs
     9
    1102017-11-27 str4d
    211 * Build: Add Gradle build scripts for compiling the codebase and generating
     
    413
    5142017-11-26 zzz
     15 * Build: Add xenial build option
     16 * Console: Safer processing of changes on /configadvanced
    617 * Context: Hopefully fix rare NPE on Android (ticket #2092)
    718
  • router/java/src/net/i2p/router/PersistentKeyRing.java

    r17b72dd5 rdc13ed6  
    55
    66import net.i2p.data.DataFormatException;
    7 import net.i2p.data.Destination;
    87import net.i2p.data.Hash;
    98import net.i2p.data.LeaseSet;
     
    3837    }
    3938
    40     public SessionKey remove(Hash h) {
    41         _ctx.router().saveConfig(PROP_PFX + h.toBase64().replace("=", "$"), null);
    42         return super.remove(h);
     39    @Override
     40    public SessionKey remove(Object o) {
     41        if (o != null && o instanceof Hash) {
     42            Hash h = (Hash) o;
     43            _ctx.router().saveConfig(PROP_PFX + h.toBase64().replace("=", "$"), null);
     44        }
     45        return super.remove(o);
    4346    }
    4447
     
    6164        }
    6265    }
    63 
    64     @Override
    65     public void renderStatusHTML(Writer out) throws IOException {
    66         StringBuilder buf = new StringBuilder(1024);
    67         buf.append("\n<table class=\"configtable\"><tr><th align=\"left\">Destination Hash<th align=\"left\">Name or Dest.<th align=\"left\">Encryption Key</tr>");
    68         for (Entry<Hash, SessionKey> e : entrySet()) {
    69             buf.append("\n<tr><td>");
    70             Hash h = e.getKey();
    71             buf.append(h.toBase64().substring(0, 6)).append("&hellip;");
    72             buf.append("<td>");
    73             Destination dest = _ctx.netDb().lookupDestinationLocally(h);
    74             if (dest != null) {
    75                 if (_ctx.clientManager().isLocal(dest)) {
    76                     TunnelPoolSettings in = _ctx.tunnelManager().getInboundSettings(h);
    77                     if (in != null && in.getDestinationNickname() != null)
    78                         buf.append(in.getDestinationNickname());
    79                     else
    80                         buf.append(dest.toBase64().substring(0, 6)).append("&hellip;");
    81                 } else {
    82                     String host = _ctx.namingService().reverseLookup(dest);
    83                     if (host != null)
    84                         buf.append(host);
    85                     else
    86                         buf.append(dest.toBase64().substring(0, 6)).append("&hellip;");
    87                 }
    88             }
    89             buf.append("<td>");
    90             SessionKey sk = e.getValue();
    91             buf.append(sk.toBase64());
    92         }
    93         buf.append("\n</table>\n");
    94         out.write(buf.toString());
    95         out.flush();
    96     }
    9766}
  • router/java/src/net/i2p/router/RouterVersion.java

    r17b72dd5 rdc13ed6  
    1919    public final static String ID = "Monotone";
    2020    public final static String VERSION = CoreVersion.VERSION;
    21     public final static long BUILD = 9;
     21    public final static long BUILD = 10;
    2222
    2323    /** for example "-test" */
Note: See TracChangeset for help on using the changeset viewer.