diff --git a/src/anonchat/webhooks.py b/src/anonchat/webhooks.py index 07ce38b..2b9ce33 100644 --- a/src/anonchat/webhooks.py +++ b/src/anonchat/webhooks.py @@ -1,10 +1,8 @@ -import urllib.request -import urllib.error import hmac import hashlib import json -from datetime import datetime -from flask import current_app +import requests +from datetime import datetime, timezone from .models import Settings class WebhookError(Exception): @@ -31,40 +29,36 @@ def _send_webhook(event_type, data): payload = { "event_type": event_type, - "timestamp": datetime.utcnow().isoformat(), + "timestamp": datetime.now(timezone.utc).isoformat(), "data": data } # Convert payload to JSON - payload_str = json.dumps(payload).encode('utf-8') + payload_str = json.dumps(payload) # Create request with headers headers = {'Content-Type': 'application/json'} if settings.webhook_secret: signature = hmac.new( settings.webhook_secret.encode(), - payload_str, + payload_str.encode('utf-8'), hashlib.sha256 ).hexdigest() headers['X-Webhook-Signature'] = signature try: - # Create request object - req = urllib.request.Request( + # Send request using requests library + response = requests.post( settings.webhook_url, data=payload_str, headers=headers, - method='POST' + timeout=5 ) - # Set timeout - with urllib.request.urlopen(req, timeout=5) as response: - if response.status != 200: - raise WebhookError(f"Webhook error: {response.status}", status_code=response.status) + # Check response status + response.raise_for_status() except Exception as e: - status_code = None - if hasattr(e, 'status_code'): - status_code = e.status_code + status_code = e.response.status_code if hasattr(e, 'response') else None raise WebhookError(f"Webhook error: {str(e)}", status_code=status_code, original_exception=e) def inquiry_created(inquiry_id, message):