Current section
Files
Jump to
Current section
Files
lib/plug/verify_session_token.ex
defmodule KeycloakEx.VerifySessionToken do
import Plug.Conn
require Logger
def init(opts), do: opts
defp refresh_token(conn, t, client) do
case client.refresh_token(t) do
{:ok, refresh_token} ->
conn
|> put_session(:token, refresh_token.token)
{:error, err} ->
Logger.error("[VerifySessionToken:refresh_token] - #{inspect(err)}")
conn
|> Phoenix.Controller.redirect(external: client.authorize_url!())
|> halt()
end
end
defp check_token_state(t, conn, client) do
case client.introspect(t.access_token) do
{:ok, _resp} ->
conn
err ->
err
end
end
defp check_token(nil, conn, client) do
conn
|> Phoenix.Controller.redirect(external: client.authorize_url!())
|> halt()
end
defp check_token(t, conn, client) do
case OAuth2.AccessToken.expired?(t) do
false ->
# Token not expired verify that still valid
check_token_state(t, conn, client)
true ->
refresh_token(conn, t, client)
end
end
def call(conn, opts) do
get_session(conn, :token)
|> check_token(conn, opts[:client])
end
end