n1th1sh commited on
Commit
b0dae05
·
verified ·
1 Parent(s): b11ccf9

Create key_store.py

Browse files
Files changed (1) hide show
  1. key_store.py +66 -0
key_store.py ADDED
@@ -0,0 +1,66 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import secrets
2
+ import json
3
+ import os
4
+ from datetime import datetime
5
+
6
+ KEYS_FILE = "api_keys.json"
7
+
8
+ def load_keys():
9
+ if os.path.exists(KEYS_FILE):
10
+ with open(KEYS_FILE, "r") as f:
11
+ return json.load(f)
12
+ return {}
13
+
14
+ def save_keys(keys):
15
+ with open(KEYS_FILE, "w") as f:
16
+ json.dump(keys, f, indent=2)
17
+
18
+ def generate_api_key(label: str) -> str:
19
+ keys = load_keys()
20
+ new_key = "pii_sk_" + secrets.token_urlsafe(32)
21
+ keys[new_key] = {
22
+ "label": label,
23
+ "active": True,
24
+ "usage": 0,
25
+ "created_at": datetime.utcnow().isoformat()
26
+ }
27
+ save_keys(keys)
28
+ return new_key
29
+
30
+ def validate_key(api_key: str) -> dict | None:
31
+ keys = load_keys()
32
+ entry = keys.get(api_key)
33
+ if entry and entry["active"]:
34
+ return entry
35
+ return None
36
+
37
+ def increment_usage(api_key: str):
38
+ keys = load_keys()
39
+ if api_key in keys:
40
+ keys[api_key]["usage"] += 1
41
+ save_keys(keys)
42
+
43
+ def revoke_key(api_key: str):
44
+ keys = load_keys()
45
+ if api_key in keys:
46
+ keys[api_key]["active"] = False
47
+ save_keys(keys)
48
+
49
+ def delete_key(api_key: str):
50
+ keys = load_keys()
51
+ keys.pop(api_key, None)
52
+ save_keys(keys)
53
+
54
+ def list_keys() -> list[dict]:
55
+ keys = load_keys()
56
+ rows = []
57
+ for k, v in keys.items():
58
+ rows.append({
59
+ "key_preview": k[:14] + "••••••••",
60
+ "label": v["label"],
61
+ "status": "Active" if v["active"] else "Revoked",
62
+ "usage": v["usage"],
63
+ "created_at": v["created_at"][:10],
64
+ "full_key": k # used internally for revoke/delete
65
+ })
66
+ return rows