Current section

Files

Jump to
supabase_gotrue lib supabase go_true plug.ex
Raw

lib/supabase/go_true/plug.ex

defmodule Supabase.GoTrue.Plug do
@moduledoc false
import Plug.Conn
import Supabase.Client, only: [is_client: 1]
alias Plug.Conn
@key "supabase_gotrue_token"
def session_active?(%Conn{} = conn) do
key = :second |> System.os_time() |> to_string()
get_session(conn, key) == nil
rescue
ArgumentError -> false
end
def authenticated?(%Conn{} = conn) do
not is_nil(conn.private[@key])
end
def put_current_token(%Conn{} = conn, token) do
put_private(conn, @key, token)
end
def put_session_token(%Conn{} = conn, token) do
conn
|> put_session(@key, token)
|> configure_session(renew: true)
end
def sign_in(%Conn{} = conn, client, attrs) when is_client(client) do
case maybe_sign_in(conn, client, attrs) do
{:ok, session} -> put_session_token(conn, session.access_token)
_ -> conn
end
end
defp maybe_sign_in(conn, client, credentials) do
if session_active?(conn) do
Supabase.GoTrue.sign_in_with_password(client, credentials)
end
end
def sign_out(%Conn{} = conn) do
if session_active?(conn) do
delete_session(conn, @key)
else
conn
end
end
def fetch_token_from_cookies(%Conn{} = conn) do
token = conn.req_cookies[@key] || conn.req_cookies[to_string(@key)]
if token, do: {:ok, token}, else: {:error, :not_found}
end
def current_token(%Conn{} = conn) do
conn.private[@key]
end
end