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.casks_roles, [], fn cask_role, acc ->
extraction = %{
role: cask_role.role,
scope: cask_role.scope,
cask: cask_role.cask
}
[extraction | acc]
end)
end
def verify_password(user, password) do
if Passwords.matches?(password, user.password) do
{:ok, user}
else
{:error, :wrong_credentials}
end
end
def generate_jwt(user, client) do
%{"casks_roles" => Auth.extract_roles(user)}
|> Tokens.login_token(user, client)
end
def make_token(outcome, client) do
case outcome do
{:ok, user} ->
jwt = Auth.generate_jwt(user, client)
{:ok, Tokens.sign(jwt, client.secret)}
{:error, _} = error ->
error
end
end
def login(user, password, client) do
if user && user.password do
user
|> Auth.verify_password(password)
|> Auth.make_token(client)
else
{:error, :wrong_credentials}
end
end
end