#!/usr/bin/env python3 import os import sys import configparser import urllib.request import json FIREFOX_PATH = os.path.expanduser('~/.mozilla/firefox') PROFILES_PATH = os.path.join(FIREFOX_PATH, 'profiles.ini') API_BASE_URL = 'https://services.addons.mozilla.org/api/v4/addons/addon' extension = sys.argv[1] profiles = configparser.ConfigParser() profiles.optionxform = str profiles.read(PROFILES_PATH) for section in profiles.sections(): if section.startswith('Profile'): profile = dict(profiles.items(section)) if int(profile['Default']): profile_path = profile['Path'] if int(profile.get('IsRelative', '0')): profile_path = os.path.join(FIREFOX_PATH, profile_path) with urllib.request.urlopen(f'{API_BASE_URL}/{extension}') as response: info = json.loads(response.read()) guid = info['guid'] url = info['current_version']['files'][0]['url'] path = os.path.join(profile_path, 'extensions', f'{guid}.xpi') os.makedirs(os.path.dirname(path), exist_ok=True) if not os.path.exists(path): urllib.request.urlretrieve(url, path) print(extension)