Current section

Files

Jump to
blossom lib blossom builders auth.ex
Raw

lib/blossom/builders/auth.ex

defmodule Blossom.Builders.Auth do
alias Blossom.Builders.Auth
alias Blossom.{Passwords, Tokens}
def extract_roles(user) do
Enum.reduce(user.organizations_roles, [], fn org_role, acc ->
extraction = %{
role: org_role.role,
organization: org_role.organization
}
[extraction | acc]
end)
end
def verify_password(user, password) do
if user do
if Passwords.matches?(password, user.password) do
{:ok, user}
else
{:error, :wrong_credentials}
end
else
{:error, :wrong_credentials}
end
end
def make_token(outcome, opts) do
case outcome do
{:ok, user} ->
payload = %{"roles" => Auth.extract_roles(user)}
{:ok, Tokens.login_token(payload, user, opts)}
{:error, _} = error ->
error
end
end
def login(user, password, opts) do
user
|> Auth.verify_password(password)
|> Auth.make_token(opts)
end
end