Console: Move flag overrides to war

This commit is contained in:
zzz
2020-12-26 06:12:31 -05:00
parent 8835351b99
commit 12f9a7187e
18 changed files with 33 additions and 37 deletions

View File

@@ -12,8 +12,8 @@
* with headers set so the browser caches. * with headers set so the browser caches.
* *
* As of 0.9.36: * As of 0.9.36:
* All new and changed flags must go in the flags16x11/ dir, * All new and changed flags must go in the ../resources/docs/icons/flags16x11/ dir,
* which will be checked first by flags.jsp. * which is copied into the war and will be checked first by flags.jsp.
* The flags/ dir is the original set from famfamfam, * The flags/ dir is the original set from famfamfam,
* which may be symlinked in package installs. * which may be symlinked in package installs.
* *
@@ -23,44 +23,54 @@ if (c != null &&
(c.length() == 2 || c.length() == 7) && (c.length() == 2 || c.length() == 7) &&
c.replaceAll("[a-z0-9_]", "").length() == 0) { c.replaceAll("[a-z0-9_]", "").length() == 0) {
String flagSet = "flags16x11"; String flagSet = "flags16x11";
String s = request.getParameter("s");
String base = net.i2p.I2PAppContext.getGlobalContext().getBaseDir().getAbsolutePath() + java.io.File ffile;
long lastmod;
java.io.InputStream fin = flags_jsp.class.getResourceAsStream("/net/i2p/router/web/resources/docs/icons/" + flagSet + '/' + c + ".png");
if (fin != null) {
// found in the war
java.io.File war = new java.io.File(net.i2p.I2PAppContext.getGlobalContext().getBaseDir(), "webapps/routerconsole.war");
ffile = null;
lastmod = war.lastModified();
} else {
// fallback to flags dir, which will be symlinked to /usr/share/flags/countries/16x11 for package builds
String base = net.i2p.I2PAppContext.getGlobalContext().getBaseDir().getAbsolutePath() +
java.io.File.separatorChar + java.io.File.separatorChar +
"docs" + java.io.File.separatorChar + "icons"; "docs" + java.io.File.separatorChar + "icons";
String file = flagSet + java.io.File.separatorChar + c + ".png"; String file = "flags" + java.io.File.separatorChar + c + ".png";
java.io.File ffile = new java.io.File(base, file);
if (!ffile.exists()) {
// fallback to flags dir, which will be symlinked to /usr/share/flags/countries/16x11 for package builds
file = "flags" + java.io.File.separatorChar + c + ".png";
ffile = new java.io.File(base, file); ffile = new java.io.File(base, file);
long length = ffile.length();
if (length <= 0) {
response.sendError(403, "Flag not found");
return;
}
response.setHeader("Content-Length", Long.toString(length));
lastmod = ffile.lastModified();
} }
long lastmod = ffile.lastModified();
if (lastmod > 0) { if (lastmod > 0) {
long iflast = request.getDateHeader("If-Modified-Since"); long iflast = request.getDateHeader("If-Modified-Since");
// iflast is -1 if not present; round down file time // iflast is -1 if not present; round down file time
if (iflast >= ((lastmod / 1000) * 1000)) { if (iflast >= ((lastmod / 1000) * 1000)) {
response.setStatus(304); response.setStatus(304);
if (fin != null)
fin.close();
return; return;
} }
response.setDateHeader("Last-Modified", lastmod); response.setDateHeader("Last-Modified", lastmod);
// cache for a day
response.setDateHeader("Expires", net.i2p.I2PAppContext.getGlobalContext().clock().now() + 86400000l);
response.setHeader("Cache-Control", "public, max-age=604800");
response.setHeader("X-Content-Type-Options", "nosniff");
} }
long length = ffile.length(); // cache for a day
if (length > 0) response.setDateHeader("Expires", net.i2p.I2PAppContext.getGlobalContext().clock().now() + 86400000l);
response.setHeader("Content-Length", Long.toString(length)); response.setHeader("Cache-Control", "public, max-age=604800");
response.setHeader("X-Content-Type-Options", "nosniff");
response.setContentType("image/png"); response.setContentType("image/png");
response.setHeader("Accept-Ranges", "none"); response.setHeader("Accept-Ranges", "none");
java.io.FileInputStream fin = null;
java.io.OutputStream cout = response.getOutputStream(); java.io.OutputStream cout = response.getOutputStream();
try { try {
// flags dir may be a symlink, which readFile will reject // flags dir may be a symlink, which readFile will reject
// We carefully vetted the "c" value above. // We carefully vetted the "c" value above.
//net.i2p.util.FileUtil.readFile(file, base, cout); //net.i2p.util.FileUtil.readFile(file, base, cout);
fin = new java.io.FileInputStream(ffile); if (fin == null)
fin = new java.io.FileInputStream(ffile);
net.i2p.data.DataHelper.copy(fin, cout); net.i2p.data.DataHelper.copy(fin, cout);
} catch (java.io.IOException ioe) { } catch (java.io.IOException ioe) {
// prevent 'Committed' IllegalStateException from Jetty // prevent 'Committed' IllegalStateException from Jetty

View File

Before

Width:  |  Height:  |  Size: 275 B

After

Width:  |  Height:  |  Size: 275 B

View File

Before

Width:  |  Height:  |  Size: 143 B

After

Width:  |  Height:  |  Size: 143 B

View File

Before

Width:  |  Height:  |  Size: 143 B

After

Width:  |  Height:  |  Size: 143 B

View File

Before

Width:  |  Height:  |  Size: 143 B

After

Width:  |  Height:  |  Size: 143 B

View File

Before

Width:  |  Height:  |  Size: 545 B

After

Width:  |  Height:  |  Size: 545 B

View File

Before

Width:  |  Height:  |  Size: 435 B

After

Width:  |  Height:  |  Size: 435 B

View File

Before

Width:  |  Height:  |  Size: 347 B

After

Width:  |  Height:  |  Size: 347 B

View File

Before

Width:  |  Height:  |  Size: 697 B

After

Width:  |  Height:  |  Size: 697 B

View File

Before

Width:  |  Height:  |  Size: 469 B

After

Width:  |  Height:  |  Size: 469 B

View File

Before

Width:  |  Height:  |  Size: 418 B

After

Width:  |  Height:  |  Size: 418 B

View File

Before

Width:  |  Height:  |  Size: 413 B

After

Width:  |  Height:  |  Size: 413 B

View File

Before

Width:  |  Height:  |  Size: 491 B

After

Width:  |  Height:  |  Size: 491 B

View File

Before

Width:  |  Height:  |  Size: 228 B

After

Width:  |  Height:  |  Size: 228 B

View File

Before

Width:  |  Height:  |  Size: 418 B

After

Width:  |  Height:  |  Size: 418 B

View File

Before

Width:  |  Height:  |  Size: 333 B

After

Width:  |  Height:  |  Size: 333 B

View File

Before

Width:  |  Height:  |  Size: 377 B

After

Width:  |  Height:  |  Size: 377 B

View File

@@ -1498,7 +1498,7 @@
<fileset dir="installer/resources/icons/flags/" includes="az.png cn.png de.png es.png fr.png hu.png id.png ir.png it.png jp.png nl.png pl.png pt.png ro.png ru.png se.png tr.png us.png" /> <fileset dir="installer/resources/icons/flags/" includes="az.png cn.png de.png es.png fr.png hu.png id.png ir.png it.png jp.png nl.png pl.png pt.png ro.png ru.png se.png tr.png us.png" />
</copy> </copy>
<copy todir="pkg-temp/docs/icons/flags" > <copy todir="pkg-temp/docs/icons/flags" >
<!-- base flags/ dir only. flags16x11/ dir already copied by prepConsoleDocs target --> <!-- base flags/ dir only. flags16x11/ dir now in the war -->
<fileset dir="installer/resources/icons/flags" /> <fileset dir="installer/resources/icons/flags" />
</copy> </copy>
</target> </target>
@@ -1650,27 +1650,13 @@
<delete dir="./pkg-mavencentral" /> <delete dir="./pkg-mavencentral" />
</target> </target>
<!-- initialNews.xml files, GeoIP files, and flag icons --> <!-- initialNews.xml files and GeoIP files -->
<target name="prepConsoleDocs" depends="prepConsoleDocUpdates, prepgeoupdate" > <target name="prepConsoleDocs" depends="prepgeoupdate" >
<copy todir="pkg-temp/docs/initialNews/"> <copy todir="pkg-temp/docs/initialNews/">
<fileset dir="installer/resources/initialNews/" /> <fileset dir="installer/resources/initialNews/" />
</copy> </copy>
</target> </target>
<!-- flag icons -->
<target name="prepConsoleDocUpdates">
<copy todir="pkg-temp/docs/" >
<!--
As of 0.9.36:
All new and changed flags must go in the flags16x11/ dir,
which will be checked first by flags.jsp.
The flags/ dir is the original set from famfamfam,
which may be symlinked in package installs.
-->
<fileset dir="installer/resources/" includes="icons/flags16x11/*" />
</copy>
</target>
<target name="consoleDocs" depends="deletepkg-temp, prepConsoleDocs"> <target name="consoleDocs" depends="deletepkg-temp, prepConsoleDocs">
<zip destfile="docs.zip" basedir="pkg-temp" whenempty="fail" /> <zip destfile="docs.zip" basedir="pkg-temp" whenempty="fail" />
</target> </target>
@@ -1790,7 +1776,7 @@
</exec> </exec>
</target> </target>
<target name="prepupdate" depends="build2, prepupdateSmall, prepConsoleDocUpdates, prepCertificates, prep-script-translation, truncatehistory"> <target name="prepupdate" depends="build2, prepupdateSmall, prepCertificates, prep-script-translation, truncatehistory">
<copy file="build/BOB.jar" todir="pkg-temp/lib/" /> <copy file="build/BOB.jar" todir="pkg-temp/lib/" />
<copy file="build/sam.jar" todir="pkg-temp/lib/" /> <copy file="build/sam.jar" todir="pkg-temp/lib/" />
<copy file="build/i2psnark.jar" todir="pkg-temp/lib" /> <copy file="build/i2psnark.jar" todir="pkg-temp/lib" />