Added gateway and cron authentication
This commit is contained in:
1 parent
992f9bdf44
commit
5900ef9432
8 files changed
+762
-24
No files matched your search
@@ -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"),
|
||||
})
|
||||
@@ -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
@@ -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
@@ -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)
|
||||
|
||||
Reference in new issue
Block a user