39 lines
987 B
Elixir
39 lines
987 B
Elixir
defmodule SsoBsnWeb.Oauth.TokenController do
|
|
@behaviour Boruta.Oauth.TokenApplication
|
|
|
|
use SsoBsnWeb, :controller
|
|
|
|
alias Boruta.Oauth.Error
|
|
alias Boruta.Oauth.TokenResponse
|
|
|
|
def oauth_module, do: Application.get_env(:sso_bsn, :oauth_module, Boruta.Oauth)
|
|
|
|
def token(%Plug.Conn{} = conn, _params) do
|
|
conn |> oauth_module().token(__MODULE__)
|
|
end
|
|
|
|
@impl Boruta.Oauth.TokenApplication
|
|
def token_success(conn, %TokenResponse{} = response) do
|
|
conn
|
|
|> put_resp_header("pragma", "no-cache")
|
|
|> put_resp_header("cache-control", "no-store")
|
|
|> json(
|
|
Enum.filter(
|
|
response,
|
|
fn
|
|
{_key, nil} -> false
|
|
_ -> true
|
|
end
|
|
)
|
|
|> Enum.into(%{})
|
|
)
|
|
end
|
|
|
|
@impl Boruta.Oauth.TokenApplication
|
|
def token_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
|