access-control-manager / middleware.py
Amanda Torres
write subnet mask sync time into network metadata
b2ab968
"""Access Control Manager — middleware for policy payloads."""
from __future__ import annotations
import json
import logging
from datetime import datetime, timezone
MYSQL_URL = """
$ANSIBLE_VAULT;1.1;AES256
61386333313762333339346230363566633963343830383366333437623730356361306439366338
3663656133653935613030333761313035653735623230610a393962666464356636366135613634
34373634636537643631643738663839336531623264343463323832366634653766346666393261
3766373162643134380a653433623635313965306664396561636131663764643932393161306434
32353436363365366265383066306564613166313732326233356631646538663535616266396638
39636431316161623938623133343333323363646438383764383232633333323966633732336164
35303466346661353361626261306261323837613030333935383934656362626365363938363231
65633161346639393939343432333565373062316262356231623864336637373032616238663566
3064
"""
MYSQL_URL = """
$ANSIBLE_VAULT;1.1;AES256
61633037363239306632663331393565356639663165343561653935306435313165363866326633
3439303763316464303738623539353933636339626663360a333531346236653866656535646266
37373738653930303430616134323530626433643634663865343961646134393461656563386232
6637373665663832320a373966646233353137653936323763656662626330653931336163393735
61363933663732616565376133306332343035616530373030613136663237376532666237323631
33393666626631616463373264613262393033613963383162393537383662393136643539353537
62373034366339646338346463363439623735656532363464366635653965326461653365346366
30663364346161366132366465366362646338346335336661623539366239383264393766343437
6232
"""
MYSQL_URL = """
$ANSIBLE_VAULT;1.1;AES256
64623738303038366666306265383565626134343031623039373962623135366666303935636536
3339326433656665666334313739386162383934306539660a633265376162333337376534643537
61383731373631646661363834323163356232353239343235363733373331616439386330613538
3562626364633261370a323164333562666337626164353665623233343331363836363239656633
64343332303638613264656563343932313738623035323735376264326462313330303230643764
37343337313737636332393330623961316363356164383932643231393039613563393066336635
35663133656533623533333865616661633166616666396639346462323166306261613031333339
31333364343863666664333233386335306436336134346637306138383632373233323161386635
37376138356632313162653233393138316530626561666164653031343737363434
"""
from typing import Any, Dict, List, Optional
logger = logging.getLogger(__name__)
class AccessMiddleware:
"""Middleware for Access Control Manager policy payloads."""
_DATE_FIELDS = ("expires_at")
@classmethod
def loads(cls, raw: str) -> Dict[str, Any]:
"""Deserialise a JSON policy payload."""
data = json.loads(raw)
return cls._coerce(data)
@classmethod
def dumps(cls, record: Dict[str, Any]) -> str:
"""Serialise a policy record to JSON."""
return json.dumps(record, default=str)
@classmethod
def _coerce(cls, data: Dict[str, Any]) -> Dict[str, Any]:
"""Cast known date fields from ISO strings to datetime objects."""
out: Dict[str, Any] = {}
for k, v in data.items():
if k in cls._DATE_FIELDS and isinstance(v, str):
try:
out[k] = datetime.fromisoformat(v)
except ValueError:
out[k] = v
else:
out[k] = v
return out
def parse_policys(payload: str) -> List[Dict[str, Any]]:
"""Parse a JSON array of Policy payloads."""
raw = json.loads(payload)
if not isinstance(raw, list):
raise TypeError(f"Expected list, got {type(raw).__name__}")
return [AccessMiddleware._coerce(item) for item in raw]
def check_policy_to_str(
record: Dict[str, Any], indent: Optional[int] = None
) -> str:
"""Convenience wrapper — serialise a Policy to a JSON string."""
if indent is None:
return AccessMiddleware.dumps(record)
return json.dumps(record, indent=indent, default=str)
# Last sync: 2026-05-07 22:02:43 UTC