Skip to content

Commit 71bc8c9

Browse files
committed
refactor: reorganize mail helpers
1 parent 14d8fe4 commit 71bc8c9

File tree

2 files changed

+55
-32
lines changed

2 files changed

+55
-32
lines changed

lib/algora/accounts/accounts.ex

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -639,4 +639,54 @@ defmodule Algora.Accounts do
639639
|> Enum.map(&String.trim_trailing(&1, ".json"))
640640
|> Enum.sort_by(fn tech -> Enum.find_index(tech_order, &(&1 == tech)) || 999 end)
641641
end
642+
643+
def deliver_totp_signup_email(email, code) do
644+
email =
645+
Email.new()
646+
|> Email.to(email)
647+
|> Email.from({"Algora", "[email protected]"})
648+
|> Email.subject("#{code} - Algora Sign-in Verification")
649+
|> Email.text_body("""
650+
Hi there,
651+
652+
To complete the sign-up process; enter the 6-digit code in the original window:
653+
654+
#{code}
655+
656+
If you didn't request this link, you can safely ignore this email.
657+
658+
--------------------------------------------------------------------------------
659+
660+
For correspondence, please email the Algora founders at [email protected] and [email protected]
661+
662+
© 2025 Algora PBC.
663+
""")
664+
665+
Algora.Mailer.deliver(email)
666+
end
667+
668+
def deliver_totp_login_email(user, code) do
669+
email =
670+
Email.new()
671+
|> Email.to({user.display_name, user.email})
672+
|> Email.from({"Algora", "[email protected]"})
673+
|> Email.subject("#{code} - Algora Sign-in Verification")
674+
|> Email.text_body("""
675+
Hello #{user.display_name},
676+
677+
To complete the sign-in process; enter the 6-digit code in the original window:
678+
679+
#{code}
680+
681+
If you didn't request this link, you can safely ignore this email.
682+
683+
--------------------------------------------------------------------------------
684+
685+
For correspondence, please email the Algora founders at [email protected] and [email protected]
686+
687+
© 2025 Algora PBC.
688+
""")
689+
690+
Algora.Mailer.deliver(email)
691+
end
642692
end

lib/algora_web/live/sign_in_live.ex

Lines changed: 5 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ defmodule AlgoraWeb.SignInLive do
22
@moduledoc false
33
use AlgoraWeb, :live_view
44

5+
alias Algora.Accounts
56
alias Algora.Accounts.User
67
alias AlgoraWeb.Components.Logos
78
alias AlgoraWeb.LocalStore
@@ -262,11 +263,11 @@ defmodule AlgoraWeb.SignInLive do
262263
def handle_event("send_login_code", %{"user" => %{"email" => email}}, socket) do
263264
{secret, code} = AlgoraWeb.UserAuth.generate_totp()
264265

265-
case Algora.Accounts.get_user_by_email(email) do
266+
case Accounts.get_user_by_email(email) do
266267
%User{} = user ->
267268
changeset = User.login_changeset(%User{}, %{})
268269

269-
case send_login_code_to_user(user, code) do
270+
case Accounts.deliver_totp_login_email(user, code) do
270271
{:ok, _id} ->
271272
{:noreply,
272273
socket
@@ -289,7 +290,7 @@ defmodule AlgoraWeb.SignInLive do
289290
@impl true
290291
def handle_event("send_login_code", %{"user" => %{"login_code" => code}}, socket) do
291292
if AlgoraWeb.UserAuth.valid_totp?(socket.assigns.secret, String.trim(code)) do
292-
Algora.Accounts.ensure_org_context(socket.assigns.user)
293+
Accounts.ensure_org_context(socket.assigns.user)
293294

294295
{:noreply,
295296
redirect(socket, to: AlgoraWeb.UserAuth.generate_login_path(socket.assigns.user.email, socket.assigns[:return_to]))}
@@ -304,42 +305,14 @@ defmodule AlgoraWeb.SignInLive do
304305

305306
case socket.assigns[:email] do
306307
nil -> {:noreply, socket}
307-
email -> {:noreply, assign(socket, :user, Algora.Accounts.get_user_by_email(email))}
308+
email -> {:noreply, assign(socket, :user, Accounts.get_user_by_email(email))}
308309
end
309310
end
310311

311312
defp assign_form(socket, %Ecto.Changeset{} = changeset) do
312313
assign(socket, :form, to_form(changeset))
313314
end
314315

315-
@from_name "Algora"
316-
@from_email "[email protected]"
317-
318-
defp send_login_code_to_user(user, code) do
319-
email =
320-
Email.new()
321-
|> Email.to({user.display_name, user.email})
322-
|> Email.from({@from_name, @from_email})
323-
|> Email.subject("#{code} - Algora Sign-in Verification")
324-
|> Email.text_body("""
325-
Hello #{user.display_name},
326-
327-
To complete the sign-in process; enter the 6-digit code in the original window:
328-
329-
#{code}
330-
331-
If you didn't request this link, you can safely ignore this email.
332-
333-
--------------------------------------------------------------------------------
334-
335-
For correspondence, please email the Algora founders at [email protected] and [email protected]
336-
337-
© 2025 Algora PBC.
338-
""")
339-
340-
Algora.Mailer.deliver(email)
341-
end
342-
343316
defp throttle, do: :timer.sleep(1000)
344317

345318
defp get_random_quote do

0 commit comments

Comments
 (0)