update
This commit is contained in:
50
api/app/auth.py
Normal file
50
api/app/auth.py
Normal file
@@ -0,0 +1,50 @@
|
||||
import sqlite3
|
||||
import os
|
||||
from pathlib import Path
|
||||
from fastapi import HTTPException, Header
|
||||
|
||||
DB_PATH = os.getenv("DB_PATH", "/data/api_keys.db")
|
||||
SEED_API_KEY = os.getenv("SEED_API_KEY")
|
||||
SEED_GAME = os.getenv("SEED_GAME")
|
||||
|
||||
def get_db():
|
||||
# Ensure the directory exists
|
||||
Path(DB_PATH).parent.mkdir(parents=True, exist_ok=True)
|
||||
conn = sqlite3.connect(DB_PATH)
|
||||
conn.row_factory = sqlite3.Row
|
||||
return conn
|
||||
|
||||
def init_db():
|
||||
conn = get_db()
|
||||
conn.execute("""
|
||||
CREATE TABLE IF NOT EXISTS api_keys (
|
||||
key TEXT PRIMARY KEY,
|
||||
game TEXT NOT NULL,
|
||||
active BOOLEAN DEFAULT 1,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
)
|
||||
""")
|
||||
# Insert seed key if provided via env
|
||||
if SEED_API_KEY and SEED_GAME:
|
||||
try:
|
||||
conn.execute(
|
||||
"INSERT OR IGNORE INTO api_keys(key, game) VALUES (?, ?)",
|
||||
(SEED_API_KEY, SEED_GAME)
|
||||
)
|
||||
conn.commit()
|
||||
except Exception:
|
||||
pass
|
||||
conn.close()
|
||||
|
||||
async def verify_api_key(x_api_key: str = Header(None)) -> str:
|
||||
if not x_api_key:
|
||||
raise HTTPException(status_code=401, detail="X-API-Key header missing")
|
||||
conn = get_db()
|
||||
row = conn.execute(
|
||||
"SELECT game FROM api_keys WHERE key = ? AND active = 1",
|
||||
(x_api_key,)
|
||||
).fetchone()
|
||||
conn.close()
|
||||
if not row:
|
||||
raise HTTPException(status_code=403, detail="Invalid or inactive API key")
|
||||
return row["game"]
|
||||
Reference in New Issue
Block a user