Users can now receive a unique email address (ask+<token>@domain) and interact with Simba by sending emails. Inbound emails hit a Mailgun webhook, are authenticated via HMAC token lookup, processed through the LangChain agent, and replied to via the Mailgun API. - Extract shared SIMBA_SYSTEM_PROMPT to blueprints/conversation/prompts.py - Add email_enabled and email_hmac_token fields to User model - Create blueprints/email with webhook, signature validation, rate limiting - Add admin endpoints to enable/disable email per user - Update AdminPanel with Email column, toggle, and copy-address button - Add Mailgun env vars to .env.example - Include database migration for new fields Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
15 lines
428 B
Python
15 lines
428 B
Python
import hmac
|
|
import hashlib
|
|
|
|
|
|
def generate_email_token(user_id: str, secret: str) -> str:
|
|
"""Generate a 16-char hex HMAC token for a user's email address."""
|
|
return hmac.new(
|
|
secret.encode(), str(user_id).encode(), hashlib.sha256
|
|
).hexdigest()[:16]
|
|
|
|
|
|
def get_user_email_address(token: str, domain: str) -> str:
|
|
"""Return the routable email address for a given token."""
|
|
return f"ask+{token}@{domain}"
|