from functools import lru_cache import logging as logger from fastapi import APIRouter, Header, Request, Depends from .auth import get_current_username from .digital_ocean import update_domain from . import config router = APIRouter() @lru_cache() def get_settings(): return config.Settings @router.get("/") async def root(): return {"message": "Bifrost updater version 2.0"} @router.get("/update") def update_view( domain: str, request: Request, ip: str = None, x_forwarded_for: str = Header(None), username: str = Depends(get_current_username), settings: config.Settings = Depends(get_settings), ): logger.info("Here is your log") if ip is not None: current_ip = ip elif x_forwarded_for is not None: current_ip = x_forwarded_for else: current_ip = request.ip name, domain = domain.split(".", maxsplit=1) update_domain( domain, name, current_ip, settings.api_url_base, settings.api_token, logger ) return { "domain": domain, "name": name, "current_ip": current_ip, "username": username }