Packages
openmaize
0.7.4
3.0.1
retired
3.0.0
2.9.0
2.8.0
2.7.0
2.6.0
2.5.1
2.5.0
2.4.0
2.3.2
2.3.1
2.3.0
2.2.0
2.1.5
2.1.4
2.1.3
2.1.2
2.1.1
2.1.0
2.0.2
2.0.1
2.0.0
1.0.1
1.0.0
1.0.0-beta.5
1.0.0-beta.4
1.0.0-beta.3
1.0.0-beta.2
1.0.0-beta.1
1.0.0-beta.0
0.19.3
0.19.2
0.19.1
0.19.0
0.18.1
0.18.0
0.17.2
0.17.1
0.17.0
0.16.2
0.16.1
0.16.0
0.15.1
0.15.0
0.14.0
0.13.0
0.12.0
0.11.1
0.11.0
0.10.2
0.10.1
0.10.0
0.8.1
0.8.0
0.7.5
0.7.4
0.7.2
0.7.1
0.7.0
0.6.7
0.6.6
0.6.3
0.6.2
0.6.1
0.6.0
0.5.0
0.4.1
0.4.0
Authentication library for Elixir using Plug
Current section
Files
Jump to
Current section
Files
lib/openmaize/report.ex
defmodule Openmaize.Report do
@moduledoc """
This module provides error and info messages and handles redirects if
the option `redirects` is set to true.
"""
import Plug.Conn
alias Openmaize.Config
alias Openmaize.TokenConfig
@doc """
Redirect the connection to the login page with an error message.
"""
def handle_error(conn, message) do
redirect_to_login(conn, %{"error" => message})
end
@doc """
Redirect the connection to the user's role's page with an error message.
"""
def handle_error(conn, role, message) do
redirect_to(conn, "#{Config.redirect_pages[role]}", %{"error" => message})
end
@doc """
Redirect the connection to the home page with an info message.
"""
def handle_info(conn, message), do: redirect_to(conn, "/", %{"info" => message})
@doc """
Redirect the connection to the user's role's page with an info message.
"""
def handle_info(conn, role, message) do
redirect_to(conn, "#{Config.redirect_pages[role]}", %{"info" => message})
end
@doc """
Send a json-encoded error message as a response and then halt the connection.
This function will be used if the `redirects` option is set to false.
"""
def send_error(conn, status, message) do
send_resp(conn, status, TokenConfig.encode(%{"error" => message})) |> terminate
end
@doc """
Return and halt the connection. Also, set the openmaize_skip value to true,
which means that subsequent Openmaize plugs will just return the connection
without performing any further checks.
"""
def terminate(conn), do: conn |> put_private(:openmaize_skip, true) |> halt
defp redirect_to(%Plug.Conn{scheme: scheme, host: host} = conn, address, message) do
if Mix.env == :dev, do: host = "localhost:4000"
unless map_size(message) == 0, do: conn = send_message(conn, message)
conn
|> put_resp_header("location", "#{scheme}://#{host}#{address}")
|> send_resp(302, "") |> terminate
end
defp redirect_to_login(conn, message) do
redirect_to(conn, "#{Config.login_dir}/login", message)
end
defp send_message(conn, message) do
if Map.get(conn.private, :phoenix_flash) do
put_private(conn, :phoenix_flash, message)
else
IO.inspect message
conn
end
end
end