Separate token creation action into Hostas.Token
This commit is contained in:
parent
711353398c
commit
89eea2d4c1
|
@ -2,6 +2,14 @@ defmodule Hostas.Token do
|
||||||
use Ecto.Schema
|
use Ecto.Schema
|
||||||
import Ecto.Changeset
|
import Ecto.Changeset
|
||||||
|
|
||||||
|
alias Hostas.Token
|
||||||
|
alias Hostas.Repo
|
||||||
|
|
||||||
|
@doc """
|
||||||
|
The number of days a token lasts from the moment of its creation
|
||||||
|
"""
|
||||||
|
@duration_days 30
|
||||||
|
|
||||||
schema "tokens" do
|
schema "tokens" do
|
||||||
field :denizen_id, :integer
|
field :denizen_id, :integer
|
||||||
field :expires, :utc_datetime
|
field :expires, :utc_datetime
|
||||||
|
@ -19,4 +27,20 @@ defmodule Hostas.Token do
|
||||||
|> cast(attrs, [:denizen_id, :expires])
|
|> cast(attrs, [:denizen_id, :expires])
|
||||||
|> validate_required([:denizen_id, :expires])
|
|> validate_required([:denizen_id, :expires])
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@doc """
|
||||||
|
Creates a token
|
||||||
|
"""
|
||||||
|
def new(denizen_id) do
|
||||||
|
# Create a random token
|
||||||
|
token = Base.encode64(:crypto.strong_rand_bytes(256))
|
||||||
|
|
||||||
|
# Calculate the time of expiry
|
||||||
|
{:ok, time_now} = DateTime.now("Etc/UTC")
|
||||||
|
expiry = DateTime.add(time_now, @duration_days, :day)
|
||||||
|
|> DateTime.truncate(:second)
|
||||||
|
|
||||||
|
# Register the token
|
||||||
|
Repo.insert(changeset(%Token{}, %{denizen_id: denizen_id, token: token, expires: expiry}))
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -23,17 +23,7 @@ defmodule HostasWeb.Auth.TokenController do
|
||||||
%{id: denizen_id, password: real_password_hash} = denizen
|
%{id: denizen_id, password: real_password_hash} = denizen
|
||||||
|
|
||||||
if Bcrypt.verify_pass(given_password, real_password_hash) do
|
if Bcrypt.verify_pass(given_password, real_password_hash) do
|
||||||
# Create a random token
|
{:ok, token_struct} = Token.new(denizen_id)
|
||||||
token = Base.encode64(:crypto.strong_rand_bytes(256))
|
|
||||||
|
|
||||||
# Calculate when the token should expire
|
|
||||||
{:ok, time_now} = DateTime.now("Etc/UTC")
|
|
||||||
expiry = DateTime.add(time_now, 30, :day)
|
|
||||||
|> DateTime.truncate(:second)
|
|
||||||
|
|
||||||
# Register the token
|
|
||||||
{:ok, token_struct} = Repo.insert(
|
|
||||||
%Token{denizen_id: denizen_id, token: token, expires: expiry})
|
|
||||||
|
|
||||||
conn
|
conn
|
||||||
|> put_status(201)
|
|> put_status(201)
|
||||||
|
@ -47,7 +37,7 @@ defmodule HostasWeb.Auth.TokenController do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def create(conn, params) do
|
def create(conn, _params) do
|
||||||
conn
|
conn
|
||||||
|> put_status(422)
|
|> put_status(422)
|
||||||
|> json(%{"error" => "Missing required parameters"})
|
|> json(%{"error" => "Missing required parameters"})
|
||||||
|
|
Loading…
Reference in New Issue