Packages
guardian
0.8.0
2.4.0
2.3.2
2.3.1
2.3.0
2.2.4
2.2.3
2.2.2
2.2.1
2.2.0
2.1.2
2.1.1
2.0.0
1.2.1
1.2.0
retired
1.1.1
1.1.0
1.0.1
1.0.0
1.0.0-beta.1
1.0.0-beta.0
0.14.6
0.14.5
0.14.4
0.14.3
retired
0.14.2
0.14.1
0.14.0
0.13.0
0.12.0
0.11.1
0.10.1
0.10.0
0.9.1
0.9.0
0.8.1
0.8.0
0.7.4
0.7.2
0.7.1
0.7.0
0.6.3
0.6.2
0.6.1
0.6.0
0.5.2
0.5.0
0.4.1
0.4.0
0.3.1
0.3.0
0.2.0
0.1.1
0.1.0
Elixir Authentication framework
Current section
Files
Jump to
Current section
Files
lib/guardian/claims.ex
defmodule Guardian.Claims do
@moduledoc false
import Guardian.Utils
@doc false
def app_claims, do: %{ "iss" => Guardian.issuer } |> iat |> ttl |> jti
@doc false
def app_claims(existing_claims) do
Map.merge(app_claims, Enum.into(existing_claims, %{}))
end
@doc """
Encodes permissions into the claims set. Permissions are stored at the :pem key
as a map of <type> => <value as int>
"""
def permissions(claims, permissions) do
perms = Enum.into(%{}, permissions)
|> Enum.reduce(%{}, fn({key, list}, acc) ->
Map.put(acc, to_string(key), Guardian.Permissions.to_value(list, key))
end)
Map.put(claims, "pem", perms)
end
@doc false
def aud(claims, nil), do: aud(claims, "token")
@doc false
def aud(claims, audience) when is_atom(audience), do: aud(claims, to_string(audience))
@doc false
def aud(claims, audience), do: Map.put(claims, "aud", audience)
@doc false
def sub(claims, subject) when is_atom(subject), do: sub(claims, to_string(subject))
@doc false
def sub(claims, subject), do: Map.put(claims, "sub", subject)
@doc false
def jti(claims), do: jti(claims, UUID.uuid4)
@doc false
def jti(claims, id) when is_atom(id), do: sub(claims, to_string(id))
@doc false
def jti(claims, id), do: Map.put(claims, "jti", id)
@doc false
def nbf(claims), do: Map.put(claims, "nbf", timestamp - 1)
@doc false
def nbf(claims, ts), do: Map.put(claims, "nbf", ts)
@doc false
def iat(claims), do: Map.put(claims, "iat", timestamp)
@doc false
def iat(claims, ts), do: Map.put(claims, "iat", ts)
@doc false
def ttl(claims = %{ ttl: requested_ttl }) do
claims
|> Map.delete(:ttl)
|> ttl(requested_ttl)
end
@doc false
def ttl(claims), do: ttl(claims, Guardian.config(:ttl, { 1_000_000_000, :seconds }))
@doc false
def ttl(claims = %{"iat" => iat}, requested_ttl) do
case { iat, requested_ttl } do
{ nil, _ } -> Map.put_new(claims, timestamp + 1_000_000_000)
{ iat, { seconds, :seconds } } -> Map.put(claims, "exp", iat + seconds)
{ iat, { seconds, :second } } -> Map.put(claims, "exp", iat + seconds)
{ iat, { millis, :millis } } -> Map.put(claims, "exp", iat + millis / 1000)
{ iat, { millis, :milli } } -> Map.put(claims, "exp", iat + millis / 1000)
{ iat, { minutes, :minutes } } -> Map.put(claims, "exp", iat + minutes * 60)
{ iat, { minutes, :minute } } -> Map.put(claims, "exp", iat + minutes * 60)
{ iat, { hours, :hours } } -> Map.put(claims, "exp", iat + hours * 60 * 60)
{ iat, { hours, :hour } } -> Map.put(claims, "exp", iat + hours * 60 * 60)
{ iat, { days, :days } } -> Map.put(claims, "exp", iat + days * 24 * 60 * 60)
{ iat, { days, :day } } -> Map.put(claims, "exp", iat + days * 24 * 60 * 60)
_ -> claims
end
end
@doc false
def ttl(claims, requested_ttl), do: claims |> iat |> ttl(requested_ttl)
end