api/util.py
2024-08-19 11:42:23 -04:00

46 lines
1.4 KiB
Python

#!/usr/bin/env python3.12
import logging
from fastapi import FastAPI, Response, HTTPException, Security
class Utilities:
def __init__(self, app: FastAPI, constants):
self.constants = constants
self.blocked_response_status = 422
self.blocked_response_content = None
def get_blocked_response(self, path: str | None = None):
logging.error("Rejected request: Blocked")
return Response(content=self.blocked_response_content,
status_code=self.blocked_response_status)
def get_no_endpoint_found(self, path: str | None = None):
logging.error("Rejected request: No such endpoint")
raise HTTPException(detail="Unknown endpoint", status_code=404)
def check_key(self, path: str, key: str):
"""
Accepts path as an argument to allow fine tuning access for each API key, not currently in use.
"""
print(f"Testing with path: {path}, key: {key}")
if not key or not key.startswith("Bearer "):
return False
key = key.split("Bearer ", maxsplit=1)[1].strip()
if not key in self.constants.API_KEYS:
print("Auth failed")
return False
if path.lower().startswith("/xc/") and not(key.startswith("XC-")):
print("Auth failed - not an XC Key")
return False
print("Auth succeeded")
return True