Patch from dr|z3d

- Include alternative tracker-purple.css
- Add favicon.png to docroot
- Add custom icon for homepage
- Add auto page reload for tracker stats (ajax with meta refresh fallback)
- Add footer to /tracker with ZzzOT version and github link
- Add config options to hide version footer on /tracker or change footer text
images by dr|z3d, same license as the code
This commit is contained in:
zzz
2019-11-19 12:11:13 +00:00
parent 1227c727d0
commit 96fa6adfad
12 changed files with 208 additions and 38 deletions
+10 -3
View File
@@ -2,15 +2,22 @@
- Add more configuration, customization, and registration info to help page
- Change default sig type to EdDSA
- Add variables for $VERSION and $SITENAME
- Add custom CSS to docroot/tracker.css to allow customization
- Add custom CSS to docroot/tracker.css to allow customization and include
alternative tracker-purple.css
- Add favicon.png to docroot
- Add custom icon for homepage
- Add auto page reload for tracker stats (ajax with meta refresh fallback)
- Add footer to /tracker with ZzzOT version and github link
- Add config options to hide version footer on /tracker or change footer text
- Tidy CHANGES.txt and add to plugin/
- Changes for new installs only:
- Enhance presentation of help page
- Modify docroot/index.html post-install to contain b32
- Modify docroot/index.html post-install to contain b32 footer
- Only display warning about moving help.html if necessary
- Add rewrite rules for /tracker, /tracker/, /tracker/index.html,
/help and /help/ to jetty.xml
- Replace jetty.servlet.DeaultServlet with I2PDefaultServlet in BaseContext.xml
- Replace jetty.servlet.DefaultServlet with I2PDefaultServlet in BaseContext.xml
(requires I2P 0.9.31 or newer)
2017-05-21 [0.16.0]
- Fix scrape response (requires I2P 0.9.30-8) (ticket #1994)
+1
View File
@@ -2,6 +2,7 @@ ZzzOT I2P Open Tracker Plugin
-----------------------------
This is a very simple in-memory open tracker, wrapped into an I2P plugin.
A compiled version of the plugin is available at http://stats.i2p/i2p/plugins/
The plugin starts a new http server tunnel, eepsite, and Jetty server running at
port 7662. The tracker status is available at http://127.0.0.1:7662/tracker/
+5 -1
View File
@@ -16,7 +16,7 @@
<delete dir="plugin/eepsite/docroot/torrents/" />
<!-- get version number -->
<buildnumber file="scripts/build.number" />
<property name="release.number" value="0.16.1" />
<property name="release.number" value="0.17.0" />
<!-- make the update xpi2p -->
<!-- this contains everything except i2ptunnel.config -->
@@ -24,6 +24,8 @@
<copy file="README.txt" todir="plugin/" overwrite="true" />
<copy file="CHANGES.txt" todir="plugin/" overwrite="true" />
<copy file="scripts/tracker.css" todir="plugin/eepsite/docroot/" overwrite="true" />
<copy file="scripts/tracker-purple.css" todir="plugin/eepsite/docroot/" overwrite="true" />
<copy file="scripts/favicon.png" todir="plugin/eepsite/docroot/" overwrite="true" />
<copy file="scripts/plugin.config" todir="plugin/" overwrite="true" />
<exec executable="echo" osfamily="unix" failonerror="true" output="plugin/plugin.config" append="true">
<arg value="update-only=true" />
@@ -83,6 +85,8 @@
<delete file="plugin/eepsite/docroot/index.html" />
<delete file="plugin/eepsite/docroot/robots.txt" />
<delete file="plugin/eepsite/docroot/tracker.css" />
<delete file="plugin/eepsite/docroot/tracker-purple.css" />
<delete file="plugin/eepsite/docroot/favicon.png" />
<delete file="plugin/lib/zzzot.jar.pack" />
<delete file="plugin/eepsite/webapps/tracker.war.pack" />
<delete file="plugin/CHANGES.txt" />
+1 -1
View File
@@ -2,7 +2,7 @@ clientApp.0.main=net.i2p.zzzot.ZzzOTController
clientApp.0.name=ZzzOT
clientApp.0.args=-d $PLUGIN start
clientApp.0.stopargs=-d $PLUGIN stop
clientApp.0.delay=40
clientApp.0.delay=0
clientApp.0.startOnLoad=true
# we also use i2p.jar and i2ptunnel.jar, they are in the standard router classpath
clientApp.0.classpath=$PLUGIN/lib/zzzot.jar,$I2P/lib/i2psnark.jar
+45 -9
View File
@@ -4,10 +4,11 @@
<head>
<meta charset="UTF-8">
<title>ZZZOT OPENTRACKER | HELP</title>
<link rel="icon" type="image/png" href="data:image/png;base64,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">
<style type="text/css">
html,
body {
min-width: 600px;
min-width: 800px;
min-height: 100%;
line-height: 1.4;
font-size: 14pt;
@@ -83,6 +84,18 @@
user-select: none;
}
#sitename::before {
margin-top: 4px;
display: inline-block;
content: "";
width: 68px;
height: 56px;
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAABdFBMVEUAAADOzs7g4ODb29vZ2dnd3d3T09Pi4uLq6urr6+vX19fk5OTl5eXm5ubp6ene3t7h4eHk5OTn5+fo6Ojk5OTm5ubq6urp6em7u7v///8dEgrX19fg4OBSPTF/W0VsTzxKNywgFg/k5OTS0tLAv7/p6Oh3VkHv7+9iRzjNzc2EX0hyUz9aQjRnSzra2trJycn19fXGxsby8vJfRjXDw8P7+/vc3Nw/MScmGxOIYUlEMyn4+Pg6KyItIRoxJRzq6up6WUXPz8+KZEw0KCA8LSWwrau/t7FgV1JFPDe5uLe3tLKzsbC6raStopqZlZSIg4GgjICEa1zc1dHDubOgnZuyoZapmY+mk4eVioRtVEXCvbqsqaiFgH2AenZ1b2qKdWdpYV5RR0I8Miy9saqxqaWSc192ZVrUzsumo6Gypp6jmpSSg3mXemluZ2JjXVhZUk7j3tnLwLm9ubech3qZgXJ/ZVNnWE9wXE5fS0A+NjGNiYbSycJQXgkWAAAAGHRSTlMA/NAH6uD4vEk+7qymkGPbwp96b7GFNSKLdq62AAAFzUlEQVRo3qzTSW/aQBgG4DE4G82etH1HbWIUDWCRRIGAIyU9FCGB1BQkFrFeOBCIshzaZpX65wvGIeOBjMc0j82Bz2ZeZvmIss9by4G5obX15c1P5F0tbesag0ta09cXybv4qCdhY6ydH6q2GRvFHekrQfJ/NkNpe+x87fbU5b6Wt0OYvkpm90EDwKqNbHyqbL3KAGgLs00jGEgCGIx+KtNoA0guEP+WjwDW7WU99QoMONom/qxqALvKniopDyM0X2cqwIBuNq4sO4hgAaJqUQPavbgvtwzQlhRXn4HV4r7VGNIrSssDsN7uDHoM8F6moA7kd2cTzwMhr/HngavdmdWA+aDX+I1dl7tq4VY9oe6RMA+Uoi4FSql1H1VWkiaEJsav0aFI1FeCLjk/9YxLx6K224y6xptnaQUoRt1+0ZFa1Ici8IFMsZRGft+tRB2/B18M+8MxJj6OLti0ntbAMvsu0Qh1VLjqQ6Hy629pXyLKoE3bAFYWXqzTF5HXYifmzEmizCa3YZGhbggi9EViXHs4dkplQ6IOtjrRAW1DcEdf7Tu1zEuolTFk/oiLtA028ZcqXMCDYRsfK1oxpMrABuEd4WriHcrp2KXW5bhQMuQukOQbegGsdSjoUs69XfrNbcqhXMu1z8EkiocCI0E5jWGpQMeqh16ukZRPoER5hUGlzi+ZZ4DBuH7WUDRFFcq7NM07i45FTG8XrwdpFWilBE8W5cXMDl8opry1gC0youOPKSpStyK/JdaTqeAcIWeLGW5M0R6VqJgqbpAmthWwlKhvWfTNy7pJqTAZPjordH4gupIFHJsHSs6hO13cPBBFLImTTksp4GbUCovAs/iob3n4Wm2Un70CTGDJ7jLsiC6+KUhUus3Ujsyo10LI7Yj2vin6ciALyEG327gpPugnlDVlAU27mdPoiw+K6gGXsoAnMEI+AWHRSSJxrHglHsMSwGeyCSaWH499uJYFMGyRjclDdO0n4ER+jDbIOn6IuZcxP/qSGfxAgKzh55nbc8yXi7Oz8NRrIIc1MoecENv0F7C3E35TDnOjgDPuDqdj32M+7lgzbP9OvLmAf63ay2+iUBgF8AtlprU++m5PKAtpPxfdlJCQljSlk4k2oCa6cTU+omYWZhJrMotJ2r9+AhGBggjc/sTNXZwTicnV7/IUMWv8yKfx51/9Kdm64DFi3Mjv5ldvMnuMcwuOPhd0GgXd/u7b9WhWF0dMRCeyVlcaHJSOHQ5r45idAM9hyxs+9/VQGHDCzkCRgsUNp2kojHDKroBWyOM1d0EoDbhkjDALddoKLzsUBsPbcEYvgbHCaxaE9b0NR8IwVDBQHhSuS6kHYUNvyywDzcBfhdc8CAPcaWEJaAal1w+8gqwW4A3ydEwsn3PP687amEBjLgmvlu+Nu8AICtxfLa4L0Iu/Nr7m1Q4KCFXmMbA01wbcBUPTtwTt+WOiV38R3AU909fdDI7OgLnpsW558wctP38O1II/gete55YPrcyNXmiaUAaZqsvmir8bm+qGRQjN5HX0VdeIJ38wV0N6kVmCCLK8L9HPwsg2w/wPEMwSBm4t7ooaWWpEDxoLOwHeZdkqFt79sJtylBMbDAroqqpTILxvN9W4dmxqVyOM1KmWix8eNwIdJExlnb6WWWe0asrbvBNEFiOgvdA0PdNLe5NTmIDA4kqEjp5RT00zhFFiCcpAW89mqaboA9Wtw3EYmaTdoUnKQYsEIt6CKXCYdgBCmazUbabAd8Z2NBi7Llql3J/dhzi020xO9uHlpztEBskF6gKQ9tguIlyU8gYcNYHTBkSWQdXALo4cNwaowjIpCfkL3ru5TnxFQqq5HGUNABJZDgdCjgKzT4BQY/mca9iuJQeaPQK0CstvX8c2z7JvOgSgiwWfS9gXkMySXeZkSACEMiuuJlFygTNewGUcnjI+e1VJw2frVl26YF/i4FgSDESQIJ2X2Je6PK0cH31ziZWzK5bVf0D9anRc2+uqAAAAAElFTkSuQmCC) center center no-repeat;
background-size: 56px 56px;
opacity: 0.7;
filter: drop-shadow(0 0 3px rgba(0,0,0,.75));
}
hr.heading {
margin: -10px 0 15px;
height: 1px;
@@ -202,11 +215,26 @@
}
ul#config {
list-style-type: square;
list-style-type: none;
}
#config li {
padding-top: 10px;
padding: 10px 15px 5px 0;
position: relative;
}
#config li::before {
content: "";
display: inline-block;
width: 25px;
height: 20px;
position: absolute;
top: 12px;
left: -22px;
background: url(data:image/png;base64,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) left top no-repeat;
background-size: 14px 14px;
opacity: .85;
filter: saturate(0) brightness(1.6) drop-shadow(0 1px 1px #000);
}
#config li br {
@@ -245,7 +273,6 @@
}
@supports (-webkit-text-stroke-width: 1px) {
#sitename,
#sitename:hover,
#sitename:focus {
@@ -283,6 +310,11 @@
.external::before {
margin-left: -2px;
}
#sitename::before {
height: 52px;
background-size: 52px 52px;
}
}
@media screen and (max-width: 1400px) {
@@ -325,7 +357,7 @@
<h2>Welcome to the ZzzOT I2P Plugin!</h2>
<hr class="heading">
<p class="warn" id="docroot">This help file is located at: <code>$PLUGIN/eepsite/docroot/help.html</code><br><span class="emphasis"><b>You should probably move it outside of the document root before you announce your eepsite as it may contain your username.</b></span></p>
<p>ZzzOT is a simple in-memory BitTorrent open <a href="https://en.wikipedia.org/wiki/BitTorrent_tracker" class="external" target="_blank">tracker</a>, wrapped into an I2P plugin. The software depends on several I2P libraries, in addition to <code>i2psnark.jar</code> from the I2P installation for bencoding. Please report bugs on <a href="http://trac.i2p2.i2p/" target="_blank">trac.i2p2.i2p</a> or add comments and feature requests on <a href="http://zzz.i2p/forums/16" target="_blank">the plugin forum</a> on zzz.i2p.</p>
<p>ZzzOT is a simple in-memory BitTorrent open <a href="https://en.wikipedia.org/wiki/BitTorrent_tracker" class="external" target="_blank">tracker</a>, wrapped into an I2P plugin. The software depends on several I2P libraries, in addition to <code>i2psnark.jar</code> from the I2P installation for <a href="https://en.wikipedia.org/wiki/Bencode" class="external" target="_blank">bencoding</a>. Please report bugs on <a href="http://trac.i2p2.i2p/" target="_blank">trac.i2p2.i2p</a> or add comments and feature requests on <a href="http://zzz.i2p/forums/16" target="_blank">the plugin forum</a> on zzz.i2p.</p>
<p>Source code is available (under the <a href="https://www.apache.org/licenses/LICENSE-2.0.html" class="external" target="_blank">Apache 2.0 license</a>) via the <code>i2p.plugins.zzzot</code> branch in the <a href="https://geti2p.net/en/get-involved/guides/monotone" class="external" target="_blank">I2P monotone</a> database, or on <a href="https://github.com/i2p/i2p.plugins.zzzot" class="external" target="_blank">github</a>. Note that the I2P source code must be available (and compiled) in <code>../i2p.i2p</code> in order to build ZzzOT.</p>
<h3>Configuration &amp; Customization</h3>
<hr class="heading">
@@ -333,12 +365,16 @@
<li>A new eepsite tunnel and Jetty server have been started for your open tracker, configured for 2 inbound and 2 outbound tunnels, 3 hops each. If your tracker gets over 1000 peers, you will probably want to increase the number of tunnels.</li>
<li>To change the tunnel settings, edit: <code>$PLUGIN/i2ptunnel.config</code> (the tunnel will not appear in the <a href="http://127.0.0.1:7657/i2ptunnelmgr" target="_blank">Tunnel Manager</a>), then stop and restart the plugin from the <a href="http://127.0.0.1:7657/configplugins" target="_blank">Plugin Manager</a>.</li>
<li>The Jetty webserver is running on port <code>7662</code>. If you must change it, edit: <code>jetty.xml</code>, <code>i2ptunnel.config</code>, and <code>plugins.config</code> in: <code>$PLUGIN/</code>, then stop and restart the plugin.</li>
<li>The only configuration for ZzzOT itself is the <i>interval</i>, which tells clients how long to wait between announces. The default is 1620 seconds (27 minutes). Note: The easiest way to reduce the load on your tracker is to increase the interval. To do so, edit the file: <code>$PLUGIN/zzzot.config</code>, then stop and restart the plugin.</li>
<li>The configuration file for ZzzOT is located at: <code>$PLUGIN/zzzot.config</code>
<li>The only configuration for ZzzOT itself is the <i>interval</i>, which tells clients how long to wait between announces. The default is 1620 seconds (27 minutes).</li>
<li>The easiest way to reduce the load on your tracker is to increase the interval. To do so, edit the configuration file, then stop and restart the plugin.</li>
<li>Live stats are available on the <a href="http://127.0.0.1:7662/tracker" target="_blank">tracker page</a> (this link is also on your router console sidebar when ZzzOT is running).</li>
<li>To change the display name for the site (for the logo and page titles), add the line: <code>sitename=<i>mytracker</i></code> to: <code>$PLUGIN/zzzot.config</code> (substituting <i>mytracker</i> with your desired name) and then stop and restart the plugin.</li>
<li>If you wish to change the appearance of the site, edit the css file located at: <br><code>$PLUGIN/eepsite/docroot/tracker.css</code></li>
<li>Your eepsite home page is located at: <code>$PLUGIN/eepsite/docroot/index.html</code>, you may edit it to add information about your tracker or links to additional content.</li>
<li>To change the display name for the site (for the logo and page titles), add the line: <code>sitename=<i>mytracker</i></code> to the configuration file (substituting <i>mytracker</i> with your desired name) and then stop and restart the plugin.</li>
<li>To change the footer text displayed on the tracker stats page, add the line: <code>footertext=<i>alternative text</i></code> to the configuration file, and then stop and restart the plugin.</li>
<li>To hide the version footer displayed on the stats page, add the line: <code>showfooter=false</code> to the configuration file, and then stop and restart the plugin.
<li>Your eepsite document root is: <code>$PLUGIN/eepsite/docroot/</code>. You may put other files there if you wish to host additional content on your eepsite.</li>
<li>Your eepsite home page is located at: <code>$PLUGIN/eepsite/docroot/index.html</code>, you may edit it to add information about your tracker or links to additional content, or to change the displayed name and page title.</li>
<li>If you wish to change the appearance of the site, edit the css file located at: <br><code>$PLUGIN/eepsite/docroot/tracker.css</code>. There's an alternative purple-themed css file in the same directory that should be renamed to <code>tracker.css</code> (having renamed the existing file) if you wish to use that instead, or deleted if you don't intend to use it.</li>
<li>Directory listings are enabled on the server, so you don't need to create a web page to serve files; content in any folders you create in your document root will be immediately available to your visitors. The quickest method to disable listings is to place an empty <code>index.html</code> file in any folder you wish to disable.</li>
<li>Open trackers do not require torrents to be registered, and do not host torrent files. However, you can host torrent files elsewhere on the eepsite, for example at <a href="/torrents/" target="_blank">/torrents</a>.</li>
</ul>
+5
View File
@@ -5,6 +5,11 @@
<head>
<meta charset="UTF-8">
<title>ZZZOT OPENTRACKER</title>
<style type="text/css">
body, html {min-height: 100%; font-size: 0;}
body {background: #111;}
body {background: repeating-linear-gradient(45deg, #444, #333 2px, #222 3px), repeating-linear-gradient(135deg, #444, #333 2px, #222 3px); background-blend-mode: multiply, normal;}
</style>
<link href="/tracker.css" rel="stylesheet" type="text/css">
</head>
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

+5 -3
View File
@@ -1,8 +1,10 @@
name=zzzot
signer=zzz-plugin@mail.i2p
signer=z3d@mail.i2p
consoleLinkName=ZzzOT
consoleLinkURL=http://127.0.0.1:7662/tracker/index.jsp
description=Open tracker
consoleLinkURL=http://127.0.0.1:7662/tracker/
consoleLinkTooltip=BitTorrent OpenTracker
icon-code=iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAABm1BMVEUAAAAZGRkZGRkaGhoZGRkZGRkZGRkZGRkYGBgZGRkYGBgZGRkYGBgZGRkZGRkXFxcYGBgZGRkZGRkZGRkZGRkAAAAZGRnziRYTExPzfhbzbhbzdxbzgxbzlRYLCwvzjhbzcxbMzMzzkBb~~~~~~Pl0dHRdXV3GxsYnJyfe3t7OycbBwcGcnJyHh4cjEgP39~f96dSurq5~f397e3tra2tlZWU7OzseHh7haRSGSAsOBwGpqKeWlpbgpnRUVFRNTU00NDTxmynPbRJwNgpXLwdEJQY4IAUVCwLy8vL83sK7u7uysrL7yqf6v5Tdr4H4t3H4rGz2pEvnjUnqnkQvLy~zii30gyjxdCLqdhXLexK9bhGQTQ1-QAtlLgn-9u~Pxr7Uvqr71KbYuJz6yZn5v4T3pVv3s1rkmVr1nzr1kzLyjiPzex~pbBXJYxLJXRK~XxG4aBCYRQ5iNQlMKgctGgT7-~vas4zhnGj2qlNERETlhRTefxTedRTVfxOsZhC0YBC4UhCpWw9wQgr4sH~kqF7sizVpSyfWXxOZVw56Yx8pAAAAFXRSTlMAjPQOr8vV7eVwaVtPNyUa27WCwoZvol0xAAAEx0lEQVRYw72XZ1PbQBCGXQEnVMNJAjtyjpPcbWxsMB2SQOg1tCT0EiA9kN578rOzd4eQZUuO8iXPjGfkmdv3dm-v7DqsaKht8XhrBKDG6~HXNjj-iTpnlVBClbPOrrXb18htJElmSNK5hs9tx9zp4saCXOgOq6qaH-qWkCQzEZf~rxKXqvnU0c6pCUKIohDKREKNckeqL1U0r~cyc6kzRpTJg8OTILBysji~nyEkpnKJ5npr-8suZp7sUHbvXTFybX6SvEhKVMJ12creSaeXUx1bB6utJqzsKx0pthZOc3sPnX4kpsw-uNozmr5xtZzVGRIboU54zOyb6PQ5kjkWxbdphNBd0YTFDFGpE03m88v9ZD8Ew04R8Fw0I7RLsrKZD05qH1EWqKePEUNz~GGPIY4FMkUVnCXrT-2nlMNWyhhirLM~66MIpZ-0FnGoJKjCZUP-XWCfJTx3txHnNvt3hoBxQ0rvKf2g4CreD83ggErmg4xRxPkUBE7ZZ1~QwALJgQveov0L9iNkpo3Rg855Bn82-Odmm5FZMgIKF7vaXQ0BxDIil7-rCWzo39eDRsRMDIKo1k6WHxxIkcV2TloTGG3~iDjP20s5VlJ6JtywglLHTIDzCHHo2mtfvYEyZjskWEfugg8cSCqrAc4NdEGf9tFTLvBgKwku-JhAFazAi93QOeOojLGQCQfUhUZ2~7EUnoicp6icL6IJ95VOcKGOb2I5NqklaBOZkN589ritlJmYDMvII4iSBW2f9iErxt63GlgkURZDAzigkmtXOHeQNaNXjLAYGhy1sASJjCZ7iiqwbnRhcgoup1pHiyCgiVktMMsI-N428G0C0UVogl1E5kWOdQQmV8xrIkhwsXgFqZu8DnG-oop8CBVzTLolOJI1gjxEVq5yxlFFjBdtgIRlocYBSciTVf0cVOTs7qOAjqLCTnCwLLZzepENbn79-JYP39IEwttBThrZ5IwNx2FNIM7z8gvZ5jMMX8NDIEAXcRgHGbYi0O~LFfwGFpGmcRnznTyGbMJv7Ft4mabRAxsJL7VSxpFtrsPwIww3QhM9zSjxir1AyD70sRpMwFZuYYdpYI~vY~uIwE5SpoepAQS64iLw-98E7rMsQvnXKEgFvAQubSLb9MHwI1yQhKrzKy37EhblJrJNLwzfmz6~0upYDJDIPmSTsQ-0aGIRsOKzkVYGg8H3yB7jX4KUOSzzCPjD0rm99hnZ4sbDNspaPAcO-PSnLTLYa-ckbmjP7FxEpk-bXt7k8c-~GffeCV1wC-fBAX~x8z7dX3HmJ-uGl3Eny5734gIjilXruAMlzOEoLzA0vDSVeBhZ8DRk5DtLYXNpkZWKdFsJiAZu4RQrssrKvGTCQsH4si7FB1iZZ1JoDuBhq9OvcxRPskLTtNRN4Zz5~aMzx~wXPBbFdhj3Ryt58GMHd-nFtpkP0SzOSWX3TxtnbRBPR1m5X6nhyEciaonEO17UDG5H8rzhqNjyyHIO44FhuViAbt6X8Uhn5ZYHqG8WmER4GuN-dWhEYq4Ull7txXG2izdd3nobbZ8sF8LJBGZE4JcY6CrYavsAt98lcA0kLb8ZCofDw8sSor4DLqfbVutbZd76Nvrc~6P51tt~v97-t1i3~38A57d5M52iLPcAAAAASUVORK5CYII=
description=BitTorrent OpenTracker
author=zzz
updateURL=http://stats.i2p/i2p/plugins/zzzot-update.xpi2p
updateURL.su3=http://stats.i2p/i2p/plugins/zzzot-update.su3
+34 -6
View File
@@ -14,8 +14,7 @@ html, body {
@supports (background-blend-mode: overlay) {
html, body {
background: repeating-linear-gradient(45deg, #333, #111 2px, #111 3px), repeating-linear-gradient(135deg, #444, #333 2px, #222 3px);
background: repeating-linear-gradient(45deg, #313, #000 2px, #000 3px), repeating-linear-gradient(135deg, #414, #313 2px, #212 3px); /* purple */
background: repeating-linear-gradient(45deg, #313, #000 2px, #000 3px), repeating-linear-gradient(135deg, #414, #313 2px, #212 3px);
background-blend-mode: overlay, normal;
background-size: 100% 100%, 100% 100%;
background-attachment: fixed;
@@ -42,8 +41,7 @@ html, body {
text-align: center;
border: 1px solid #535;
box-shadow: inset 0 0 0 1px #111, inset 0 0 2px 1px #444, 0 0 2px 2px #000;
background: #181818;
background: repeating-linear-gradient(to right, rgba(255, 255, 255, .05), rgba(0, 0, 0, .08) 2px), repeating-linear-gradient(to bottom, #222, #111 2px);
background: #180618;
background: repeating-linear-gradient(to right, rgba(255, 200, 255, .05), rgba(0, 0, 0, .08) 2px), repeating-linear-gradient(to bottom, #212, #101 2px); /* purple */
background-blend-mode: overlay;
will-change: transform;
@@ -134,6 +132,19 @@ hr {
background: linear-gradient(to right, rgba(0, 0, 0, 0), #535, rgba(0, 0, 0, 0));
}
::selection,
::-moz-selection {
text-shadow: none;
background: #515;
color: #fff;
}
#totals {
padding-top: 6px;
line-height: 140%;
text-shadow: 0 1px 1px #000;
}
#footer {
padding: 4px;
position: absolute;
@@ -152,10 +163,27 @@ hr {
#footer.version {
font-size: 9.5pt;
font-weight: normal;
}
#footer.version a {
margin: 0 1px 0 2px;
}
#footer.version::before {
margin-left: -10px;
content: "";
display: inline-block;
margin-top: 1px;
width: 20px;
height: 18px;
vertical-align: middle;
background: url(/favicon.png) left top no-repeat;
background-size: 16px 16px;
filter: hue-rotate(-110deg) saturate(.4) brightness(1.4);
}
#initializing::before {
margin-left: -20px;
content: "";
display: inline-block;
width: 28px;
@@ -163,7 +191,7 @@ hr {
vertical-align: text-bottom;
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABRhJREFUeNq0Vd1vk1UYP+f9bruPrmu70W1lrLKJzE0o+BEFt4yLRZJpgl4YZ6IXhiuT/Slcqlw6QyIauNEYIhHlAgMrJDjUDQejdF3Xj7Xv24/3+xyf01LWOpArTvLr6XnOOc/X7znPiyml6HkOgf28+cXDxwLMcYgDsBljHAS8AeJjgDFAGMAByoAk4Ddw8GdAihKCmLMcz7N7s7CXu/JpOCE8xbAXMC0KaGYwLMeG9yj7ujuEPkXmAiDnDZNYasUx1jeNqVTWOG3Z6CLIzwK2AfNgaOGRniNPMtADB+ZiEXl8Yn9nTOD4AcMgnXoVydUy4R4FKXtFQT482tU98YIvcvtuuf+fhzUW6RXiuvMfn4zEv/4hnXicIhA209MlYDrz6rg/Gu33BlWViLbtPDW/lQpBoojlw2Pdw8Fu0Xd9uRh9/8TAIU0jiDjODgcuLCBvEqY0fnQyEOzrUXybmzZqFgDsMUWI53F97boU2Tat71sWQrUaRn0BJXRqJhJKpy3U3S3AGXfHAAGCQEn0xeFOPyj3bm5a9ctMsSxjkteqhdRWNV8qWyxFnL9TUgb7fIFgl7fXNCnPzqbTO5FacMxtjQBSJMsSHz4w4vekUnrdQ6Zc8WDnxp+5B4WSsQqCH+HoHRZQxrQnMrnKh71+5fgro6GYoVOptdwtC7cbcGy7JzbUIWsli9drdqOMfDxZupNNbavGZSi975nBJl9w+VdYD23l7COel/sktWi0cWOZHNPZxkHXUL9Pym2V4T+lmMNORrdT2Xx5GRTVlZt6DYJohM7z/DwsFk4eG4kn10u7yDcNuisCiSOE08t19/OixOfXN0oaHPqdUoKqmlo/LCkeNs06jrMwNx2Lq0WoXWl3dVHi/CcCWDimqVpGTW2sOVRUa1XXJduu20KeriNBFHMs3xcu/Z14RpdItEbw+cXLq/Fn9RVK6GkovwSk7EhTBpyIHIdfOjDY6WvKIgM96NK1da2Vg/hHHxz6XwPfnL/FPAoxkiVFqZMNqQKjJNDhk4dtjLtY9cGwq7arurajtUaAdIugm8vpXYoPj0fQt98tMa/PQBP8yTZNVCmVkCBJjGz2+o+HwsFxmxd4m7oFxmFZtwnotNo4qDoUGbzYpnxyfxCdO3ctAX6dgeWiY1moJTUICvdUj987HR7slZPZSg7xHPbKAtpIFyzISksEEGqFYKQL8mMFPkVAEJTlD/i8+az6FqSC9fTbjArAQSD6HdgbfW3qoLyypRead30y56aSOdOxnWJbBJrLI13cMaBDKyEqlV6fjY9m7m323l/deLuU19iLIv5gF9k3OoD7R/aQv7JmfhvuIpFHHTKP0itrulHVs5BSs63ZlVHDQCwgoZTmINMhaAMyks+4/N7IQDg+ujfcIXH17FQsUs5UnOLVjF0wHZDBPVngkJHZqKVXH5SAl2Tz5TcMQD41JKJQQEQ3Fy/c6j06OYijwyGd8cLyojKw7ui2MAQKMLwyoM0jQO9JrldTN/7IU1bGlFqo1QDr3RUsoNTZxQRsLG5dvT7lGytMipMTewzFK0MwT/7egvOKUbP1pdv56spaEu5eBu815O44gtmrFN/9aulR42eluAiyAJD6GZbl9+ThaB8fGwlQf49CPR7WGFys69u4VNxy1+7dN9eTa9Q0meJfADX2uWsO4/wnDQPC3JdxmEOsztlHm8lYGcI8COdOAI4DooBOFjAgC1gBXAVcg3znucabQE808DzHvwIMALq5vhJjsCXwAAAAAElFTkSuQmCC") center center no-repeat;
background-size: 16px 16px;
filter: hue-rotate(180deg) saturate(.6);
filter: hue-rotate(90deg) saturate(.6);
animation: spin linear 3s forwards infinite;
}
+69 -8
View File
@@ -13,7 +13,8 @@ html, body {
@supports (background-blend-mode: overlay) {
html, body {
background: repeating-linear-gradient(45deg, #333, #111 2px, #111 3px), repeating-linear-gradient(135deg, #444, #333 2px, #222 3px);
background: repeating-linear-gradient(45deg, #333, #111 2px, #111 3px),
repeating-linear-gradient(135deg, #444, #333 2px, #222 3px);
background-blend-mode: overlay, normal;
background-size: 100% 100%, 100% 100%;
background-attachment: fixed;
@@ -41,7 +42,8 @@ html, body {
border: 1px solid #555;
box-shadow: inset 0 0 0 1px #111, inset 0 0 2px 1px #444, 0 0 2px 2px #000;
background: #181818;
background: repeating-linear-gradient(to right, rgba(255, 255, 255, .05), rgba(0, 0, 0, .08) 2px), repeating-linear-gradient(to bottom, #222, #111 2px);
background: repeating-linear-gradient(to right, rgba(255, 255, 255, .05), rgba(0, 0, 0, .08) 2px),
repeating-linear-gradient(to bottom, #222, #111 2px);
background-blend-mode: overlay;
will-change: transform;
}
@@ -75,7 +77,9 @@ code {
@supports (-webkit-text-stroke-width: 1px) {
#sitename, #sitename:hover, #sitename:focus {
background: #731;
background: repeating-linear-gradient(to bottom, rgba(0, 0, 0, .2), rgba(0, 0, 0, .5) 2px), linear-gradient(to bottom, rgba(255, 96, 0, .2), rgba(0, 0, 0, .9) 100%), linear-gradient(to bottom, #210, #310 15%, #fff 50%, #310 80%);
background: repeating-linear-gradient(to bottom, rgba(0, 0, 0, .2), rgba(0, 0, 0, .5) 2px),
linear-gradient(to bottom, rgba(255, 96, 0, .2), rgba(0, 0, 0, .9) 100%),
linear-gradient(to bottom, #210, #310 15%, #fff 50%, #310 80%);
-moz-background-clip: text !important;
-webkit-background-clip: text !important;
background-clip: text !important;
@@ -85,23 +89,42 @@ code {
filter: drop-shadow(0 0 2px #000);
-webkit-text-stroke-color: #999;
-webkit-text-stroke-width: 0.02em;
animation: ease-in-out spinwash 60s 15s alternate infinite;
}
#sitename:hover, #sitename:focus {
background: #951;
background: repeating-linear-gradient(to bottom, rgba(0, 0, 0, .2), rgba(0, 0, 0, .3) 2px), linear-gradient(to bottom, rgba(255, 255, 255, .2), rgba(0, 0, 0, .7) 100%), linear-gradient(to bottom, #930, #d50 15%, #fff 50%, #930 80%, #000 100%, #ff0 150%);
background: repeating-linear-gradient(to bottom, rgba(0, 0, 0, .2), rgba(0, 0, 0, .3) 2px),
linear-gradient(to bottom, rgba(255, 255, 255, .2), rgba(0, 0, 0, .7) 100%),
linear-gradient(to bottom, #930, #d50 15%, #fff 50%, #930 80%, #000 100%, #ff0 150%);
filter: drop-shadow(0 0 2px #b00);
-webkit-text-stroke-color: #bbb;
animation: none;
}
}
@keyframes spinwash {
from {
filter: hue-rotate(0) drop-shadow(0 0 2px #000);
}
to {
filter: hue-rotate(360deg) drop-shadow(0 0 2px #000);
}
}
a, a:visited {
color: #f60;
font-weight: bold;
color: #c4ad9d;
text-decoration: none;
outline: none;
}
a:hover, a:focus {
color: #f90;
color: #e88b44;
}
a:active {
color: #f60;
}
hr {
@@ -110,7 +133,21 @@ hr {
color: transparent;
border: none;
background: #555;
background: linear-gradient(to right, rgba(0, 0, 0, 0), #555, rgba(0, 0, 0, 0));
background: linear-gradient(to right, rgba(0,0,0,0) 35%, rgba(255,255,255,.3), rgba(0,0,0,0) 65%),
linear-gradient(to right, rgba(0, 0, 0, 0), #605555, rgba(0, 0, 0, 0));
}
::selection,
::-moz-selection {
text-shadow: none;
background: #431;
color: #fff;
}
#totals {
padding-top: 6px;
line-height: 140%;
text-shadow: 0 1px 1px #000;
}
#footer {
@@ -130,11 +167,33 @@ hr {
}
#footer.version {
padding: 4px;
line-height: 19px;
font-size: 9.5pt;
font-weight: normal;
-moz-user-select: none;
-webkit-user-select: none;
user-select: none;
}
#footer.version a {
margin: 0 1px 0 2px;
}
#footer.version::before {
margin-left: -10px;
content: "";
display: inline-block;
margin-top: 1px;
width: 20px;
height: 18px;
vertical-align: middle;
background: url(/favicon.png) left top no-repeat;
background-size: 16px 16px;
mix-blend-mode: luminosity;
}
#initializing::before {
margin-left: -20px;
content: "";
display: inline-block;
width: 28px;
@@ -178,6 +237,8 @@ hr {
font-size: 10pt;
}
#footer.version {
margin-top: 0;
line-height: 18px;
font-size: 8.5pt;
}
#initializing::before {
+22 -4
View File
@@ -67,13 +67,19 @@ public class ZzzOTController implements ClientApp {
private static volatile ZzzOTController _controller;
// you wouldn't run two instances in the same JVM, would you?
private static String _sitename;
private static String _showfooter;
private static String _footertext;
private ClientAppState _state = UNINITIALIZED;
private static final String NAME = "ZzzOT";
private static final String DEFAULT_SITENAME = "ZZZOT";
private static final String PROP_SITENAME = "sitename";
private static final String VERSION = "0.16.1";
private static final String VERSION = "0.17.0";
private static final String DEFAULT_SHOWFOOTER = "true";
private static final String PROP_SHOWFOOTER = "showfooter";
private static final String DEFAULT_FOOTERTEXT = "Running <a href=\"https://github.com/i2p/i2p.plugins.zzzot\" target=\"_blank\">ZZZOT</a> " + VERSION;
private static final String PROP_FOOTERTEXT = "footertext";
private static final String CONFIG_FILE = "zzzot.config";
private static final String BACKUP_SUFFIX = ".jetty8";
private static final String[] xmlFiles = {
@@ -102,6 +108,8 @@ public class ZzzOTController implements ClientApp {
}
_zzzot = new ZzzOT(ctx, props);
_sitename = props.getProperty(PROP_SITENAME, DEFAULT_SITENAME);
_showfooter = props.getProperty(PROP_SHOWFOOTER, DEFAULT_SHOWFOOTER);
_footertext = props.getProperty(PROP_FOOTERTEXT, DEFAULT_FOOTERTEXT);
_state = INITIALIZED;
}
@@ -194,7 +202,7 @@ public class ZzzOTController implements ClientApp {
if (dest != null) {
List msgs = tun.clearMessages();
for (Object s : msgs) {
_log.error("NOTICE: ZzzOT Tunnel message: " + s);
_log.logAlways(Log.INFO, "NOTICE: ZzzOT Tunnel message: " + s);
}
}
_tunnel = tun;
@@ -357,7 +365,7 @@ public class ZzzOTController implements ClientApp {
String b64 = dest.toBase64();
try {
// help.html
String html = FileUtil.readTextFile(fileTmpl.getAbsolutePath(), 400, true);
String html = FileUtil.readTextFile(fileTmpl.getAbsolutePath(), 500, true);
if (html == null)
throw new IOException(fileTmpl.getAbsolutePath() + " open failed");
// replace $HOME in path
@@ -382,7 +390,7 @@ public class ZzzOTController implements ClientApp {
os.write(html.getBytes("UTF-8"));
os.close();
// index.html
String html2 = FileUtil.readTextFile(index_in.getAbsolutePath(), 19, true);
String html2 = FileUtil.readTextFile(index_in.getAbsolutePath(), 50, true);
if (html2 == null)
throw new IOException(fileTmpl.getAbsolutePath() + " open failed");
html2 = html2.replace("$B32", b32);
@@ -477,6 +485,16 @@ public class ZzzOTController implements ClientApp {
return VERSION;
}
/** @since 0.17.0 */
public static String shouldShowFooter() {
return _showfooter;
}
/** @since 0.17.0 */
public static String footerText() {
return _footertext;
}
/** @since 0.12.0 */
private synchronized void changeState(ClientAppState state) {
_state = state;
+11 -3
View File
@@ -7,6 +7,7 @@
<noscript><meta http-equiv="refresh" content="300;url=."></noscript>
<title><%=ZzzOTController.getSiteName()%> OPENTRACKER | STATS</title>
<link href="/tracker.css" rel="stylesheet" type="text/css">
<link rel="icon" type="image/png" href="/favicon.png">
</head>
<body id="stats">
<div id="container">
@@ -16,7 +17,7 @@
Torrents torrents = ZzzOTController.getTorrents();
if (torrents != null) {
%>
<p>
<p id="totals">
<b>Torrents:</b> <%=torrents.size()%><br>
<b>Peers:</b> <%=torrents.countPeers()%><br>
</p>
@@ -27,13 +28,20 @@
<%
}
%>
<span id="footer" class="version">Running ZZZOT <%=ZzzOTController.getVersion()%></span>
<%
String showfooter = ZzzOTController.shouldShowFooter();
if (showfooter == "true") {
%>
<span id="footer" class="version"><%=ZzzOTController.footerText()%></span>
<%
}
%>
</div>
</div>
<script type="text/javascript">
setInterval(function() {
var xhr = new XMLHttpRequest();
xhr.open('GET', '/tracker/index.jsp?' + new Date().getTime(), true);
xhr.open('GET', '/tracker/?' + new Date().getTime(), true);
xhr.responseType = "text";
xhr.onreadystatechange = function () {
if (xhr.readyState==4 && xhr.status==200) {