defmodule SsoBsnWeb.Oauth.IntrospectController do @behaviour Boruta.Oauth.IntrospectApplication use SsoBsnWeb, :controller alias Boruta.Oauth.Error alias Boruta.Oauth.IntrospectResponse alias SsoBsnWeb.OauthView def oauth_module, do: Application.get_env(:sso_bsn, :oauth_module, Boruta.Oauth) def introspect(%Plug.Conn{} = conn, _params) do conn |> oauth_module().introspect(__MODULE__) end @impl Boruta.Oauth.IntrospectApplication def introspect_success(conn, %IntrospectResponse{} = response) do conn |> put_view(OauthView) |> introspect(response: response) end def introspect(%{ response: %IntrospectResponse{ active: active, client_id: client_id, username: username, scope: scope, sub: sub, iss: iss, exp: exp, iat: iat } }) do case active do true -> %{ active: true, client_id: client_id, username: username, scope: scope, sub: sub, iss: iss, exp: exp, iat: iat } false -> %{active: false} end end @impl Boruta.Oauth.IntrospectApplication def introspect_error(conn, %Error{ status: status, error: error, error_description: error_description }) do conn |> put_status(status) |> json(%{error: error, error_description: error_description}) end end