46 lines
1.7 KiB
Python
Executable file
46 lines
1.7 KiB
Python
Executable file
#!/usr/bin/env nix-shell
|
|
#! nix-shell -i python -p python3
|
|
import json
|
|
import xml.etree.ElementTree as ET
|
|
import hashlib
|
|
from urllib.request import urlopen
|
|
|
|
from os.path import abspath, dirname
|
|
|
|
JSON_PATH = dirname(abspath(__file__)) + '/extensions.json'
|
|
JSON_OUT_PATH = dirname(abspath(__file__)) + '/extensions/extensions-generated.json'
|
|
|
|
with open(JSON_PATH, 'r') as f:
|
|
exts = json.load(f)
|
|
|
|
for ext in exts:
|
|
print(f"updating {ext['name']}")
|
|
if ext["updateMethod"] == "github":
|
|
with urlopen(ext["updateUrl"]) as r:
|
|
latest = json.load(r)[0]
|
|
ext["url"] = latest["assets"][0]["browser_download_url"]
|
|
with urlopen(ext["url"]) as blob:
|
|
sha256 = hashlib.new("SHA256")
|
|
if blob.status == 200:
|
|
size, n = 0, 16384
|
|
buf = bytearray(n)
|
|
while n != 0:
|
|
n = blob.readinto(buf)
|
|
size += n
|
|
if n>0:
|
|
sha256.update(buf[:n])
|
|
ext["sha256"] = sha256.hexdigest().lower()
|
|
ext["version"] = latest["tag_name"].lstrip("v")
|
|
elif ext["updateMethod"] == "google":
|
|
resp = urlopen(f"https://clients2.google.com/service/update2/crx?response=updatecheck&acceptformat=crx2,crx3&prodversion=89.0.0.0&x=id%3D{ext['id']}%26uc")
|
|
xml = resp.read()
|
|
xmltree = ET.fromstring(xml)
|
|
app = xmltree.find("{http://www.google.com/update2/response}app").find("{http://www.google.com/update2/response}updatecheck")
|
|
latest = app.attrib
|
|
ext["url"] = latest["codebase"]
|
|
ext["sha256"] = latest["hash_sha256"]
|
|
ext["version"] = latest["version"]
|
|
|
|
|
|
with open(JSON_OUT_PATH, 'w') as out:
|
|
json.dump(exts, out)
|