frenzy/lib/frenzy/user.ex

46 lines
1.2 KiB
Elixir

defmodule Frenzy.User do
use Ecto.Schema
import Ecto.Changeset
schema "users" do
field :username, :string
field :password, :string, virtual: true
field :password_hash, :string
field :fever_password, :string, virtual: true
field :fever_auth_token, :string
has_many :groups, Frenzy.Group, on_delete: :delete_all
timestamps()
end
@doc false
def changeset(user, attrs) do
user
|> cast(attrs, [:username, :password_hash])
|> validate_required([:username, :password_hash])
end
def registration_changeset(user, attrs) do
user
|> cast(attrs, [:username, :password, :fever_password])
|> validate_length(:password, min: 8)
|> validate_length(:fever_password, min: 8)
|> put_password_hash()
end
defp put_password_hash(
%Ecto.Changeset{
valid?: true,
changes: %{username: username, password: password, fever_password: fever_password}
} = changeset
) do
changeset
|> change(Bcrypt.add_hash(password))
|> change(%{
fever_auth_token:
:crypto.hash(:md5, "#{username}:#{fever_password}") |> Base.encode16(case: :lower)
})
end
end