defmodule AccessToken do @moduledoc """ Access token generator. """ @default_length 64 @doc """ Generates a random access token with URL and filename safe alphabet. iex> AccessToken.generate() "MPjl2Y5AkvtP30rFb3ABRwkYNWsuRhJXkRQLhjaweqsC7H4fg8H2UmY5RpOkbO05" iex> AccessToken.generate(20) "XpT7OoqccDKg8Oa14B5w" """ @spec generate(integer) :: String.t() def generate(length \\ @default_length) do :crypto.strong_rand_bytes(length) |> Base.url_encode64(padding: false) |> String.slice(0, length) end end