File size: 1,018 Bytes
88211d3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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