Merge branch 'network-security-config-force-https' into 'master'
set up whitelist of repo domains to force HTTPS See merge request fdroid/fdroidclient!835
This commit is contained in:
commit
2ac9100eea
@ -65,6 +65,7 @@
|
||||
android:description="@string/app_description"
|
||||
android:allowBackup="true"
|
||||
android:fullBackupContent="@xml/backup_rules"
|
||||
android:networkSecurityConfig="@xml/network_security_config"
|
||||
android:theme="@style/AppThemeLight"
|
||||
android:supportsRtl="true">
|
||||
|
||||
|
@ -7,10 +7,11 @@ import android.text.TextUtils;
|
||||
import android.util.Log;
|
||||
import org.fdroid.fdroid.R;
|
||||
import org.fdroid.fdroid.Utils;
|
||||
import org.fdroid.fdroid.nearby.peers.WifiPeer;
|
||||
import org.fdroid.fdroid.nearby.SwapWorkflowActivity;
|
||||
import org.fdroid.fdroid.nearby.peers.WifiPeer;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
public class NewRepoConfig {
|
||||
@ -164,19 +165,43 @@ public class NewRepoConfig {
|
||||
return errorMessage;
|
||||
}
|
||||
|
||||
private static final List<String> FORCE_HTTPS_DOMAINS = Arrays.asList(
|
||||
"amazonaws.com",
|
||||
"github.com",
|
||||
"githubusercontent.com",
|
||||
"github.io",
|
||||
"gitlab.com",
|
||||
"gitlab.io"
|
||||
);
|
||||
|
||||
/**
|
||||
* Sanitize and format an incoming repo URI for function and readability
|
||||
* Sanitize and format an incoming repo URI for function and readability.
|
||||
* This also forces URLs listed in {@code app/src/main/res/xml/network_security_config.xml}
|
||||
* to have "https://" as the scheme.
|
||||
*
|
||||
* @see <a href="https://developer.android.com/training/articles/security-config">Network Security Config</a>
|
||||
*/
|
||||
public static String sanitizeRepoUri(Uri uri) {
|
||||
String scheme = uri.getScheme();
|
||||
String newScheme = scheme.toLowerCase(Locale.ENGLISH);
|
||||
String host = uri.getHost();
|
||||
String newHost = host.toLowerCase(Locale.ENGLISH);
|
||||
String userInfo = uri.getUserInfo();
|
||||
if ("http".equals(newScheme)) {
|
||||
for (String httpsDomain : FORCE_HTTPS_DOMAINS) {
|
||||
if (newHost.endsWith(httpsDomain)) {
|
||||
scheme = "https";
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return uri.toString()
|
||||
.replaceAll("\\?.*$", "") // remove the whole query
|
||||
.replaceAll("/*$", "") // remove all trailing slashes
|
||||
.replace(userInfo + "@", "") // remove user authentication
|
||||
.replace(host, host.toLowerCase(Locale.ENGLISH))
|
||||
.replace(scheme, scheme.toLowerCase(Locale.ENGLISH))
|
||||
.replaceFirst(host, newHost)
|
||||
.replaceFirst(scheme, newScheme)
|
||||
.replace("fdroidrepo", "http") // proper repo address
|
||||
.replace("/FDROID/REPO", "/fdroid/repo"); // for QR FDroid path
|
||||
}
|
||||
|
26
app/src/main/res/xml/network_security_config.xml
Normal file
26
app/src/main/res/xml/network_security_config.xml
Normal file
@ -0,0 +1,26 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<network-security-config>
|
||||
<base-config cleartextTrafficPermitted="true"/>
|
||||
|
||||
<domain-config cleartextTrafficPermitted="false">
|
||||
<domain includeSubdomains="true">amazonaws.com</domain>
|
||||
</domain-config>
|
||||
<domain-config cleartextTrafficPermitted="false">
|
||||
<domain includeSubdomains="true">f-droid.org</domain>
|
||||
</domain-config>
|
||||
<domain-config cleartextTrafficPermitted="false">
|
||||
<domain includeSubdomains="true">github.com</domain>
|
||||
</domain-config>
|
||||
<domain-config cleartextTrafficPermitted="false">
|
||||
<domain includeSubdomains="true">githubusercontent.com</domain>
|
||||
</domain-config>
|
||||
<domain-config cleartextTrafficPermitted="false">
|
||||
<domain includeSubdomains="true">github.io</domain>
|
||||
</domain-config>
|
||||
<domain-config cleartextTrafficPermitted="false">
|
||||
<domain includeSubdomains="true">gitlab.com</domain>
|
||||
</domain-config>
|
||||
<domain-config cleartextTrafficPermitted="false">
|
||||
<domain includeSubdomains="true">gitlab.io</domain>
|
||||
</domain-config>
|
||||
</network-security-config>
|
Loading…
x
Reference in New Issue
Block a user