# -*- coding: utf-8 -*- """Comprueba lo que sirve Labstream OS después de publicar: la versión, que la firma del manifiesto es válida, que es el mismo manifiesto que el local, y que el paquete que se descarga tiene la huella y el tamaño que dice. Termina con error si algo no cuadra (la compilación del estudio se detiene ahí). py -3.12 verificar_publicado.py """ import os import sys import io import json import hashlib import urllib.request sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding="utf-8") REPO = os.path.dirname(os.path.abspath(__file__)) sys.path.insert(0, REPO) import firma # noqa: E402 import actualizador as A # noqa: E402 BASE = "https://os.labstreamsas.com" def pedir(url): return urllib.request.urlopen(urllib.request.Request(url, headers={"Cache-Control": "no-cache"}), timeout=120).read() m = json.loads(pedir(BASE + "/herramientas/organizador.json")) local = json.load(open(os.path.join(REPO, "manifiesto.json"), encoding="utf-8")) firma_ok = firma.verificar(firma.texto_manifiesto(m), str(m["firma"]["valor"]), A.CLAVE_PUBLICA) igual = m == local datos = pedir(BASE + m["app"]["url"]) huella_ok = hashlib.sha256(datos).hexdigest() == m["app"]["sha256"] and len(datos) == m["app"]["size"] print("servidor: versión", m["version"], "· local:", local.get("version")) print("firma del manifiesto:", "válida" if firma_ok else "NO VÁLIDA") print("coincide con el manifiesto local:", igual) print(f"descarga del paquete: {len(datos)} bytes · huella y tamaño iguales a los del manifiesto: {huella_ok}") print("notas:", (m.get("notes") or "")[:120], "…") sys.exit(0 if (firma_ok and igual and huella_ok) else 1)