aboutsummaryrefslogtreecommitdiffstats
path: root/apps/mobile/plugins/trust-local-certs.cjs
diff options
context:
space:
mode:
Diffstat (limited to 'apps/mobile/plugins/trust-local-certs.cjs')
-rw-r--r--apps/mobile/plugins/trust-local-certs.cjs43
1 files changed, 43 insertions, 0 deletions
diff --git a/apps/mobile/plugins/trust-local-certs.cjs b/apps/mobile/plugins/trust-local-certs.cjs
new file mode 100644
index 00000000..40275034
--- /dev/null
+++ b/apps/mobile/plugins/trust-local-certs.cjs
@@ -0,0 +1,43 @@
+const { AndroidConfig, withAndroidManifest } = require("@expo/config-plugins");
+const { Paths } = require("@expo/config-plugins/build/android");
+const path = require("path");
+const fs = require("fs");
+const fsPromises = fs.promises;
+
+const { getMainApplicationOrThrow } = AndroidConfig.Manifest;
+
+const withTrustLocalCerts = (config) => {
+ return withAndroidManifest(config, async (config) => {
+ config.modResults = await setCustomConfigAsync(config, config.modResults);
+ return config;
+ });
+};
+
+async function setCustomConfigAsync(config, androidManifest) {
+ const src_file_pat = path.join(__dirname, "network_security_config.xml");
+ const res_file_path = path.join(
+ await Paths.getResourceFolderAsync(config.modRequest.projectRoot),
+ "xml",
+ "network_security_config.xml",
+ );
+
+ const res_dir = path.resolve(res_file_path, "..");
+
+ if (!fs.existsSync(res_dir)) {
+ await fsPromises.mkdir(res_dir);
+ }
+
+ try {
+ await fsPromises.copyFile(src_file_pat, res_file_path);
+ } catch (e) {
+ throw e;
+ }
+
+ const mainApplication = getMainApplicationOrThrow(androidManifest);
+ mainApplication.$["android:networkSecurityConfig"] =
+ "@xml/network_security_config";
+
+ return androidManifest;
+}
+
+module.exports = withTrustLocalCerts;