techprotrade's picture
Deploy ATOM FastAPI command center runtime (part 2)
a10e62e verified
Raw
History Blame Contribute Delete
1.41 kB
from typing import Dict, Any, List, Optional, Callable
from fastapi import APIRouter, Depends, HTTPException, Query, Body, Header, Request
from core.integration_registry import IntegrationRegistry
from core.database import get_db
from sqlalchemy.orm import Session
import hmac
import hashlib
import base64
import logging
logger = logging.getLogger(__name__)
def get_webhook_registry(db: Session = Depends(get_db)) -> IntegrationRegistry:
"""Dependency for obtaining the IntegrationRegistry for webhook processing."""
return IntegrationRegistry(db)
def verify_hmac_signature(data: bytes, signature: str, secret: str, algorithm=hashlib.sha256) -> bool:
"""Utility to verify HMAC signatures for incoming webhooks."""
if not secret or not signature:
return False
digest = hmac.new(secret.encode('utf-8'), data, algorithm).digest()
# Handle base64 encoded signatures if needed
try:
if len(signature) > 64: # Likely base64
computed = base64.b64encode(digest).decode('utf-8')
else:
computed = hmac.new(secret.encode('utf-8'), data, algorithm).hexdigest()
return hmac.compare_digest(computed, signature)
except Exception as e:
logger.error(f"HMAC verification failed: {e}")
return False
# Re-exporting for standard route usage
__all__ = ["get_webhook_registry", "verify_hmac_signature"]