magic-eraser / key_manager.py
freebg's picture
Create key_manager.py
fddd4be verified
Raw
History Blame Contribute Delete
3.76 kB
#!/usr/bin/env python3
"""
FreeME Magic Eraser β€” Key Manager
Same pattern as FreeBG background remover.
Usage:
python key_manager.py add customer@email.com starter
python key_manager.py list
python key_manager.py upgrade freebg-me-st-abc12345-xyz67890 pro
python key_manager.py revoke freebg-me-st-abc12345-xyz67890
python key_manager.py export
"""
import json
import sys
import secrets
import datetime
import os
DB_FILE = "keys_db.json"
PLANS = {
"free": {"daily": 10, "models": ["fast"]},
"starter": {"daily": 100, "models": ["fast", "quality"]},
"pro": {"daily": 500, "models": ["fast", "quality", "best"]},
"master": {"daily": 99999,"models": ["fast", "quality", "best"]},
}
PREFIX = {
"free": "me-fr",
"starter": "me-st",
"pro": "me-pr",
"master": "me-ma",
}
def load_db():
if os.path.exists(DB_FILE):
with open(DB_FILE) as f:
return json.load(f)
return {}
def save_db(db):
with open(DB_FILE, "w") as f:
json.dump(db, f, indent=2)
def today():
return datetime.datetime.utcnow().strftime("%Y-%m-%d")
def cmd_add(email, plan):
if plan not in PLANS:
print(f"❌ Invalid plan. Choose: {', '.join(PLANS.keys())}")
return
db = load_db()
pre = PREFIX[plan]
key = f"freebg-{pre}-{secrets.token_hex(4)}-{secrets.token_hex(4)}"
db[key] = {
"owner": email,
"plan": plan,
"created": today(),
"active": True,
}
save_db(db)
print(f"\nβœ… Key created:")
print(f" Key : {key}")
print(f" Owner : {email}")
print(f" Plan : {plan} ({PLANS[plan]['daily']}/day, models: {PLANS[plan]['models']})")
print(f"\nπŸ“‹ Next step: run 'python key_manager.py export' then update HF Space Secret\n")
def cmd_list():
db = load_db()
if not db:
print("No keys found.")
return
print(f"\n{'Key':<46} {'Owner':<28} {'Plan':<10} {'Created':<12} {'Active'}")
print("-" * 105)
for k, v in db.items():
print(f"{k:<46} {v.get('owner',''):<28} {v.get('plan','?'):<10} {v.get('created',''):<12} {v.get('active', True)}")
print()
def cmd_upgrade(key, new_plan):
if new_plan not in PLANS:
print(f"❌ Invalid plan. Choose: {', '.join(PLANS.keys())}")
return
db = load_db()
if key not in db:
print(f"❌ Key not found: {key}")
return
old_plan = db[key].get("plan", "?")
db[key]["plan"] = new_plan
save_db(db)
print(f"βœ… Upgraded {key}")
print(f" {old_plan} β†’ {new_plan}")
print(f"\nπŸ“‹ Run 'python key_manager.py export' then update HF Space Secret\n")
def cmd_revoke(key):
db = load_db()
if key not in db:
print(f"❌ Key not found: {key}")
return
owner = db[key].get("owner", "")
del db[key]
save_db(db)
print(f"βœ… Key revoked: {key} (was: {owner})")
print(f"\nπŸ“‹ Run 'python key_manager.py export' then update HF Space Secret\n")
def cmd_export():
db = load_db()
exported = json.dumps(db, indent=2)
print("\n" + "="*60)
print("COPY THE JSON BELOW β†’ HF Space β†’ Settings β†’ Secrets β†’ API_KEYS_JSON β†’ Replace")
print("="*60)
print(exported)
print("="*60 + "\n")
def main():
args = sys.argv[1:]
if not args:
print(__doc__)
return
cmd = args[0].lower()
if cmd == "add" and len(args) == 3:
cmd_add(args[1], args[2])
elif cmd == "list":
cmd_list()
elif cmd == "upgrade" and len(args) == 3:
cmd_upgrade(args[1], args[2])
elif cmd == "revoke" and len(args) == 2:
cmd_revoke(args[1])
elif cmd == "export":
cmd_export()
else:
print(__doc__)
if __name__ == "__main__":
main()