Packages

Magic admin Elixir SDK makes it easy to leverage Decentralized ID tokens to protect routes and restricted resources for your application.

Current section

Files

Jump to
magic_admin lib api.ex
Raw

lib/api.ex

defmodule Magic.API do
@moduledoc false
use Tesla
def get_user(issuer, opts \\ []) do
client(opts)
|> get("/v1/admin/auth/user/get", query: [issuer: issuer])
|> process_response()
end
def logout_user(issuer, opts \\ []) do
client(opts)
|> post("/v2/admin/auth/user/logout", %{issuer: issuer})
|> process_response()
end
defp client(opts \\ []) do
secret_key = Keyword.get(opts, :secret_key, Application.get_env(:magic_admin, :secret_key))
middleware = [
{Tesla.Middleware.BaseUrl, "https://api.magic.link"},
Tesla.Middleware.JSON,
{Tesla.Middleware.Headers,
[
{"X-Magic-Secret-Key", secret_key}
]}
]
Tesla.client(middleware)
end
defp process_response({:ok, %Tesla.Env{body: %{"status" => "ok", "data" => data}}}) do
{:ok, data |> map_keys_to_atoms()}
end
defp process_response({:ok, %Tesla.Env{body: %{"status" => "failed", "message" => message}}}) do
{:error, message}
end
defp process_response(_) do
{:error, "error constructing request"}
end
defp map_keys_to_atoms(map) do
map |> Map.new(fn {k, v} -> {String.to_atom(k), v} end)
end
end