defmodule PlausibleWeb.LoginPreference do @moduledoc """ Functions for managing user login preference cookies. This module handles storing and retrieving the user's preferred login method (standard or SSO) to provide a better user experience by showing their preferred option first. """ @cookie_name "login_preference" @cookie_max_age 60 * 60 * 24 * 365 @spec set_sso(Plug.Conn.t()) :: Plug.Conn.t() def set_sso(conn) do secure_cookie = PlausibleWeb.Endpoint.secure_cookie?() Plug.Conn.put_resp_cookie(conn, @cookie_name, "sso", http_only: true, secure: secure_cookie, max_age: @cookie_max_age, same_site: "Lax" ) end @spec clear(Plug.Conn.t()) :: Plug.Conn.t() def clear(conn) do Plug.Conn.delete_resp_cookie(conn, @cookie_name) end @spec get(Plug.Conn.t()) :: String.t() | nil def get(conn) do case Plug.Conn.fetch_cookies(conn) do %{cookies: %{@cookie_name => "sso"}} -> "sso" _ -> nil end end end