Packages
blossom
0.29.2
0.29.3
0.29.2
0.29.1
0.29.0
0.28.0
0.27.3
0.27.2
0.27.1
0.27.0
0.26.3
0.26.2
0.26.1
0.26.0
0.25.3
0.25.2
0.25.1
0.25.0
0.24.1
0.24.0
0.23.5
0.23.4
0.23.3
0.23.2
0.23.1
0.23.0
0.22.1
0.22.0
0.21.8
0.21.7
0.21.6
0.21.5
0.21.4
0.21.3
0.21.2
0.21.1
0.21.0
0.20.4
0.20.3
0.20.2
0.20.1
0.20.0
0.19.5
0.19.4
0.19.3
0.19.2
0.19.1
0.19.0
0.18.1
0.18.0
0.17.4
0.17.3
0.17.2
0.17.1
0.17.0
0.16.0
0.15.2
0.15.1
0.15.0
0.14.0
0.13.0
0.12.2
0.12.1
0.12.0
0.11.0
0.10.1
0.10.0
0.9.2
0.9.1
0.9.0
0.8.0
0.7.0
0.6.2
0.6.1
0.6.0
0.5.1
0.5.0
0.4.0
0.3.0
0.2.0
0.1.0
Easy identity for easy authentication
Current section
Files
Jump to
Current section
Files
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