Files
sso-bsn/lib/sso_bsn_web/controllers/oauth/introspect_controller.ex
bluepython508 e57fdfcb3f WIP: oauth/oidc
2023-11-07 20:28:46 +00:00

65 lines
1.4 KiB
Elixir

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