Current section

Files

Jump to
noa lib noa_web controllers token revoke_controller.ex
Raw

lib/noa_web/controllers/token/revoke_controller.ex

defmodule NoaWeb.RevokeController do
@moduledoc false
use NoaWeb, :controller
action_fallback NoaWeb.FallbackController
alias Noa.Actors.{Registrar}
alias NoaWeb.{TokenUtils}
def revoke(conn, %{} = attrs) do
noa_ctxt = Map.get(conn.assigns, :noa_ctxt)
stub = Map.get(attrs, "token", "")
token_type = Map.get(attrs, "token_type_hint", "access_token")
with {:ok, token} <- TokenUtils.get_validated_token(stub, token_type),
:ok <- TokenUtils.check_validity_period(token),
:ok <- TokenUtils.check_revocation_status(token),
:ok <- check_mismatched_token(token, noa_ctxt)
do
Registrar.revoke(token)
conn |> put_status(200) |> json(%{"revoked" => true})
else
_e -> conn |> put_status(200) |> json(%{"revoked" => true})
end
rescue
e -> {:error, :server_error, "#{inspect e}"}
end
defp check_mismatched_token(%{provider_id: id}, %{provider: %{id: id}}), do: :ok
defp check_mismatched_token(_, _), do: {:error, :invalid_token, "mismatch"}
end