Packages
blossom
0.15.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/controllers/users.ex
defmodule Blossom.Controllers.Users do
alias Blossom.Controllers.Users
alias Blossom.Passwords
alias KilnCore.Utils
def word_from_stream(stream) do
stream
|> Enum.random()
|> String.trim()
|> String.downcase()
end
def make_username(params) do
if File.exists?("/usr/share/dict/words") do
stream = File.stream!("/usr/share/dict/words")
word_one = Users.word_from_stream(stream)
word_two = Users.word_from_stream(stream)
"#{word_one}-#{word_two}-#{Enum.random(1..100)}"
else
params["email"]
|> String.split("@")
|> List.first()
end
end
def new_user_params(params) do
params
|> Map.replace("email", String.downcase(params["email"]))
|> Map.replace("password", Passwords.hash(params["password"]))
|> Map.put_new("username", Users.make_username(params))
end
def make_user(outcome, params, model) do
case outcome do
{:ok, _} ->
params
|> Users.new_user_params()
|> 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, _opts), do: Users.new(params, @auth, @model)
def login(params, _user, _opts), do: Users.login(params, @auth, @model)
defoverridable new: 3, login: 3
end
end
end