50 lines
1.9 KiB
Python
50 lines
1.9 KiB
Python
|
|
#!/usr/bin/env python3
|
||
|
|
"""Le pool d'adresses publiques du site : une par locataire, jamais celle du site.
|
||
|
|
|
||
|
|
POURQUOI (2026-09-29). C'est le SITE qui attribue a chaque locataire son adresse publique,
|
||
|
|
tiree d'un pool declare dans `opnsense.yml` ; le locataire la recoit par le contrat du site.
|
||
|
|
Avant, une seule adresse (`ip_publique_site`) etait recopiee a la main chez les deux
|
||
|
|
locataires. Une attribution fautive ne se verrait qu'au jour de l'exposition : deux
|
||
|
|
locataires sur la meme adresse, ou un web frontal sur l'adresse de la frontiere.
|
||
|
|
"""
|
||
|
|
from __future__ import annotations
|
||
|
|
|
||
|
|
import sys
|
||
|
|
from pathlib import Path
|
||
|
|
|
||
|
|
sys.path.insert(0, str(Path(__file__).resolve().parents[1]))
|
||
|
|
from site_intrants import ip_publique_de, valider_pool # noqa: E402
|
||
|
|
|
||
|
|
WAN = "69.70.26.10"
|
||
|
|
LOCATAIRES = ["OPS-A", "OPS-B"]
|
||
|
|
|
||
|
|
|
||
|
|
def main() -> int:
|
||
|
|
echecs = 0
|
||
|
|
sain = {"69.70.26.11": "OPS-A", "69.70.26.12": "OPS-B", "69.70.26.13": "libre"}
|
||
|
|
if valider_pool(sain, WAN, LOCATAIRES):
|
||
|
|
print(f"ECHEC pool sain refuse : {valider_pool(sain, WAN, LOCATAIRES)}")
|
||
|
|
echecs += 1
|
||
|
|
if ip_publique_de("OPS-B", sain) != "69.70.26.12" or ip_publique_de("OPS-C", sain) != "":
|
||
|
|
print("ECHEC ip_publique_de ne rend pas l'attribution du pool")
|
||
|
|
echecs += 1
|
||
|
|
cas = {
|
||
|
|
"deux adresses pour un locataire": {"69.70.26.11": "OPS-A", "69.70.26.12": "OPS-A"},
|
||
|
|
"adresse du site attribuee": {WAN: "OPS-A"},
|
||
|
|
"locataire inconnu du site": {"69.70.26.11": "OPS-Z"},
|
||
|
|
"adresse privee": {"10.0.0.5": "OPS-A"},
|
||
|
|
"adresse invalide": {"pas-une-ip": "OPS-A"},
|
||
|
|
}
|
||
|
|
for nom, pool in cas.items():
|
||
|
|
if not valider_pool(pool, WAN, LOCATAIRES):
|
||
|
|
print(f"ECHEC « {nom} » accepte")
|
||
|
|
echecs += 1
|
||
|
|
if echecs:
|
||
|
|
return 1
|
||
|
|
print(f"OK — pool sain accepte ; {len(cas)} fautes refusees ; attribution lue par locataire.")
|
||
|
|
return 0
|
||
|
|
|
||
|
|
|
||
|
|
if __name__ == "__main__":
|
||
|
|
sys.exit(main())
|