defmodule PhoenixKitWeb.Users.LoginLive do use PhoenixKitWeb, :live_view alias PhoenixKit.Admin.Presence alias PhoenixKit.Settings def render(assigns) do ~H"""

{@project_title} Sign in

<.form for={@form} id="login_form" action="/phoenix_kit/users/log-in" phx-update="ignore" >
Login with Password

Please enter a valid email address

Password must be at least 8 characters long

<.link href="/phoenix_kit/users/reset-password" class="text-sm font-semibold text-primary hover:underline" > Forgot your password?
New to {@project_title}? <.link navigate="/phoenix_kit/users/register" class="font-semibold text-primary hover:underline" > Create an account
Development mode: Check <.link href="/dev/mailbox" class="font-semibold underline">mailbox for confirmation emails
""" end def mount(_params, session, socket) do # Track anonymous visitor session if connected?(socket) do session_id = session["live_socket_id"] || generate_session_id() Presence.track_anonymous(session_id, %{ connected_at: DateTime.utc_now(), ip_address: get_connect_info(socket, :peer_data) |> extract_ip_address(), user_agent: get_connect_info(socket, :user_agent), current_page: "/phoenix_kit/users/log-in" }) end # Get project title from settings project_title = Settings.get_setting("project_title", "PhoenixKit") email = Phoenix.Flash.get(socket.assigns.flash, :email) form = to_form(%{"email" => email}, as: "user") {:ok, assign(socket, form: form, project_title: project_title), temporary_assigns: [form: form]} end defp show_dev_notice? do case Application.get_env(:phoenix_kit, PhoenixKit.Mailer)[:adapter] do Swoosh.Adapters.Local -> true _ -> false end end defp generate_session_id do :crypto.strong_rand_bytes(16) |> Base.encode64() end defp extract_ip_address(nil), do: "unknown" defp extract_ip_address(%{address: {a, b, c, d}}), do: "#{a}.#{b}.#{c}.#{d}" defp extract_ip_address(%{address: address}), do: to_string(address) defp extract_ip_address(_), do: "unknown" end