Files
overub/core/webhook_server.py
2025-12-21 17:12:32 +01:00

47 lines
1.5 KiB
Python

from __future__ import annotations
from typing import Optional
from core.logger import get_logger
logger = get_logger("core.webhook_server")
class WebhookServer:
def __init__(self, app: "OverUB", host: str, port: int) -> None:
self.app = app
self.host = host
self.port = port
self._runner = None
async def start(self) -> None:
try:
from aiohttp import web
except ImportError:
logger.warning("aiohttp not installed, webhook server disabled")
return
async def handler(request: web.Request) -> web.Response:
payload = await request.json()
signature = request.headers.get("X-Gitea-Signature", "")
try:
await self.app.update_service.handle_webhook(payload, signature)
except Exception as exc:
logger.exception("Webhook handling failed")
return web.Response(status=400, text=str(exc))
return web.Response(text="ok")
web_app = web.Application()
web_app.add_routes([web.post("/webhook/gitea", handler)])
self._runner = web.AppRunner(web_app)
await self._runner.setup()
site = web.TCPSite(self._runner, self.host, self.port)
await site.start()
logger.info("Webhook server started on %s:%s", self.host, self.port)
async def stop(self) -> None:
if self._runner:
await self._runner.cleanup()
self._runner = None