oauth/oidc
This commit is contained in:
64
lib/sso_bsn_web/controllers/oauth/introspect_controller.ex
Normal file
64
lib/sso_bsn_web/controllers/oauth/introspect_controller.ex
Normal file
@@ -0,0 +1,64 @@
|
||||
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
|
||||
Reference in New Issue
Block a user