defmodule Legendary.Auth.User do
@moduledoc """
The baseline user schema module.
"""
use Ecto.Schema
use Pow.Ecto.Schema
use Pow.Extension.Ecto.Schema,
extensions: [PowResetPassword, PowEmailConfirmation]
import Pow.Ecto.Schema.Changeset, only: [new_password_changeset: 3]
alias Ecto.Changeset
schema "users" do
field :roles, {:array, :string}, default: []
field :display_name, :string
field :homepage_url, :string
pow_user_fields()
timestamps()
end
defp parse_roles(list) when is_list(list), do: list
defp parse_roles(binary) when is_binary(binary), do: Phoenix.json_library().decode!(binary)
def admin_changeset(user_or_changeset, attrs) do
role_list =
attrs
|> Map.get("roles", [])
|> parse_roles()
attrs = Map.put(attrs, "roles", role_list)
user_or_changeset
|> pow_user_id_field_changeset(attrs)
|> Changeset.cast(attrs, [:roles, :display_name])
|> pow_extension_changeset(attrs)
end
def changeset(user_or_changeset, attrs) do
user_or_changeset
|> pow_user_id_field_changeset(attrs)
|> pow_current_password_changeset(attrs)
|> new_password_changeset(attrs, @pow_config)
|> Changeset.cast(attrs, [:roles])
|> pow_extension_changeset(attrs)
end
def reset_password_changeset(%Legendary.Auth.User{} = user, params) do
user
|> new_password_changeset(params, @pow_config)
|> Changeset.validate_required([:password])
end
end