Make appbase_domain work with https URLs.

Also refactored code to be more easily testable and added some tests.
This commit is contained in:
Michael Bayne
2018-05-27 10:32:38 -07:00
parent 956c5cdcd1
commit 9b6837bc69
3 changed files with 72 additions and 27 deletions
@@ -542,7 +542,7 @@ public class Application
}
// check if we're overriding the domain in the appbase
_appbase = overrideAppbase(_appbase);
_appbase = SysProps.overrideAppbase(_appbase);
// make sure there's a trailing slash
if (!_appbase.endsWith("/")) {
@@ -567,7 +567,7 @@ public class Application
if (latest.startsWith(_appbase)) {
latest = _appbase + latest.substring(_appbase.length());
} else {
latest = replaceDomain(latest);
latest = SysProps.replaceDomain(latest);
}
try {
_latest = new URL(latest);
@@ -1809,31 +1809,6 @@ public class Application
return cookie.toString();
}
/**
* Applies {@code appbase_override} or {@code appbase_domain} if they are set.
*/
protected String overrideAppbase (String appbase) {
String appbaseOverride = SysProps.appbaseOverride();
if (appbaseOverride != null) {
return appbaseOverride;
} else {
return replaceDomain(appbase);
}
}
/**
* If appbase_domain property is set, replace the domain on the provided string.
*/
protected String replaceDomain (String appbase)
{
String appbaseDomain = SysProps.appbaseDomain();
if (appbaseDomain != null) {
Matcher m = Pattern.compile("(http://[^/]+)(.*)").matcher(appbase);
appbase = m.replaceAll(appbaseDomain + "$2");
}
return appbase;
}
/**
* Encodes a path for use in a URL.
*/
@@ -5,6 +5,9 @@
package com.threerings.getdown.data;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import com.threerings.getdown.util.VersionUtil;
import com.threerings.getdown.launcher.Getdown;
@@ -136,4 +139,29 @@ public class SysProps
"Regexp '" + propRegex + "' does not match '" + verstr + "' (from " + propName + ")");
return vers;
}
/**
* Applies {@code appbase_override} or {@code appbase_domain} if they are set.
*/
public static String overrideAppbase (String appbase) {
String appbaseOverride = appbaseOverride();
if (appbaseOverride != null) {
return appbaseOverride;
} else {
return replaceDomain(appbase);
}
}
/**
* If appbase_domain property is set, replace the domain on the provided string.
*/
public static String replaceDomain (String appbase)
{
String appbaseDomain = appbaseDomain();
if (appbaseDomain != null) {
Matcher m = Pattern.compile("(https?://[^/]+)(.*)").matcher(appbase);
appbase = m.replaceAll(appbaseDomain + "$2");
}
return appbase;
}
}
@@ -0,0 +1,42 @@
//
// Getdown - application installer, patcher and launcher
// Copyright (C) 2004-2016 Getdown authors
// https://github.com/threerings/getdown/blob/master/LICENSE
package com.threerings.getdown.data;
import org.junit.*;
import static org.junit.Assert.*;
public class SysPropsTest {
@After public void clearProps () {
System.clearProperty("appbase_domain");
System.clearProperty("appbase_override");
}
public static String[] APPBASES = {
"http://foobar.com/myapp",
"https://foobar.com/myapp",
"http://foobar.com:8080/myapp",
"https://foobar.com:8080/myapp"
};
@Test public void testAppbaseDomain () {
System.setProperty("appbase_domain", "https://barbaz.com");
for (String appbase : APPBASES) {
assertEquals("https://barbaz.com/myapp", SysProps.overrideAppbase(appbase));
}
System.setProperty("appbase_domain", "http://barbaz.com");
for (String appbase : APPBASES) {
assertEquals("http://barbaz.com/myapp", SysProps.overrideAppbase(appbase));
}
}
@Test public void testAppbaseOverride () {
System.setProperty("appbase_override", "https://barbaz.com/newapp");
for (String appbase : APPBASES) {
assertEquals("https://barbaz.com/newapp", SysProps.overrideAppbase(appbase));
}
}
}