aboutsummaryrefslogtreecommitdiff
path: root/jb/managers/email_manager.py
diff options
context:
space:
mode:
Diffstat (limited to 'jb/managers/email_manager.py')
-rw-r--r--jb/managers/email_manager.py65
1 files changed, 65 insertions, 0 deletions
diff --git a/jb/managers/email_manager.py b/jb/managers/email_manager.py
new file mode 100644
index 0000000..7298c60
--- /dev/null
+++ b/jb/managers/email_manager.py
@@ -0,0 +1,65 @@
+import requests
+from generalresearch.config import is_debug
+
+from jb.config import settings
+
+MAUTIC_BASE_URL = "https://mail.jamesbillings67.com"
+EMAIL_TEMPLATE_ID = 1
+
+assert settings.mautic_api_key
+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) -> int:
+ 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()
+ return int(res["contact"]["id"])
+
+
+def send_login_email_from_url(mautic_url: str, magic_link: str) -> None:
+ if is_debug():
+ print("MAGIC_LINK: ", magic_link)
+ return
+
+ 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) -> None:
+ 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}"
+ send_login_email_from_url(mautic_url, magic_link)
+
+
+def send_amt_link_email(email: str, magic_token: str) -> None:
+ # 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}"
+ send_login_email_from_url(mautic_url, magic_link)