replace coherence with guardian
This commit is contained in:
@@ -4,6 +4,7 @@ defmodule Eventos.Accounts do
|
||||
"""
|
||||
|
||||
import Ecto.Query, warn: false
|
||||
import Logger
|
||||
alias Eventos.Repo
|
||||
|
||||
alias Eventos.Accounts.User
|
||||
@@ -37,6 +38,32 @@ defmodule Eventos.Accounts do
|
||||
"""
|
||||
def get_user!(id), do: Repo.get!(User, id)
|
||||
|
||||
|
||||
@doc """
|
||||
Get an user by email
|
||||
"""
|
||||
def find(email) do
|
||||
Repo.get_by!(User, email: email)
|
||||
end
|
||||
|
||||
@doc """
|
||||
Authenticate user
|
||||
"""
|
||||
def authenticate(%{user: user, password: password}) do
|
||||
# Does password match the one stored in the database?
|
||||
Logger.debug(user.password_hash)
|
||||
Logger.debug(password)
|
||||
case Comeonin.Argon2.checkpw(password, user.password_hash) do
|
||||
true ->
|
||||
# Yes, create and return the token
|
||||
EventosWeb.Guardian.encode_and_sign(user)
|
||||
_ ->
|
||||
# No, return an error
|
||||
{:error, :unauthorized}
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@doc """
|
||||
Creates a user.
|
||||
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
defmodule Eventos.Accounts.User do
|
||||
use Ecto.Schema
|
||||
use Coherence.Schema
|
||||
import Ecto.Changeset
|
||||
alias Eventos.Accounts.{User}
|
||||
|
||||
@@ -8,36 +7,40 @@ defmodule Eventos.Accounts.User do
|
||||
schema "users" do
|
||||
field :email, :string
|
||||
field :role, :integer, default: 0
|
||||
field :username, :string
|
||||
field :password, :string, virtual: true
|
||||
field :password_hash, :string
|
||||
field :account_id, :integer
|
||||
|
||||
coherence_schema()
|
||||
|
||||
timestamps()
|
||||
end
|
||||
|
||||
def changeset(user, attrs, :password) do
|
||||
user
|
||||
|> cast(attrs, ~w(password password_confirmation reset_password_token reset_password_sent_at))
|
||||
|> validate_coherence_password_reset(attrs)
|
||||
end
|
||||
|
||||
def changeset(user, attrs, :registration) do
|
||||
user
|
||||
|> cast(attrs, [:username, :email] ++ coherence_fields())
|
||||
|> validate_required([:username, :email])
|
||||
|> validate_format(:email, ~r/@/)
|
||||
|> unique_constraint(:username)
|
||||
|> validate_coherence(attrs)
|
||||
end
|
||||
|
||||
@doc false
|
||||
def changeset(%User{} = user, attrs) do
|
||||
user
|
||||
|> cast(attrs, [:username, :email, :password_hash, :role] ++ coherence_fields())
|
||||
|> validate_required([:username, :email])
|
||||
|> unique_constraint(:username)
|
||||
|> cast(attrs, [:email, :password_hash, :role])
|
||||
|> validate_required([:email])
|
||||
|> unique_constraint(:email)
|
||||
|> validate_format(:email, ~r/@/)
|
||||
|> validate_coherence(attrs)
|
||||
end
|
||||
|
||||
def registration_changeset(struct, params) do
|
||||
struct
|
||||
|> changeset(params)
|
||||
|> cast(params, ~w(password)a, [])
|
||||
|> validate_length(:password, min: 6, max: 100)
|
||||
|> hash_password
|
||||
end
|
||||
|
||||
defp hash_password(changeset) do
|
||||
case changeset do
|
||||
%Ecto.Changeset{valid?: true,
|
||||
changes: %{password: password}} ->
|
||||
put_change(changeset,
|
||||
:password_hash,
|
||||
Comeonin.Argon2.hashpwsalt(password))
|
||||
_ ->
|
||||
changeset
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,40 +0,0 @@
|
||||
defmodule Eventos.Coherence.Invitation do
|
||||
@moduledoc """
|
||||
Schema to support inviting a someone to create an account.
|
||||
"""
|
||||
use Ecto.Schema
|
||||
import Ecto.Changeset
|
||||
|
||||
|
||||
|
||||
schema "invitations" do
|
||||
field :name, :string
|
||||
field :email, :string
|
||||
field :token, :string
|
||||
|
||||
timestamps()
|
||||
end
|
||||
|
||||
@doc """
|
||||
Creates a changeset based on the `model` and `params`.
|
||||
|
||||
If no params are provided, an invalid changeset is returned
|
||||
with no validation performed.
|
||||
"""
|
||||
@spec changeset(Ecto.Schema.t, Map.t) :: Ecto.Changeset.t
|
||||
def changeset(model, params \\ %{}) do
|
||||
model
|
||||
|> cast(params, ~w(name email token))
|
||||
|> validate_required([:name, :email])
|
||||
|> unique_constraint(:email)
|
||||
|> validate_format(:email, ~r/@/)
|
||||
end
|
||||
|
||||
@doc """
|
||||
Creates a changeset for a new schema
|
||||
"""
|
||||
@spec new_changeset(Map.t) :: Ecto.Changeset.t
|
||||
def new_changeset(params \\ %{}) do
|
||||
changeset %__MODULE__{}, params
|
||||
end
|
||||
end
|
||||
@@ -1,44 +0,0 @@
|
||||
defmodule Eventos.Coherence.Rememberable do
|
||||
@moduledoc false
|
||||
use Ecto.Schema
|
||||
|
||||
import Ecto.Changeset
|
||||
import Ecto.Query
|
||||
|
||||
alias Coherence.Config
|
||||
|
||||
|
||||
|
||||
schema "rememberables" do
|
||||
field :series_hash, :string
|
||||
field :token_hash, :string
|
||||
field :token_created_at, Timex.Ecto.DateTime
|
||||
belongs_to :user, Module.concat(Config.module, Config.user_schema)
|
||||
|
||||
timestamps()
|
||||
end
|
||||
|
||||
use Coherence.Rememberable
|
||||
|
||||
@doc """
|
||||
Creates a changeset based on the `model` and `params`.
|
||||
|
||||
If no params are provided, an invalid changeset is returned
|
||||
with no validation performed.
|
||||
"""
|
||||
@spec changeset(Ecto.Schema.t, Map.t) :: Ecto.Changeset.t
|
||||
def changeset(model, params \\ %{}) do
|
||||
model
|
||||
|> cast(params, ~w(series_hash token_hash token_created_at user_id))
|
||||
|> validate_required(~w(series_hash token_hash token_created_at user_id)a)
|
||||
end
|
||||
|
||||
@doc """
|
||||
Creates a changeset for a new schema
|
||||
"""
|
||||
@spec new_changeset(Map.t) :: Ecto.Changeset.t
|
||||
def new_changeset(params \\ %{}) do
|
||||
changeset %Rememberable{}, params
|
||||
end
|
||||
|
||||
end
|
||||
@@ -1,141 +0,0 @@
|
||||
defmodule Eventos.Coherence.Schemas do
|
||||
|
||||
use Coherence.Config
|
||||
|
||||
import Ecto.Query
|
||||
|
||||
@user_schema Config.user_schema
|
||||
@repo Config.repo
|
||||
|
||||
def list_user do
|
||||
@repo.all @user_schema
|
||||
end
|
||||
|
||||
def get_by_user(opts) do
|
||||
@repo.get_by @user_schema, opts
|
||||
end
|
||||
|
||||
def get_user(id) do
|
||||
@repo.get @user_schema, id
|
||||
end
|
||||
|
||||
def get_user!(id) do
|
||||
@repo.get! @user_schema, id
|
||||
end
|
||||
|
||||
def get_user_by_email(email) do
|
||||
@repo.get_by @user_schema, email: email
|
||||
end
|
||||
|
||||
def change_user(struct, params) do
|
||||
@user_schema.changeset struct, params
|
||||
end
|
||||
|
||||
def change_user(params) do
|
||||
@user_schema.changeset @user_schema.__struct__, params
|
||||
end
|
||||
|
||||
def change_user do
|
||||
@user_schema.changeset @user_schema.__struct__, %{}
|
||||
end
|
||||
|
||||
def update_user(user, params) do
|
||||
@repo.update change_user(user, params)
|
||||
end
|
||||
|
||||
def create_user(params) do
|
||||
@repo.insert change_user(params)
|
||||
end
|
||||
|
||||
Enum.each [Eventos.Coherence.Invitation, Eventos.Coherence.Rememberable], fn module ->
|
||||
|
||||
name =
|
||||
module
|
||||
|> Module.split
|
||||
|> List.last
|
||||
|> String.downcase
|
||||
|
||||
def unquote(String.to_atom("list_#{name}"))() do
|
||||
@repo.all unquote(module)
|
||||
end
|
||||
|
||||
def unquote(String.to_atom("list_#{name}"))(%Ecto.Query{} = query) do
|
||||
@repo.all query
|
||||
end
|
||||
|
||||
def unquote(String.to_atom("get_#{name}"))(id) do
|
||||
@repo.get unquote(module), id
|
||||
end
|
||||
|
||||
def unquote(String.to_atom("get_#{name}!"))(id) do
|
||||
@repo.get! unquote(module), id
|
||||
end
|
||||
|
||||
def unquote(String.to_atom("get_by_#{name}"))(opts) do
|
||||
@repo.get_by unquote(module), opts
|
||||
end
|
||||
|
||||
def unquote(String.to_atom("change_#{name}"))(struct, params) do
|
||||
unquote(module).changeset(struct, params)
|
||||
end
|
||||
|
||||
def unquote(String.to_atom("change_#{name}"))(params) do
|
||||
unquote(module).new_changeset(params)
|
||||
end
|
||||
|
||||
def unquote(String.to_atom("change_#{name}"))() do
|
||||
unquote(module).new_changeset(%{})
|
||||
end
|
||||
|
||||
def unquote(String.to_atom("create_#{name}"))(params) do
|
||||
@repo.insert unquote(module).new_changeset(params)
|
||||
end
|
||||
|
||||
def unquote(String.to_atom("update_#{name}"))(struct, params) do
|
||||
@repo.update unquote(module).changeset(struct, params)
|
||||
end
|
||||
|
||||
def unquote(String.to_atom("delete_#{name}"))(struct) do
|
||||
@repo.delete struct
|
||||
end
|
||||
end
|
||||
|
||||
def query_by(schema, opts) do
|
||||
Enum.reduce opts, schema, fn {k, v}, query ->
|
||||
where(query, [b], field(b, ^k) == ^v)
|
||||
end
|
||||
end
|
||||
|
||||
def delete_all(%Ecto.Query{} = query) do
|
||||
@repo.delete_all query
|
||||
end
|
||||
|
||||
def delete_all(module) when is_atom(module) do
|
||||
@repo.delete_all module
|
||||
end
|
||||
|
||||
def create(%Ecto.Changeset{} = changeset) do
|
||||
@repo.insert changeset
|
||||
end
|
||||
|
||||
def create!(%Ecto.Changeset{} = changeset) do
|
||||
@repo.insert! changeset
|
||||
end
|
||||
|
||||
def update(%Ecto.Changeset{} = changeset) do
|
||||
@repo.update changeset
|
||||
end
|
||||
|
||||
def update!(%Ecto.Changeset{} = changeset) do
|
||||
@repo.update! changeset
|
||||
end
|
||||
|
||||
def delete(schema) do
|
||||
@repo.delete schema
|
||||
end
|
||||
|
||||
def delete!(schema) do
|
||||
@repo.delete! schema
|
||||
end
|
||||
|
||||
end
|
||||
Reference in New Issue
Block a user