@@ -96,7 +96,7 @@ defmodule AlgoraWeb.Org.DashboardLive do
9696 |> assign ( :show_share_drawer , false )
9797 |> assign ( :share_drawer_type , nil )
9898 |> assign ( :selected_developer , nil )
99- |> assign ( :secret_code , nil )
99+ |> assign ( :secret , nil )
100100 |> assign_login_form ( User . login_changeset ( % User { } , % { } ) )
101101 |> assign_payable_bounties ( )
102102 |> assign_contracts ( )
@@ -807,15 +807,15 @@ defmodule AlgoraWeb.Org.DashboardLive do
807807
808808 @ impl true
809809 def handle_event ( "send_login_code" , % { "user" => % { "email" => email } } , socket ) do
810- code = Nanoid . generate ( )
810+ { secret , code } = AlgoraWeb.UserAuth . generate_totp ( )
811811
812812 changeset = User . login_changeset ( % User { } , % { } )
813813
814- case send_login_code_to_user ( email , code ) do
814+ case Accounts . deliver_totp_signup_email ( email , code ) do
815815 { :ok , _id } ->
816816 { :noreply ,
817817 socket
818- |> assign ( :secret_code , code )
818+ |> assign ( :secret , secret )
819819 |> assign ( :email , email )
820820 |> assign_login_form ( changeset ) }
821821
@@ -827,7 +827,7 @@ defmodule AlgoraWeb.Org.DashboardLive do
827827
828828 @ impl true
829829 def handle_event ( "send_login_code" , % { "user" => % { "login_code" => code } } , socket ) do
830- if Plug.Crypto . secure_compare ( String . trim ( code ) , socket . assigns . secret_code ) do
830+ if AlgoraWeb.UserAuth . valid_totp? ( socket . assigns . secret , String . trim ( code ) ) do
831831 handle =
832832 socket . assigns . email
833833 |> Organizations . generate_handle_from_email ( )
@@ -1021,32 +1021,6 @@ defmodule AlgoraWeb.Org.DashboardLive do
10211021
10221022 defp page_size , do: 10
10231023
1024- @ from_name "Algora"
1025- 1026-
1027- defp send_login_code_to_user ( email , code ) do
1028- email =
1029- Email . new ( )
1030- |> Email . to ( email )
1031- |> Email . from ( { @ from_name , @ from_email } )
1032- |> Email . subject ( "Login code for Algora" )
1033- |> Email . text_body ( """
1034- Here is your login code for Algora!
1035-
1036- #{ code }
1037-
1038- If you didn't request this link, you can safely ignore this email.
1039-
1040- --------------------------------------------------------------------------------
1041-
1042- For correspondence, please email the Algora founders at [email protected] and [email protected] 1043-
1044- © 2025 Algora PBC.
1045- """ )
1046-
1047- Algora.Mailer . deliver ( email )
1048- end
1049-
10501024 defp assign_payable_bounties ( socket ) do
10511025 org = socket . assigns . current_org
10521026
@@ -1098,7 +1072,7 @@ defmodule AlgoraWeb.Org.DashboardLive do
10981072 defp achievement_todo ( % { achievement: % { id: :complete_signup_status } } = assigns ) do
10991073 ~H"""
11001074 < . simple_form
1101- :if = { ! @ secret_code }
1075+ :if = { ! @ secret }
11021076 for = { @ login_form }
11031077 id = "send_login_code_form "
11041078 phx-submit = "send_login_code "
@@ -1115,7 +1089,7 @@ defmodule AlgoraWeb.Org.DashboardLive do
11151089 </ . button >
11161090 </ . simple_form >
11171091 < . simple_form
1118- :if = { @ secret_code }
1092+ :if = { @ secret }
11191093 for = { @ login_form }
11201094 id = "send_login_code_form "
11211095 phx-submit = "send_login_code "
@@ -1646,7 +1620,7 @@ defmodule AlgoraWeb.Org.DashboardLive do
16461620 < . achievement_todo
16471621 achievement = { achievement }
16481622 current_user = { @ current_user }
1649- secret_code = { @ secret_code }
1623+ secret = { @ secret }
16501624 login_form = { @ login_form }
16511625 />
16521626 </ li >
0 commit comments