blonk is a radar for your web, where you follow vibes for cool blips on the radar
at main 39 lines 1.3 kB view raw
1defmodule ElixirBlonkWeb.UserSessionController do 2 use ElixirBlonkWeb, :controller 3 4 alias ElixirBlonk.Accounts 5 alias ElixirBlonkWeb.UserAuth 6 7 def new(conn, _params) do 8 render(conn, :new, error_message: nil) 9 end 10 11 def create(conn, %{"user" => user_params}) do 12 handle = user_params["handle"] || user_params["email"] 13 password = user_params["password"] 14 15 case Accounts.authenticate_with_atproto(handle, password) do 16 {:ok, user} -> 17 conn 18 |> put_flash(:info, "Welcome to Blonk, #{user.display_name || user.handle}! 🎉") 19 |> UserAuth.log_in_user(user, user_params) 20 21 {:error, :invalid_credentials} -> 22 render(conn, :new, error_message: "Invalid handle or App Password. Make sure you're using an App Password, not your main password.") 23 24 {:error, :network_error} -> 25 render(conn, :new, error_message: "Unable to connect to Bluesky. Please try again.") 26 27 {:error, reason} -> 28 require Logger 29 Logger.warning("ATProto authentication failed: #{inspect(reason)}") 30 render(conn, :new, error_message: "Authentication failed. Please check your handle and App Password.") 31 end 32 end 33 34 def delete(conn, _params) do 35 conn 36 |> put_flash(:info, "Logged out successfully.") 37 |> UserAuth.log_out_user() 38 end 39end