defmodule HonuWeb.Token do
# https://github.com/phoenixframework/phoenix/blob/master/lib/phoenix/token.ex
def sign(context, salt, data, opts \\ []) when is_binary(salt) do
context
|> get_key_base()
|> Plug.Crypto.sign(salt, data, opts)
end
def verify(context, salt, token, opts \\ []) when is_binary(salt) do
context
|> get_key_base()
|> Plug.Crypto.verify(salt, token, opts)
end
## Helpers
defp get_key_base(endpoint) when is_atom(endpoint),
do: get_endpoint_key_base(endpoint)
defp get_key_base(string) when is_binary(string) and byte_size(string) >= 20,
do: string
defp get_endpoint_key_base(endpoint) do
endpoint.config(:secret_key_base) ||
raise """
no :secret_key_base configuration found in #{inspect(endpoint)}.
Ensure your environment has the necessary mix configuration. For example:
config :my_app, MyAppWeb.Endpoint,
secret_key_base: ...
"""
end
end