Added gateway and cron authentication
pip-audit / audit (push) Successful in 39s
pip-audit / notify (push) Skipped

This commit is contained in:
florian committed 2026-11-01 18:43:10 +01:00
1 parent 992f9bdf44
commit 5900ef9432
8 files changed
+762 -24

No files matched your search

+13
View File
@@ -0,0 +1,13 @@
from enum import StrEnum
from service_auth import KeySource, ServiceAuth
class Caller(StrEnum):
GATEWAY = "gateway"
SCHEDULER = "scheduler"
auth = ServiceAuth({
Caller.GATEWAY: KeySource("GATEWAY_KEY", "/etc/secrets/gateway_key"),
Caller.SCHEDULER: KeySource("SCHEDULER_KEY", "/etc/secrets/scheduler_key"),
})
+4 -4
View File
@@ -1,12 +1,11 @@
import os
import requests
from secret_manager import get_secret
from simple_logger_handler import setup_logger
dockerhub_token = get_secret(os.getenv("DOCKERHUB_TOKEN",""),"/etc/secrets/dockerhub_token")
dockerhub_username = get_secret(os.getenv("DOCKERHUB_USERNAME",""),"/etc/secrets/dockerhub_username")
dockerhub_token = get_secret("DOCKERHUB_TOKEN","/etc/secrets/dockerhub_token")
dockerhub_username = get_secret("DOCKERHUB_USERNAME","/etc/secrets/dockerhub_username")
logger = setup_logger(__name__)
@@ -68,4 +67,5 @@ def find_package_version_with_tag(repo: str, tag: str) -> str:
if __name__ == "__main__":
print(find_package_version_with_tag("pihole/pihole", "latest"))
#print(find_package_version_with_tag("pihole/pihole", "latest"))
print(find_package_version_with_tag("library/mysql","8.4"))
+1 -2
View File
@@ -1,11 +1,10 @@
import os
import requests
from secret_manager import get_secret
from simple_logger_handler import setup_logger
github_token = get_secret(os.getenv("GITHUB_TOKEN",""),"/etc/secrets/github_token")
github_token = get_secret("GITHUB_TOKEN","/etc/secrets/github_token")
logger = setup_logger(__name__)
def find_package_version_with_tag(org: str, package: str, target_tag: str) -> str:
+23 -17
View File
@@ -1,14 +1,15 @@
import asyncio
from contextlib import asynccontextmanager
import os
from contextlib import asynccontextmanager
import uvicorn
from fastapi import Depends, FastAPI, HTTPException, Request, Response
from fastapi import APIRouter, Depends, FastAPI, HTTPException, Request, Response
from auth_config import Caller, auth
from db_module import close_connection_pool, create_connection_pool, get_db, start_healthcheck_thread
from dockerhub_api import find_package_version_with_tag as find_package_version_with_tag_dockerhub
from github_api import find_package_version_with_tag as find_package_version_with_tag_github
from metrics_server import REQUEST_COUNTER
from metrics_server import REQUEST_COUNTER, metrics_api
from secret_manager import cleanup_secret_files
from send_notifications import NotificationClient
from simple_logger_handler import LOG_LEVEL, setup_logger
@@ -46,7 +47,8 @@ api = FastAPI(
title="Docker Repository Query",
description="Queries Dockerhub and GHCR for new docker images",
version="1.0.0",
lifespan=lifespan
lifespan=lifespan,
dependencies=[Depends(auth.authenticate)],
)
@api.middleware("http")
@@ -65,14 +67,10 @@ async def prometheus_middleware(request: Request, call_next):
logger.debug(f"[FastAPI] Counter incremented for {request.method} {request.url.path} [{status}]")
return response
user_router = APIRouter(dependencies=[Depends(auth.require(Caller.GATEWAY))])
scheduler_router = APIRouter(dependencies=[Depends(auth.require(Caller.SCHEDULER))])
@api.get("/health")
def return_health():
return Response(status_code=200)
@api.get("/suwayomi")
@scheduler_router.post("/suwayomi")
def handle_suwayomi(
request: Request,
db = Depends(get_db)
@@ -98,7 +96,8 @@ def handle_suwayomi(
request.app.state.notifier.send(
title="New Suwayomi version has been found",
body=f"Version {online_version}",
category="utility"
category="utility",
user_id=1,
)
logger.debug("[FastAPI] Notification sent for Suwayomi update")
return Response(status_code=200)
@@ -112,7 +111,7 @@ def handle_suwayomi(
@api.get("/pihole")
@scheduler_router.post("/pihole")
def handle_pihole(
request: Request,
db = Depends(get_db)
@@ -137,7 +136,8 @@ def handle_pihole(
request.app.state.notifier.send(
title="New Pi-hole version has been found",
body=f"Version {online_version}",
category="utility"
category="utility",
user_id=1,
)
logger.debug("[FastAPI] Notification sent for Pi-hole update")
return Response(status_code=200)
@@ -149,12 +149,18 @@ def handle_pihole(
logger.error(f"[FastAPI] Error in Pi-hole handler: {e}", exc_info=True)
raise HTTPException(status_code=500, detail=str(e)) from e
api.include_router(user_router)
api.include_router(scheduler_router)
async def start_servers():
logger.info("[Server] Starting main and metrics servers")
logger.info("[Server] Starting main API (port 5000) and metrics server (port 9000)...")
logger.info(f"[Server] Build commit id={os.getenv("COMMIT_ID","unknown")}")
config_main = uvicorn.Config("main:api", host="0.0.0.0", port=5000, log_level=LOG_LEVEL.lower(), log_config=None)
config_metrics = uvicorn.Config("metrics_server:metrics_api", host="0.0.0.0", port=9000, log_level=LOG_LEVEL.lower(), log_config=None)
auth.load_keys(api, Caller.GATEWAY, Caller.SCHEDULER)
cleanup_secret_files(auth.key_paths(Caller.GATEWAY, Caller.SCHEDULER))
config_main = uvicorn.Config(api, host="0.0.0.0", port=5000, log_level=LOG_LEVEL.lower(), log_config=None)
config_metrics = uvicorn.Config(metrics_api, host="0.0.0.0", port=9000, log_level=LOG_LEVEL.lower(), log_config=None)
server_main = uvicorn.Server(config_main)
server_metrics = uvicorn.Server(config_metrics)