defmodule Blossom.Controllers.Users do alias Blossom.Controllers.Users alias Blossom.Passwords alias KilnCore.Utils def make_user(outcome, params, model) do case outcome do {:ok, _} -> params |> Map.replace("email", String.downcase(params["email"])) |> Map.replace("password", Passwords.hash(params["password"])) |> model.new(:public) error -> error end end def new(params, auth, model) do case params do %{"email" => _, "password" => password} -> password |> auth.validate_new_password() |> Users.make_user(params, model) _ -> {:error, :missing_fields} end end def login(params, auth, model) do case params do %{"email" => email, "password" => password} -> %{"email" => String.downcase(email)} |> model.get(:system) |> List.first() |> auth.login(password) _ -> {:error, :missing_fields} end end defmacro __using__(opts \\ []) do quote do use KilnCore.Controller, unquote(opts) @auth Utils.option_or_mod_replace( @caller, unquote(opts), :auth, Auth, 1, 0..1 ) def new(params, _user), do: Users.new(params, @auth, @model) def login(params, _user), do: Users.login(params, @auth, @model) end end end