Add email channel via Mailgun for Ask Simba
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>
This commit is contained in:
14
blueprints/email/helpers.py
Normal file
14
blueprints/email/helpers.py
Normal file
@@ -0,0 +1,14 @@
|
||||
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}"
|
||||
Reference in New Issue
Block a user