Packages
boruta
3.0.0-beta.3
3.0.0-beta.4
3.0.0-beta.3
3.0.0-beta.2
3.0.0-beta.1
2.3.6
2.3.5
2.3.4
2.3.3
2.3.2
2.3.1
2.3.0
2.2.2
2.2.1
2.2.0
2.1.5
2.1.4
2.1.3
2.1.2
2.1.1
2.1.0
2.0.1
2.0.0
2.0.0-rc.1
2.0.0-rc.0
1.2.1
1.2.0
1.1.0
1.0.3
1.0.2
1.0.1
1.0.0
1.0.0-rc.3
1.0.0-rc.2
1.0.0-rc.1
1.0.0-rc.0
0.2.1
0.2.0
0.1.1
0.1.0
0.1.0-rc.5
0.1.0-rc.4
0.1.0-rc.3
0.1.0-rc.2
0.1.0-rc.1
Core of an OAuth/OpenID Connect provider enabling authorization in your applications.
Current section
Files
Jump to
Current section
Files
lib/boruta/adapters/ecto/admin/tokens.ex
defmodule Boruta.Ecto.Admin.Tokens do
@moduledoc """
`Boruta.Ecto.Token` resource administration
"""
import Boruta.Config, only: [repo: 0]
import Ecto.Query, warn: false
alias Boruta.Ecto.Token
@doc """
Returns all active tokens given `Ecto.Queryable` (defaults to all).
## Examples
iex> list_active_tokens()
[%Token{}, ...]
"""
@spec list_active_tokens() :: active_tokens :: list(Token.t())
@spec list_active_tokens(queryable :: Ecto.Queryable.t()) :: active_tokens :: list(Token.t())
def list_active_tokens(queryable \\ Token) do
queryable
|> active_tokens_query()
|> repo().all()
end
@spec delete_inactive_tokens() ::
{number_of_deleted_tokens :: integer(), nil}
@spec delete_inactive_tokens(until :: DateTime.t()) ::
{number_of_deleted_tokens :: integer(), nil}
def delete_inactive_tokens(until \\ DateTime.utc_now()) do
until = DateTime.to_unix(until)
from(t in Token, as: :parent)
|> where([t], t.expires_at < ^until)
|> where(
[parent: t],
not exists(active_tokens_query() |> where([t], parent_as(:parent).id == t.id))
)
|> repo().delete_all()
end
defp active_tokens_query(queryable \\ Token) do
now = :os.system_time(:seconds)
queryable
|> where([t], t.expires_at >= ^now)
|> where([t], is_nil(t.revoked_at))
end
end