# aarm/hook.py
from functools import wraps
from datetime import datetime
import uuid
from .policy_engine import PolicyEngine, Decision
engine = PolicyEngine("policies/email-policy.yaml")
def aarm_protected(tool_name: str):
def decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
# Build action
action = {
"action_id": str(uuid.uuid4()),
"timestamp": datetime.utcnow().isoformat(),
"tool": tool_name,
"operation": func.__name__,
"parameters": kwargs,
"identity": get_current_identity(),
"context": get_current_context()
}
# Evaluate policy
decision = engine.evaluate(action)
# Enforce
if decision.result == "DENY":
emit_receipt(action, decision, None)
raise PermissionError(f"Action denied: {decision.reason}")
# Execute
result = func(*args, **kwargs)
# Record
emit_receipt(action, decision, result)
return result
return wrapper
return decorator
def emit_receipt(action, decision, result):
receipt = {
"receipt_id": str(uuid.uuid4()),
"action": action,
"decision": {
"result": decision.result,
"policy_id": decision.policy_id,
"reason": decision.reason
},
"result": result,
"timestamp": datetime.utcnow().isoformat()
}
# Write to receipt store (file, database, etc.)
print(f"RECEIPT: {receipt}")