Current section
Files
Jump to
Current section
Files
lib/noa_web/controllers/authorize/az_controller.ex
defmodule NoaWeb.AuthorizeController do
@moduledoc false
use NoaWeb, :controller
action_fallback NoaWeb.FallbackController
import NoaWeb.Router.Helpers, only: [consent_path: 3]
alias NoaWeb.AuthorizeReq
def authorize(conn, %{} = params) do
noa_ctxt = Map.get(conn.assigns, :noa_ctxt)
cs = AuthorizeReq.authorize_cs(params, noa_ctxt)
if cs.valid? do
consent_state = gen_consent_state()
provider = noa_ctxt[:provider]
consent_uri = consent_path(NoaWeb.Endpoint, :show_consent, provider.id)
conn
|> fetch_session()
|> configure_session(renew: true)
|> put_session("x-noa-authz-req-data", cs.changes)
|> put_session("x-noa-az-stage", "consent")
|> put_session("x-noa-az-state-consent", consent_state)
|> redirect(to: consent_uri <> "?state=#{consent_state}")
else
# TODO: proper error handling
{:error, cs}
end
end
defp gen_consent_state(), do: :crypto.strong_rand_bytes(30) |> Base.url_encode64()
end