aboutsummaryrefslogtreecommitdiff
path: root/jb/managers
diff options
context:
space:
mode:
authorstuppie2026-09-08 16:02:08 -0600
committerstuppie2026-09-08 16:02:08 -0600
commitf3e37a1c73bd0d68966f24995011b5c93305273d (patch)
treea53f3658af3498b707fcabefb48168a464551374 /jb/managers
parent27c2e8fee5c604d64cd06a37afc62db0252f8370 (diff)
downloadamt-jb-f3e37a1c73bd0d68966f24995011b5c93305273d.tar.gz
amt-jb-f3e37a1c73bd0d68966f24995011b5c93305273d.zip
email integration
Diffstat (limited to 'jb/managers')
-rw-r--r--jb/managers/email_manager.py57
1 files changed, 57 insertions, 0 deletions
diff --git a/jb/managers/email_manager.py b/jb/managers/email_manager.py
new file mode 100644
index 0000000..dcbe167
--- /dev/null
+++ b/jb/managers/email_manager.py
@@ -0,0 +1,57 @@
+import requests
+
+from jb.config import settings
+
+MAUTIC_BASE_URL = "https://mail.jamesbillings67.com"
+EMAIL_TEMPLATE_ID = 1
+auth_headers = {"Authorization": f"Basic {settings.mautic_api_key.get_secret_value()}"}
+
+
+def get_or_create_contact(email: str, amt_worker_id: str | None = None):
+ # amt_worker_id = "A2Z2FRA128FNW"
+ body = {"email": email}
+ if amt_worker_id:
+ body["amt_worker_id"] = amt_worker_id
+ res = requests.post(
+ url=f"{MAUTIC_BASE_URL}/api/contacts/new",
+ json=body,
+ headers=auth_headers,
+ ).json()
+ contact_id = res["contact"]["id"]
+ return contact_id
+
+
+def send_login_email_from_url(mautic_url, magic_link) -> None:
+ email_tokens = {
+ "magic_link": magic_link,
+ }
+ body = {"tokens": email_tokens}
+ response = requests.post(url=mautic_url, json=body, headers=auth_headers)
+ try:
+ response.raise_for_status()
+ except requests.exceptions.HTTPError:
+ print(f"Failed to send email. Status code: {response.status_code}")
+ print(response.text)
+ raise
+ d = response.json()
+ assert d.get("success"), f"Failed to send email: {d.get('failed')}"
+ print("Email sent successfully")
+
+
+def send_login_email(email: str, magic_token: str):
+ contact_id = get_or_create_contact(email=email)
+ mautic_url = (
+ f"{MAUTIC_BASE_URL}/api/emails/{EMAIL_TEMPLATE_ID}/contact/{contact_id}/send"
+ )
+ magic_link = f"{settings.base_url}auth/magic-link/?token={magic_token}"
+ return send_login_email_from_url(mautic_url, magic_link)
+
+
+def send_amt_link_email(email: str, magic_token: str):
+ # don't actually associate the email with the worker ID until they click the link
+ contact_id = get_or_create_contact(email=email)
+ mautic_url = (
+ f"{MAUTIC_BASE_URL}/api/emails/{EMAIL_TEMPLATE_ID}/contact/{contact_id}/send"
+ )
+ magic_link = f"{settings.base_url}auth/link-amt/?token={magic_token}"
+ return send_login_email_from_url(mautic_url, magic_link)