From 07e6d5baa46534bed1a33fe7101516c0134da42c Mon Sep 17 00:00:00 2001
From: Howard Wu <40033067+Howard20181@users.noreply.github.com>
Date: Thu, 17 Jul 2025 15:36:20 +0800
Subject: [PATCH] Simplify GApps and Magisk link generation scripts
Removed GitHub API authentication and asset parsing logic from generateGappsLink.py and generateMagiskLink.py. Now, download links are constructed directly using static URLs for the latest release assets, improving reliability and reducing complexity.
---
scripts/generateGappsLink.py | 58 +++++---------------------
scripts/generateMagiskLink.py | 78 +++++++++++------------------------
2 files changed, 33 insertions(+), 103 deletions(-)
diff --git a/scripts/generateGappsLink.py b/scripts/generateGappsLink.py
index ecb7779..cdf3cdf 100644
--- a/scripts/generateGappsLink.py
+++ b/scripts/generateGappsLink.py
@@ -15,32 +15,11 @@
# You should have received a copy of the GNU Affero General Public License
# along with MagiskOnWSALocal. If not, see .
#
-# Copyright (C) 2024 LSPosed Contributors
+# Copyright (C) 2025 LSPosed Contributors
#
-
-from datetime import datetime
import sys
-
-import requests
-import json
-import re
from pathlib import Path
-
-class BearerAuth(requests.auth.AuthBase):
- def __init__(self, token):
- self.token = token
-
- def __call__(self, r):
- r.headers["authorization"] = "Bearer " + self.token
- return r
-
-
-github_auth = None
-if Path.cwd().joinpath('token').exists():
- with open(Path.cwd().joinpath('token'), 'r') as token_file:
- github_auth = BearerAuth(token_file.read())
- print("Using token file for authentication", flush=True)
arch = sys.argv[1]
arg2 = sys.argv[2]
download_dir = Path.cwd().parent / "download" if arg2 == "" else Path(arg2)
@@ -51,29 +30,12 @@ print(f"Generating GApps download link: arch={arch}", flush=True)
abi_map = {"x64": "x86_64", "arm64": "arm64"}
android_api_map = {"30": "11.0", "32": "12.1", "33": "13.0"}
release = android_api_map[android_api]
-res = requests.get(f"https://api.github.com/repos/LSPosed/WSA-Addon/releases/latest", auth=github_auth)
-json_data = json.loads(res.content)
-headers = res.headers
-x_ratelimit_remaining = headers["x-ratelimit-remaining"]
-if res.status_code == 200:
- download_files = {}
- assets = json_data["assets"]
- for asset in assets:
- if re.match(rf'gapps.*{release}.*\.rc$', asset["name"]):
- download_files[asset["name"]] = asset["browser_download_url"]
- elif re.match(rf'gapps.*{release}.*{abi_map[arch]}.*\.img$', asset["name"]):
- download_files[asset["name"]] = asset["browser_download_url"]
- with open(download_dir/tempScript, 'a') as f:
- for key, value in download_files.items():
- print(f"download link: {value}\npath: {download_dir / key}\n", flush=True)
- f.writelines(value + '\n')
- f.writelines(f' dir={download_dir}\n')
- f.writelines(f' out={key}\n')
-elif res.status_code == 403 and x_ratelimit_remaining == '0':
- message = json_data["message"]
- print(f"Github API Error: {message}", flush=True)
- ratelimit_reset = headers["x-ratelimit-reset"]
- ratelimit_reset = datetime.fromtimestamp(int(ratelimit_reset))
- print(
- f"The current rate limit window resets in {ratelimit_reset}", flush=True)
- exit(1)
+download_files = {}
+download_files[f"gapps-{release}.rc"] = f"https://github.com/LSPosed/WSA-Addon/releases/latest/download/gapps-{release}.rc"
+download_files[f"gapps-{release}-{abi_map[arch]}.img"] = f"https://github.com/LSPosed/WSA-Addon/releases/latest/download/gapps-{release}-{abi_map[arch]}.img"
+with open(download_dir / tempScript, "a") as f:
+ for key, value in download_files.items():
+ print(f"download link: {value}\npath: {download_dir / key}\n", flush=True)
+ f.writelines(value + "\n")
+ f.writelines(f" dir={download_dir}\n")
+ f.writelines(f" out={key}\n")
diff --git a/scripts/generateMagiskLink.py b/scripts/generateMagiskLink.py
index 29c2d6f..f8cd663 100644
--- a/scripts/generateMagiskLink.py
+++ b/scripts/generateMagiskLink.py
@@ -15,55 +15,42 @@
# You should have received a copy of the GNU Affero General Public License
# along with MagiskOnWSALocal. If not, see .
#
-# Copyright (C) 2023 LSPosed Contributors
+# Copyright (C) 2025 LSPosed Contributors
#
-
-from datetime import datetime
-import re
import sys
import json
import requests
from pathlib import Path
-
-class BearerAuth(requests.auth.AuthBase):
- def __init__(self, token):
- self.token = token
-
- def __call__(self, r):
- r.headers["authorization"] = "Bearer " + self.token
- return r
-
-
-github_auth = None
-if Path.cwd().joinpath('token').exists():
- with open(Path.cwd().joinpath('token'), 'r') as token_file:
- github_auth = BearerAuth(token_file.read())
- print("Using token file for authentication", flush=True)
-
magisk_ver = sys.argv[1]
-download_dir = Path.cwd().parent / \
- "download" if sys.argv[2] == "" else Path(sys.argv[2])
+download_dir = (Path.cwd().parent / "download" if sys.argv[2] == "" else Path(sys.argv[2]))
tempScript = sys.argv[3]
download_files = {}
-cdn_hosts=["cdn.jsdelivr.net", "fastly.jsdelivr.net", "testingcf.jsdelivr.net", "gcore.jsdelivr.net"]
-print(
- f"Generating Magisk download link: release type={magisk_ver}", flush=True)
+cdn_hosts = [
+ "cdn.jsdelivr.net",
+ "fastly.jsdelivr.net",
+ "testingcf.jsdelivr.net",
+ "gcore.jsdelivr.net",
+]
+print(f"Generating Magisk download link: release type={magisk_ver}", flush=True)
magisk_link = None
if not magisk_ver:
magisk_ver = "stable"
-if magisk_ver == "stable" or magisk_ver == "beta" or magisk_ver == "canary" or magisk_ver == "debug":
+if (
+ magisk_ver == "stable"
+ or magisk_ver == "beta"
+ or magisk_ver == "canary"
+ or magisk_ver == "debug"
+):
try:
- magisk_link = json.loads(requests.get(
- f"https://topjohnwu.github.io/magisk-files/{magisk_ver}.json").content)['magisk']['link']
+ magisk_link = json.loads(requests.get(f"https://topjohnwu.github.io/magisk-files/{magisk_ver}.json").content)["magisk"]["link"]
download_files[f"magisk-{magisk_ver}.zip"] = magisk_link
except Exception:
print("Failed to fetch from GitHub API, fallbacking to jsdelivr...")
for host in cdn_hosts:
try:
- magisk_link = json.loads(requests.get(
- f"https://{host}/gh/topjohnwu/magisk-files@master/{magisk_ver}.json").content)['magisk']['link']
+ magisk_link = json.loads(requests.get(f"https://{host}/gh/topjohnwu/magisk-files@master/{magisk_ver}.json").content)["magisk"]["link"]
download_files[f"magisk-{magisk_ver}.zip"] = magisk_link
break
except Exception:
@@ -73,30 +60,11 @@ if magisk_ver == "stable" or magisk_ver == "beta" or magisk_ver == "canary" or m
if magisk_link is None:
print("Failed to fetch Magisk download link", flush=True)
exit(1)
-res = requests.get(
- f"https://api.github.com/repos/LSPosed/WSA-Addon/releases/latest", auth=github_auth)
-json_data = json.loads(res.content)
-headers = res.headers
-x_ratelimit_remaining = headers["x-ratelimit-remaining"]
-if res.status_code == 200:
- assets = json_data["assets"]
- for asset in assets:
- if re.match(f'cust.img$', asset["name"]):
- download_files[asset["name"]] = asset["browser_download_url"]
- break
-elif res.status_code == 403 and x_ratelimit_remaining == '0':
- message = json_data["message"]
- print(f"Github API Error: {message}", flush=True)
- ratelimit_reset = headers["x-ratelimit-reset"]
- ratelimit_reset = datetime.fromtimestamp(int(ratelimit_reset))
- print(
- f"The current rate limit window resets in {ratelimit_reset}", flush=True)
- exit(1)
-with open(download_dir/tempScript, 'a') as f:
+download_files["cust.img"] = "https://github.com/LSPosed/WSA-Addon/releases/latest/download/cust.img"
+with open(download_dir / tempScript, "a") as f:
for key, value in download_files.items():
- print(
- f"download link: {value}\npath: {download_dir / key}\n", flush=True)
- f.writelines(value + '\n')
- f.writelines(f' dir={download_dir}\n')
- f.writelines(f' out={key}\n')
+ print(f"download link: {value}\npath: {download_dir / key}\n", flush=True)
+ f.writelines(value + "\n")
+ f.writelines(f" dir={download_dir}\n")
+ f.writelines(f" out={key}\n")