90 lines
2.9 KiB
Python
90 lines
2.9 KiB
Python
#!/usr/bin/env python3
|
|
from http.server import HTTPServer, BaseHTTPRequestHandler
|
|
import json
|
|
from datetime import datetime
|
|
from urllib.parse import urlparse, parse_qs
|
|
|
|
class WebhookHandler(BaseHTTPRequestHandler):
|
|
def log_message(self, format, *args):
|
|
# Override to add timestamp
|
|
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
|
print(f"[{timestamp}] {format % args}")
|
|
|
|
def do_POST(self):
|
|
self.handle_request()
|
|
|
|
def do_GET(self):
|
|
self.handle_request()
|
|
|
|
def do_PUT(self):
|
|
self.handle_request()
|
|
|
|
def do_DELETE(self):
|
|
self.handle_request()
|
|
|
|
def handle_request(self):
|
|
print("=" * 80)
|
|
print(f"📧 WEBHOOK RECEIVED - {self.command} {self.path}")
|
|
print("=" * 80)
|
|
|
|
# Log basic info
|
|
print(f"Method: {self.command}")
|
|
print(f"Path: {self.path}")
|
|
print(f"Remote IP: {self.client_address[0]}")
|
|
|
|
# Log headers
|
|
print("\n📋 HEADERS:")
|
|
for header, value in self.headers.items():
|
|
print(f" {header}: {value}")
|
|
|
|
# Read and log body
|
|
content_length = int(self.headers.get('Content-Length', 0))
|
|
if content_length > 0:
|
|
body = self.rfile.read(content_length)
|
|
print(f"\n📄 RAW BODY:")
|
|
print(f" {body.decode('utf-8', errors='replace')}")
|
|
|
|
# Try to parse JSON
|
|
try:
|
|
if self.headers.get('Content-Type', '').startswith('application/json'):
|
|
json_data = json.loads(body)
|
|
print(f"\n🎯 JSON PAYLOAD:")
|
|
print(json.dumps(json_data, indent=2))
|
|
|
|
# Highlight specific fields
|
|
if isinstance(json_data, dict):
|
|
for key in ['email', 'event', 'subject', 'sender', 'timestamp']:
|
|
if key in json_data:
|
|
print(f" {key.upper()}: {json_data[key]}")
|
|
except:
|
|
pass
|
|
|
|
print("=" * 80)
|
|
print()
|
|
|
|
# Send response
|
|
self.send_response(200)
|
|
self.send_header('Content-Type', 'application/json')
|
|
self.end_headers()
|
|
|
|
response = {
|
|
"status": "received",
|
|
"method": self.command,
|
|
"path": self.path,
|
|
"timestamp": datetime.now().isoformat()
|
|
}
|
|
self.wfile.write(json.dumps(response).encode())
|
|
|
|
if __name__ == '__main__':
|
|
print("🚀 Starting Simple Webhook Echo Server...")
|
|
print("📡 Listening on http://localhost:8080")
|
|
print("⚡ Press Ctrl+C to stop")
|
|
print("=" * 80)
|
|
|
|
server = HTTPServer(('0.0.0.0', 8080), WebhookHandler)
|
|
try:
|
|
server.serve_forever()
|
|
except KeyboardInterrupt:
|
|
print("\n\n👋 Shutting down server...")
|
|
server.server_close()
|