Current section

Files

Jump to
blossom lib blossom plugs utils.ex
Raw

lib/blossom/plugs/utils.ex

defmodule Blossom.Plugs.Utils do
alias Blossom.Plugs.Utils
alias Blossom.Utils, as: BlossomUtils
alias Plug.Conn
def clients_controller(config, opts) do
BlossomUtils.option_or_key_config(config, opts, :clients_controller, nil)
end
def users_controller(config, opts) do
BlossomUtils.option_or_key_config(config, opts, :users_controller, nil)
end
def jwt_key(config, opts) do
BlossomUtils.option_or_key_config(config, opts, :jwt_key, :jwt)
end
def realm(config, opts, otp_app) do
BlossomUtils.option_or_key_config(config, opts, :realm, otp_app)
end
def user_key(config, opts) do
BlossomUtils.option_or_key_config(config, opts, :user_key, :user)
end
def enforce_auth(config, opts) do
BlossomUtils.option_or_key_config(config, opts, :enforce_auth, true)
end
def get_opts(options) do
config = Application.get_env(options[:otp_app], Blossom)
[
clients_controller: Utils.clients_controller(config, options),
enforce_auth: Utils.enforce_auth(config, options),
jwt_key: Utils.jwt_key(config, options),
realm: Utils.realm(config, options, options[:otp_app]),
users_controller: Utils.users_controller(config, options),
user_key: Utils.user_key(config, options)
]
end
def get_auth_header(conn) do
List.first(Conn.get_req_header(conn, "authorization"))
end
def unauthorized_header(conn, error, realm) do
conn
|> Conn.put_resp_header(
"www-authenticate",
"Bearer realm=\"#{realm}\", error=\"#{error}\""
)
end
def send_401(conn, error, opts) do
if opts[:enforce_auth] == false do
conn
else
conn
|> Utils.unauthorized_header(error, opts[:realm])
|> Conn.put_resp_content_type("application/json")
|> Conn.send_resp(401, Poison.encode!(%{"message" => error}))
|> Conn.halt()
end
end
end