Current section

Files

Jump to
keycloak_ex lib plug verify_session_token.ex
Raw

lib/plug/verify_session_token.ex

defmodule KeycloakEx.VerifySessionToken do
import Plug.Conn
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} ->
conn
|> send_resp(403, Jason.encode!(%{error: "Access Denied"}))
|> halt()
end
end
defp check_token(nil, conn, client) do
conn
|> Phoenix.Controller.redirect(external: client.authorize_url!())
end
defp check_token_state(t, conn, client) do
case client.get_token_state(t) do
{:ok, resp} ->
conn
err ->
err
end
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