VTX-License-Server / generate_beta_key.py
Vintendopower's picture
Upload 9 files
a38ca42 verified
Raw
History Blame Contribute Delete
4.89 kB
"""
VTX Studio beta key administration utility.
Keys are stored in the private ManChildTechnologies/VTX-BetaKeys dataset.
"""
from __future__ import annotations
import argparse
import json
from pathlib import Path
from typing import Any
from beta_keys_schema import generate_unique_key, new_record, normalize_record
from beta_keys_store import keys_path, load_keys, save_keys
APP_DIR = Path(__file__).resolve().parent
DEFAULT_KEYS_PATH = APP_DIR / "keys.json"
def generate_key(
*,
name: str,
notes: str = "",
path: str | Path | None = None,
push: bool = True,
) -> str:
"""Generate a new ACTIVE beta key and persist it to the dataset."""
if not str(name or "").strip():
raise ValueError("Tester name is required.")
keys = load_keys(force=True)
beta_key = generate_unique_key(keys)
record = new_record(name=name, notes=notes)
record["key"] = beta_key
keys[beta_key] = normalize_record(beta_key, record)
if push:
save_keys(keys, commit_message=f"Generate beta key for {name.strip()}")
elif path:
from beta_keys_store import _write_json_file
_write_json_file(Path(path), keys)
return beta_key
def revoke_key(beta_key: str, path: str | Path | None = None, push: bool = True) -> dict[str, Any]:
key = str(beta_key or "").strip()
if not key:
raise ValueError("Beta key is required.")
keys = load_keys(force=True)
if key not in keys:
raise KeyError(f"Beta key not found: {key}")
record = normalize_record(key, keys[key])
record["active"] = False
record["status"] = "REVOKED"
keys[key] = record
if push:
save_keys(keys, commit_message=f"Revoke beta key {key}")
return record
def reactivate_key(beta_key: str, path: str | Path | None = None, push: bool = True) -> dict[str, Any]:
key = str(beta_key or "").strip()
if not key:
raise ValueError("Beta key is required.")
keys = load_keys(force=True)
if key not in keys:
raise KeyError(f"Beta key not found: {key}")
record = normalize_record(key, keys[key])
record["active"] = True
record["status"] = "ACTIVE"
keys[key] = record
if push:
save_keys(keys, commit_message=f"Reactivate beta key {key}")
return record
def delete_key(beta_key: str, push: bool = True) -> None:
key = str(beta_key or "").strip()
if not key:
raise ValueError("Beta key is required.")
keys = load_keys(force=True)
if key not in keys:
raise KeyError(f"Beta key not found: {key}")
del keys[key]
if push:
save_keys(keys, commit_message=f"Delete beta key {key}")
def export_json(output: str | Path | None = None) -> Path:
keys = load_keys(force=True)
out = Path(output) if output else keys_path()
out.parent.mkdir(parents=True, exist_ok=True)
ordered = {key: normalize_record(key, record) for key, record in sorted(keys.items())}
out.write_text(json.dumps(ordered, indent=2) + "\n", encoding="utf-8")
return out
def main() -> int:
parser = argparse.ArgumentParser(description="VTX Studio beta key manager")
parser.add_argument("--keys", default="", help="Optional local export path")
sub = parser.add_subparsers(dest="command", required=True)
generate = sub.add_parser("generate", help="Generate a new ACTIVE beta key")
generate.add_argument("--name", required=True, help="Tester name")
generate.add_argument("--notes", default="", help="Optional notes")
revoke = sub.add_parser("revoke", help="Revoke an existing beta key")
revoke.add_argument("beta_key", help="Beta key to revoke")
reactivate = sub.add_parser("reactivate", help="Reactivate a revoked beta key")
reactivate.add_argument("beta_key", help="Beta key to reactivate")
delete = sub.add_parser("delete", help="Delete an existing beta key")
delete.add_argument("beta_key", help="Beta key to delete")
export = sub.add_parser("export", help="Export keys.json snapshot")
export.add_argument("-o", "--output", default="", help="Optional output path")
args = parser.parse_args()
if args.command == "generate":
beta_key = generate_key(name=args.name, notes=args.notes)
print(beta_key)
return 0
if args.command == "revoke":
record = revoke_key(args.beta_key)
print(json.dumps(record, indent=2))
return 0
if args.command == "reactivate":
record = reactivate_key(args.beta_key)
print(json.dumps(record, indent=2))
return 0
if args.command == "delete":
delete_key(args.beta_key)
print("deleted")
return 0
if args.command == "export":
out = export_json(args.output or None)
print(str(out))
return 0
parser.error("Unknown command")
return 1
if __name__ == "__main__":
raise SystemExit(main())