Commit d165e4a1 authored by Karsten Loesing's avatar Karsten Loesing
Browse files

Use configured base URL for permanent link.

Turn absolute links into relative links.

Fixes #27925.
parent a4187326
# Changes in version 4.?.? - 2019-1?-??
* Medium changes
- Turn absolute links to nearby addresses and translations into
relative links to avoid falling back to http://. Use the base URL
from the deployment descriptor for the printed permanent link,
also to avoid falling back to http://.
# Changes in version 4.2.0 - 2019-11-09
......
......@@ -140,8 +140,14 @@ public class ExoneraTorServlet extends HttpServlet {
PrintWriter out = new PrintWriter(so);
this.writeHeader(out, rb, langStr);
/* Obtain request URL without query string parameters for links. */
String requestUrl = request.getRequestURL().toString();
/* Obtain the current request URI for relative links and the configured
* base URL for absolute links like the printed permanent link. If no base
* URL has been configured, use the current request URL for the permanent
* link. */
String requestUri = request.getRequestURI();
String baseUrl = this.getServletContext().getInitParameter("baseUrl");
String permanentLinkUrl = (null != baseUrl)
? (baseUrl + requestUri) : request.getRequestURL().toString();
/* Write form. */
boolean timestampOutOfRange = requestedDate.valid
......@@ -157,43 +163,43 @@ public class ExoneraTorServlet extends HttpServlet {
/* If both parameters are empty, don't print any summary and exit.
* This is the start page. */
if ("".equals(relayIp) && requestedDate.empty) {
this.writeFooter(out, rb, requestUrl, null, null);
this.writeFooter(out, rb, requestUri, null, null);
/* If only one parameter is empty and the other is not, print summary
* with warning message and exit. */
} else if ("".equals(relayIp)) {
this.writeSummaryNoIp(out, rb);
this.writeFooter(out, rb, requestUrl, null, null);
this.writeFooter(out, rb, requestUri, null, null);
} else if (requestedDate.empty) {
this.writeSummaryNoTimestamp(out, rb);
this.writeFooter(out, rb, requestUrl, null, null);
this.writeFooter(out, rb, requestUri, null, null);
/* If there's an issue with parsing either of the parameters, print
* summary with error message and exit. */
} else if (relayIpHasError) {
this.writeSummaryInvalidIp(out, rb, ipParameter);
this.writeFooter(out, rb, requestUrl, null, null);
this.writeFooter(out, rb, requestUri, null, null);
} else if (!requestedDate.valid) {
this.writeSummaryInvalidTimestamp(out, rb, requestedDate.asRequested);
this.writeFooter(out, rb, requestUrl, null, null);
this.writeFooter(out, rb, requestUri, null, null);
/* If the timestamp is too recent, print summary with error message and
* exit. */
} else if (requestedDate.tooRecent) {
this.writeSummaryTimestampTooRecent(out, rb);
this.writeFooter(out, rb, requestUrl, null, null);
this.writeFooter(out, rb, requestUri, null, null);
/* If we were unable to connect to the database,
* write an error message. */
} else if (!successfullyConnectedToBackend) {
this.writeSummaryUnableToConnectToBackend(out, rb);
this.writeFooter(out, rb, requestUrl, null, null);
this.writeFooter(out, rb, requestUri, null, null);
/* Similarly, if we found the database to be empty,
* write an error message, too. */
} else if (firstDate.empty || lastDate.empty) {
this.writeSummaryNoData(out, rb);
this.writeFooter(out, rb, requestUrl, null, null);
this.writeFooter(out, rb, requestUri, null, null);
/* If the requested date is out of range, tell the user. */
} else if (timestampOutOfRange) {
......@@ -201,11 +207,11 @@ public class ExoneraTorServlet extends HttpServlet {
this.writeSummaryTimestampOutsideRange(out, rb, requestedDate.asString,
firstDate.asString, lastDate.date.isBefore(dayBeforeYesterday)
? lastDate.asString : dayBeforeYesterday.format(ISO_LOCAL_DATE));
this.writeFooter(out, rb, requestUrl, relayIp, requestedDate.asString);
this.writeFooter(out, rb, requestUri, relayIp, requestedDate.asString);
} else if (noRelevantConsensuses) {
this.writeSummaryNoDataForThisInterval(out, rb);
this.writeFooter(out, rb, requestUrl, relayIp, requestedDate.asString);
this.writeFooter(out, rb, requestUri, relayIp, requestedDate.asString);
/* Print out result. */
} else {
......@@ -215,14 +221,14 @@ public class ExoneraTorServlet extends HttpServlet {
statusEntries);
} else if (addressesInSameNetwork != null
&& !addressesInSameNetwork.isEmpty()) {
this.writeSummaryAddressesInSameNetwork(out, rb, requestUrl, relayIp,
this.writeSummaryAddressesInSameNetwork(out, rb, requestUri, relayIp,
requestedDate.asString, langStr, addressesInSameNetwork);
} else {
this.writeSummaryNegative(out, rb, relayIp, requestedDate.asString);
}
this.writePermanentLink(out, rb, requestUrl, relayIp,
this.writePermanentLink(out, rb, permanentLinkUrl, relayIp,
requestedDate.asString, langStr);
this.writeFooter(out, rb, requestUrl, relayIp, requestedDate.asString);
this.writeFooter(out, rb, requestUri, relayIp, requestedDate.asString);
}
/* Forward to the JSP that adds header and footer. */
......@@ -464,7 +470,7 @@ public class ExoneraTorServlet extends HttpServlet {
}
void writeSummaryAddressesInSameNetwork(PrintWriter out,
ResourceBundle rb, String requestUrl, String relayIp, String timestampStr,
ResourceBundle rb, String requestUri, String relayIp, String timestampStr,
String langStr, List<String> addressesInSameNetwork) {
Object[][] panelItems = new Object[addressesInSameNetwork.size()][];
for (int i = 0; i < addressesInSameNetwork.size(); i++) {
......@@ -474,11 +480,11 @@ public class ExoneraTorServlet extends HttpServlet {
if (addressInSameNetwork.contains(":")) {
address = addressInSameNetwork.replaceAll("[\\[\\]]", "");
link = String.format("%s?ip=[%s]&timestamp=%s&lang=%s",
requestUrl, address.replaceAll(":", "%3A"), timestampStr, langStr);
requestUri, address.replaceAll(":", "%3A"), timestampStr, langStr);
address = "[" + address + "]";
} else {
link = String.format("%s?ip=%s&timestamp=%s&lang=%s",
requestUrl, addressInSameNetwork, timestampStr, langStr);
requestUri, addressInSameNetwork, timestampStr, langStr);
address = addressInSameNetwork;
}
panelItems[i] = new Object[] { link, address };
......@@ -600,7 +606,8 @@ public class ExoneraTorServlet extends HttpServlet {
}
private void writePermanentLink(PrintWriter out, ResourceBundle rb,
String requestUrl, String relayIp, String timestampStr, String langStr) {
String permanentLinkUrl, String relayIp, String timestampStr,
String langStr) {
String encodedAddress = relayIp.contains(":")
? "[" + relayIp.replaceAll(":", "%3A") + "]" : relayIp;
out.printf(" <div class=\"row\">\n"
......@@ -610,12 +617,12 @@ public class ExoneraTorServlet extends HttpServlet {
+ "timestamp=%s&amp;lang=%s</pre>\n"
+ " </div><!-- col -->\n"
+ " </div><!-- row -->\n",
rb.getString("permanentlink.heading"), requestUrl,
rb.getString("permanentlink.heading"), permanentLinkUrl,
encodedAddress, timestampStr, langStr);
}
private void writeFooter(PrintWriter out, ResourceBundle rb,
String requestUrl, String relayIp, String timestampStr) {
String requestUri, String relayIp, String timestampStr) {
out.printf(" </div><!-- container -->\n"
+ " <div class=\"container\">\n"
+ " <div class=\"row\">\n"
......@@ -644,11 +651,11 @@ public class ExoneraTorServlet extends HttpServlet {
: this.availableLanguageNames.entrySet()) {
if (null != relayIp && null != timestampStr) {
out.printf(" <a href=\"%s?ip=%s&timestamp=%s&lang=%s\">%s</a>",
requestUrl, relayIp, timestampStr, entry.getKey(),
requestUri, relayIp, timestampStr, entry.getKey(),
entry.getValue());
} else {
out.printf(" <a href=\"%s?lang=%s\">%s</a>",
requestUrl, entry.getKey(), entry.getValue());
requestUri, entry.getKey(), entry.getValue());
}
}
out.printf("</p>\n"
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment