package net.i2p.router.web;
import net.i2p.I2PAppContext;
import net.i2p.crypto.TrustedUpdate;
import net.i2p.data.DataHelper;
import net.i2p.util.PortMapper;
public class ConfigUpdateHelper extends HelperBase {
private boolean _dontInstall;
public ConfigUpdateHelper() {}
/** hook this so we can call dontInstall() once after getting a context */
@Override
public void setContextId(String contextId) {
super.setContextId(contextId);
_dontInstall = NewsHelper.dontInstall(_context);
}
public boolean canInstall() {
return !_dontInstall;
}
public boolean updateAvailable() {
return true;
}
public String getNewsURL() {
return getNewsURL(_context);
}
/** hack to replace the old news location with the new one, even if they have saved
the update page at some point */
public static String getNewsURL(I2PAppContext ctx) {
String url = ctx.getProperty(ConfigUpdateHandler.PROP_NEWS_URL);
if (url != null && !url.equals(ConfigUpdateHandler.OLD_DEFAULT_NEWS_URL) &&
!url.equals(ConfigUpdateHandler.DEFAULT_NEWS_URL) &&
!url.equals(ConfigUpdateHandler.OLD_DEFAULT_NEWS_URL_SU3))
return url;
else
return ConfigUpdateHandler.DEFAULT_NEWS_URL_SU3;
}
public String getUpdateURL() {
String url = _context.getProperty(ConfigUpdateHandler.PROP_UPDATE_URL);
if (url != null)
return url.replace(",", "\n");
else
return ConfigUpdateHandler.DEFAULT_UPDATE_URL;
}
public String getProxyHost() {
if (isInternal())
return _t("internal") + "\" readonly=\"readonly";
return _context.getProperty(ConfigUpdateHandler.PROP_PROXY_HOST, ConfigUpdateHandler.DEFAULT_PROXY_HOST);
}
public String getProxyPort() {
if (isInternal())
return _t("internal") + "\" readonly=\"readonly";
return Integer.toString(ConfigUpdateHandler.proxyPort(_context));
}
/**
* This should almost always be true.
* @return true if settings are at defaults and proxy is registered
* @since 0.8.13
*/
private boolean isInternal() {
String host = _context.getProperty(ConfigUpdateHandler.PROP_PROXY_HOST);
String port = _context.getProperty(ConfigUpdateHandler.PROP_PROXY_PORT);
return (host == null || host.equals(ConfigUpdateHandler.DEFAULT_PROXY_HOST)) &&
(port == null || port.equals(ConfigUpdateHandler.DEFAULT_PROXY_PORT)) &&
_context.portMapper().getPort(PortMapper.SVC_HTTP_PROXY) == ConfigUpdateHandler.DEFAULT_PROXY_PORT_INT;
}
public String getUpdateThroughProxy() {
if (_context.getProperty(ConfigUpdateHandler.PROP_SHOULD_PROXY, ConfigUpdateHandler.DEFAULT_SHOULD_PROXY))
return "<input type=\"checkbox\" class=\"optbox\" value=\"true\" name=\"updateThroughProxy\" checked=\"checked\" >";
else
return "<input type=\"checkbox\" class=\"optbox\" value=\"true\" name=\"updateThroughProxy\" >";
}
/** @since 0.9.9 */
public String getNewsThroughProxy() {
if (_context.getProperty(ConfigUpdateHandler.PROP_SHOULD_PROXY_NEWS, ConfigUpdateHandler.DEFAULT_SHOULD_PROXY_NEWS))
return "<input type=\"checkbox\" class=\"optbox\" value=\"true\" name=\"newsThroughProxy\" checked=\"checked\" >";
else
return "<input type=\"checkbox\" class=\"optbox\" value=\"true\" name=\"newsThroughProxy\" >";
}
public String getUpdateUnsigned() {
return "<input type=\"checkbox\" class=\"optbox\" value=\"true\" name=\"updateUnsigned\" " +
getChecked(ConfigUpdateHandler.PROP_UPDATE_UNSIGNED) + '>';
}
/** @since 0.9.20 */
public String getUpdateDevSU3() {
return "<input type=\"checkbox\" class=\"optbox\" value=\"true\" name=\"updateDevSU3\" " +
getChecked(ConfigUpdateHandler.PROP_UPDATE_DEV_SU3) + '>';
}
private static final long PERIODS[] = new long[] { 12*60*60*1000l, 24*60*60*1000l,
36*60*60*1000l, 48*60*60*1000l,
3*24*60*60*1000l, 7*24*60*60*1000l,
-1l };
public String getRefreshFrequencySelectBox() {
String freq = _context.getProperty(ConfigUpdateHandler.PROP_REFRESH_FREQUENCY,
ConfigUpdateHandler.DEFAULT_REFRESH_FREQUENCY);
long ms = ConfigUpdateHandler.DEFAULT_REFRESH_FREQ;
try {
ms = Long.parseLong(freq);
if (ms <= 0)
ms = -1;
} catch (NumberFormatException nfe) {}
StringBuilder buf = new StringBuilder(256);
buf.append("<select name=\"refreshFrequency\">");
for (int i = 0; i < PERIODS.length; i++) {
buf.append("<option value=\"").append(PERIODS[i]);
if (PERIODS[i] == ms)
buf.append("\" selected=\"selected");
if (PERIODS[i] == -1)
buf.append("\">").append(_t("Never")).append("</option>\n");
else
buf.append("\">").append(_t("Every")).append(' ').append(DataHelper.formatDuration2(PERIODS[i])).append("</option>\n");
}
buf.append("</select>\n");
return buf.toString();
}
/**
* Right now the jsp hides the whole select box if _dontInstall is true but this could change
*/
public String getUpdatePolicySelectBox() {
String policy = _context.getProperty(ConfigUpdateHandler.PROP_UPDATE_POLICY, ConfigUpdateHandler.DEFAULT_UPDATE_POLICY);
StringBuilder buf = new StringBuilder(256);
buf.append("<select name=\"updatePolicy\">");
buf.append("<option value=\"notify\"");
if ("notify".equals(policy) || _dontInstall)
buf.append(" selected=\"selected\"");
buf.append('>').append(_t("Notify only")).append("</option>");
buf.append("<option value=\"download\"");
if (_dontInstall)
buf.append(" disabled=\"disabled\"");
else if ("download".equals(policy))
buf.append(" selected=\"selected\"");
buf.append('>').append(_t("Download and verify only")).append("</option>");
if (_context.hasWrapper()) {
buf.append("<option value=\"install\"");
if (_dontInstall)
buf.append(" disabled=\"disabled\"");
else if ("install".equals(policy))
buf.append(" selected=\"selected\"");
buf.append('>').append(_t("Download, verify, and restart")).append("</option>");
}
buf.append("</select>\n");
return buf.toString();
}
public String getTrustedKeys() {
return new TrustedUpdate(_context).getTrustedKeysString();
}
public String getZipURL() {
return _context.getProperty(ConfigUpdateHandler.PROP_ZIP_URL, "");
}
/** @since 0.9.20 */
public String getDevSU3URL() {
return _context.getProperty(ConfigUpdateHandler.PROP_DEV_SU3_URL, "");
}
public String getNewsStatus() {
return NewsHelper.status(_context);
}
}