VTX-License-Server / beta_keys_schema.py
Vintendopower's picture
Upload 9 files
a38ca42 verified
Raw
History Blame Contribute Delete
4.1 kB
"""
VTX beta key schema, migration, and validation helpers.
"""
from __future__ import annotations
import secrets
import string
from datetime import date
from typing import Any
VALID_STATUSES = frozenset({"ACTIVE", "REVOKED", "EXPIRED", "BANNED", "INVALID"})
KEY_CHARS = string.ascii_uppercase + string.digits
NEW_KEY_PREFIX = "VTX-"
def today_iso() -> str:
return date.today().isoformat()
def _random_key_segment(length: int = 6) -> str:
return "".join(secrets.choice(KEY_CHARS) for _ in range(length))
def generate_unique_key(existing: dict[str, Any]) -> str:
for _ in range(5000):
candidate = f"{NEW_KEY_PREFIX}{_random_key_segment(6)}"
if candidate not in existing:
return candidate
raise RuntimeError("Unable to generate a unique beta key.")
def normalize_record(key: str, record: dict[str, Any] | None) -> dict[str, Any]:
data = dict(record or {})
key_text = str(data.get("key") or key or "").strip()
active = bool(data.get("active"))
status = str(data.get("status") or "").strip().upper()
if not status:
status = "ACTIVE" if active else "REVOKED"
if status not in VALID_STATUSES:
status = "ACTIVE" if active else "REVOKED"
if status != "ACTIVE":
active = False
created = str(data.get("created") or data.get("created_date") or "").strip()
last_activation = data.get("last_activation")
if last_activation is not None and last_activation != "":
last_activation = str(last_activation).strip()
else:
last_activation = None
return {
"key": key_text,
"name": str(data.get("name") or data.get("owner") or "").strip(),
"notes": str(data.get("notes") or "").strip(),
"created": created,
"last_activation": last_activation,
"active": active,
"status": status,
}
def migrate_keys_payload(payload: Any) -> dict[str, dict[str, Any]]:
if payload is None:
return {}
if isinstance(payload, list):
migrated: dict[str, dict[str, Any]] = {}
for item in payload:
if not isinstance(item, dict):
continue
key = str(item.get("key") or "").strip()
if not key:
continue
migrated[key] = normalize_record(key, item)
return migrated
if not isinstance(payload, dict):
return {}
if "keys" in payload and isinstance(payload.get("keys"), list):
return migrate_keys_payload(payload["keys"])
migrated: dict[str, dict[str, Any]] = {}
for raw_key, raw_record in payload.items():
key = str(raw_key or "").strip()
if not key:
continue
if isinstance(raw_record, str):
migrated[key] = normalize_record(
key,
{"key": key, "active": True, "status": "ACTIVE", "notes": raw_record},
)
continue
if not isinstance(raw_record, dict):
continue
migrated[key] = normalize_record(key, raw_record)
return migrated
def validation_result(record: dict[str, Any] | None) -> dict[str, Any]:
if not record:
return {"valid": False, "active": False, "status": "INVALID"}
normalized = normalize_record(str(record.get("key") or ""), record)
active = bool(normalized.get("active"))
status = str(normalized.get("status") or "").strip().upper()
if status == "ACTIVE" and active:
return {"valid": True, "active": True, "status": "ACTIVE"}
if status == "REVOKED" or (not active and status == "ACTIVE"):
return {"valid": True, "active": False, "status": "REVOKED"}
if status in {"EXPIRED", "BANNED"}:
return {"valid": True, "active": False, "status": status}
return {"valid": True, "active": active, "status": status}
def new_record(name: str, notes: str = "") -> dict[str, Any]:
return {
"name": str(name or "").strip(),
"notes": str(notes or "").strip(),
"created": today_iso(),
"last_activation": None,
"active": True,
"status": "ACTIVE",
}