You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
30 lines
745 B
Elixir
30 lines
745 B
Elixir
7 years ago
|
defmodule Asciinema.Accounts.ApiToken do
|
||
7 years ago
|
use Ecto.Schema
|
||
|
import Ecto.Changeset
|
||
7 years ago
|
alias Asciinema.Accounts.{ApiToken, User}
|
||
7 years ago
|
|
||
|
schema "api_tokens" do
|
||
|
field :token, :string
|
||
|
field :revoked_at, Timex.Ecto.DateTime
|
||
|
|
||
|
timestamps(inserted_at: :created_at)
|
||
|
|
||
7 years ago
|
belongs_to :user, User
|
||
7 years ago
|
end
|
||
|
|
||
|
@uuid4 ~r/\A[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}\z/
|
||
|
|
||
|
def create_changeset(%User{id: user_id}, token) do
|
||
|
%ApiToken{user_id: user_id}
|
||
|
|> change(%{token: token})
|
||
|
|> validate_format(:token, @uuid4)
|
||
|
end
|
||
|
|
||
|
def revoke_changeset(%ApiToken{revoked_at: nil} = api_token) do
|
||
|
change(api_token, %{revoked_at: Timex.now()})
|
||
|
end
|
||
|
def revoke_changeset(%ApiToken{} = api_token) do
|
||
|
change(api_token)
|
||
|
end
|
||
|
end
|