Current section
Files
Jump to
Current section
Files
lib/plug/require_authenticated.ex
defmodule KeenAuth.Plug.RequireAuthenticated do
@behaviour Plug
alias Plug.Conn
alias KeenAuth.Storage
alias KeenAuth.Config
import Conn
import Phoenix.Controller, only: [redirect: 2]
def init(opts) do
opts
end
def call(conn, opts) do
if KeenAuth.authenticated?(conn) do
conn
else
handle_unauthenticated(conn, opts)
end
end
def handle_unauthenticated(%Conn{request_path: request_path} = conn, opts) do
application_redirect =
if Keyword.has_key?(opts, :redirect) do
opts[:redirect]
else
config_redirect(conn)
end
cond do
is_function(application_redirect) ->
conn
|> redirect(to: application_redirect.(conn, request_path))
|> halt()
is_binary(application_redirect) ->
conn
|> redirect(to: application_redirect)
|> halt()
true ->
conn
|> KeenAuth.Plug.AuthorizationErrorHandler.call(:unauthorized)
|> halt()
end
end
defp config_redirect(conn) do
conn
|> KeenAuth.Plug.fetch_config()
|> Config.get(:unauthorized_redirect)
end
end