Spaces:
Sleeping
Sleeping
# from fastapi import FastAPI, Query, HTTPException | |
import hmac | |
import hashlib | |
from fastapi import FastAPI, Header, HTTPException, Request, Query | |
from typing import Optional | |
app = FastAPI() | |
VERIFY_TOKEN = "lintasmediadanawa" # Replace with your actual verify token | |
async def handle_webhook( | |
hub_mode: str = Query(..., alias="hub.mode"), | |
hub_challenge: int = Query(..., alias="hub.challenge"), | |
hub_verify_token: str = Query(..., alias="hub.verify_token") | |
): | |
if hub_mode == "subscribe" and hub_verify_token == VERIFY_TOKEN: | |
return int(hub_challenge) | |
else: | |
raise HTTPException(status_code=403, detail="Verification failed") | |
async def handle_event_notifications( | |
request: Request, | |
x_hub_signature_256: Optional[str] = Header(None) # Header for signature verification | |
): | |
# # Read and verify the request body | |
# body = await request.body() | |
# # Verify the X-Hub-Signature-256 header | |
# if not x_hub_signature_256: | |
# raise HTTPException(status_code=400, detail="Missing X-Hub-Signature-256 header") | |
# # Compute the expected signature | |
# expected_signature = ( | |
# "sha256=" | |
# + hmac.new(VERIFY_TOKEN.encode(), body, hashlib.sha256).hexdigest() | |
# ) | |
# if not hmac.compare_digest(expected_signature, x_hub_signature_256): | |
# raise HTTPException(status_code=403, detail="Signature verification failed") | |
print("POST SUCCESS!", request) | |
# Parse the JSON payload | |
payload = await request.json() | |
print("POST SUCCESS!", request) | |
print(payload) | |
object_type = payload.get("object") | |
entries = payload.get("entry", []) | |
# Log the received event (or process as needed) | |
for entry in entries: | |
changes = entry.get("changes", []) | |
for change in changes: | |
field = change.get("field") | |
value = change.get("value") | |
# Handle specific fields or values as required | |
print(f"Received change for field: {field}, value: {value}") | |
# Return a 200 OK response to acknowledge receipt | |
return {"status": "ok"} | |
async def get_all_params(request: Request): | |
print("POST GET ALL PARAMS!") | |
# Get headers | |
headers = dict(request.headers) | |
# Get query parameters | |
query_params = dict(request.query_params) | |
# Get the body (as JSON or raw data) | |
try: | |
body = await request.json() # Parse JSON if possible | |
except Exception: | |
body = await request.body() # Fall back to raw body if not JSON | |
# Combine all details | |
all_params = { | |
"headers": headers, | |
"query_params": query_params, | |
"body": body, | |
} | |
# Log the params (optional) | |
print(all_params) | |
return all_params | |