api/util.py
2025-02-10 20:29:57 -05:00

49 lines
1.5 KiB
Python

#!/usr/bin/env python3.12
import logging
from fastapi import FastAPI, Response, HTTPException
from fastapi.responses import RedirectResponse
class Utilities:
"""API Utilities"""
def __init__(self, app: FastAPI, constants):
self.constants = constants
self.blocked_redirect_uri = "https://codey.lol"
self.app = app
def get_blocked_response(self, path: str | None = None): # pylint: disable=unused-argument
"""Get Blocked HTTP Response"""
logging.error("Rejected request: Blocked")
return RedirectResponse(url=self.blocked_redirect_uri)
def get_no_endpoint_found(self, path: str | None = None): # pylint: disable=unused-argument
"""Get 404 Response"""
logging.error("Rejected request: No such endpoint")
raise HTTPException(detail="Unknown endpoint", status_code=404)
def check_key(self, path: str, key: str, req_type: int = 0):
"""
Accepts path as an argument to allow fine tuning access for each API key, not currently in use.
"""
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:
return False
if req_type == 2:
return key.startswith("PRV-")
elif req_type == 4:
return key.startswith("RAD-")
if path.lower().startswith("/xc/") and not key.startswith("XC-"):
return False
return True