#!/usr/bin/env python3 """Lit et valide le registre des domaines publics Set-OPS (docs/domaines.yml).""" from __future__ import annotations import argparse import sys from pathlib import Path from inventory_rules import charger_domaines, fqdn_exposition, valider_domaines RACINE = Path(__file__).resolve().parents[1] FICHIER = RACINE / "docs/domaines.yml" def lister(registre: dict) -> None: domaines = registre.get("domaines_publics", {}) if not domaines: print("Aucun domaine public declare.") return for nom_domaine, conf in domaines.items(): secondaires = conf.get("secondaires") or [] dnssec = "oui" if conf.get("dnssec") else "non" print(f"{nom_domaine} [autorite {conf.get('autorite', '?')}, edge {conf.get('edge', '-')}, dnssec {dnssec}]") print(f" secondaires: {', '.join(secondaires) if secondaires else '(aucun)'}") for entree in conf.get("exposition") or []: fqdn = fqdn_exposition(nom_domaine, entree.get("nom", "")) print(f" exposition: {fqdn} -> {entree.get('cible', '?')} ({entree.get('type', 'web')})") def main() -> int: parser = argparse.ArgumentParser(description="Registre des domaines publics Set-OPS.") sub = parser.add_subparsers(dest="commande", required=True) sub.add_parser("lister", help="Affiche domaines, autorite et expositions.") sub.add_parser("verifier", help="Valide la coherence du registre.") args = parser.parse_args() try: registre = charger_domaines(FICHIER) if args.commande == "lister": lister(registre) elif args.commande == "verifier": valider_domaines(registre) print("Registre des domaines valide.") except Exception as exc: print(f"erreur: {exc}", file=sys.stderr) return 2 return 0 if __name__ == "__main__": raise SystemExit(main())