import os import json import time import base64 import logging import requests logger = logging.getLogger("github") GITHUB_TOKEN = os.environ.get("GITHUB_TOKEN", "") GITHUB_REPO = "mishableskineetudiant-stack/proxylistfiltered" FILE_PATH = "proxies_live.json" def _headers(): h = {"Accept": "application/vnd.github.v3+json"} if GITHUB_TOKEN: h["Authorization"] = f"Bearer {GITHUB_TOKEN}" return h def save_to_github(proxies_data): if not GITHUB_TOKEN: return False try: content = json.dumps({ "updated_at": time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime()), "count": len(proxies_data), "proxies": proxies_data, }, indent=2) encoded = base64.b64encode(content.encode()).decode() url = f"https://api.github.com/repos/{GITHUB_REPO}/contents/{FILE_PATH}" sha = None try: r = requests.get(url, headers=_headers(), timeout=10) if r.status_code == 200: sha = r.json().get("sha") except Exception: pass body = {"message": f"Update: {len(proxies_data)} proxies", "content": encoded} if sha: body["sha"] = sha r = requests.put(url, json=body, headers=_headers(), timeout=15) if r.status_code in (200, 201): logger.info(f"GitHub save OK: {len(proxies_data)}") return True logger.error(f"GitHub save failed: {r.status_code}") return False except Exception as e: logger.error(f"GitHub save error: {e}") return False def load_from_github(): try: url = f"https://api.github.com/repos/{GITHUB_REPO}/contents/{FILE_PATH}" r = requests.get(url, headers=_headers(), timeout=10) if r.status_code != 200: return [] content = base64.b64decode(r.json()["content"]).decode() proxies = json.loads(content).get("proxies", []) logger.info(f"GitHub load OK: {len(proxies)}") return proxies except Exception as e: logger.error(f"GitHub load error: {e}") return []