Add modules/rpki.py

This commit is contained in:
Blackwhitebear8 2025-08-05 17:06:19 +02:00
parent ba94293ca6
commit d8b62ef0c7

74
modules/rpki.py Normal file
View file

@ -0,0 +1,74 @@
import re
def parse_rpki_lookup_data(api_response):
"""
Parses the raw string data from the RPKI lookup API call.
"""
if not api_response.get("success") or not api_response.get("data"):
return api_response
raw_data = api_response["data"]
lines = raw_data.strip().split('\n')
prefixes = []
summary = []
header_found = False
prefix_regex = re.compile(r'^(\S+)\s+(.+?)\s+(\S+)$')
for line in lines:
line = line.strip()
if not line or "RPKI/RTR prefix table" in line:
continue
if "Prefix Length Origin-AS" in line:
header_found = True
continue
if not header_found:
continue
match = prefix_regex.match(line)
if match:
prefixes.append({
"prefix": match.group(1).strip(),
"length": match.group(2).strip(),
"as": match.group(3).strip()
})
elif "Number of" in line:
summary.append(line)
return {"prefixes": prefixes, "summary": summary}
def parse_rpki_cache_data(api_response):
"""
Parses the raw string data from the RPKI cache connection status API call.
"""
if not api_response.get("success") or not api_response.get("data"):
return []
raw_data = api_response["data"]
servers = []
lines = raw_data.strip().split('\n')
for line in lines:
match = re.search(r'rpki tcp cache ([\d\.:a-fA-F]+) (\d+) pref (\d+)(.*)', line)
if match:
ip_address = match.group(1)
port = match.group(2)
preference = match.group(3)
status_text = match.group(4).strip()
status = "Not Connected"
if "(connected)" in status_text:
status = "Connected"
servers.append({
"ip_address": ip_address,
"port": port,
"preference": preference,
"status": status
})
return servers