from fastapi import HTTPException, Query from fastapi.responses import PlainTextResponse import logging logger = logging.getLogger(__name__) async def verify_webhook_challenge( hub_mode: str = Query(None, alias="hub.mode"), hub_challenge: str = Query(None, alias="hub.challenge"), hub_verify_token: str = Query(None, alias="hub.verify_token"), expected_verify_token: str = "", ): if hub_mode != "subscribe": raise HTTPException(status_code=400, detail="Invalid hub.mode") if not expected_verify_token or hub_verify_token != expected_verify_token: logger.warning("Webhook verify_token mismatch") raise HTTPException(status_code=403, detail="Verify token mismatch") logger.info("Webhook verified successfully") return PlainTextResponse(hub_challenge or "", status_code=200)