imap-relay/pythonechoserver.py
2025-09-23 19:01:30 -06:00

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()