Current section

Files

Jump to
ash_json_api lib ash_json_api controllers open_api.ex
Raw

lib/ash_json_api/controllers/open_api.ex

if Code.ensure_loaded?(OpenApiSpex) do
defmodule AshJsonApi.Controllers.OpenApi do
@moduledoc false
def init(options) do
options
end
# sobelow_skip ["XSS.SendResp"]
def call(conn, opts) do
prefix =
conn.request_path
|> Path.split()
|> Enum.reverse()
|> Enum.drop(Enum.count(conn.path_info))
|> Enum.reverse()
|> case do
[] -> "/"
paths -> Path.join(paths)
end
spec =
conn
|> spec(Keyword.put(opts, :prefix, prefix))
|> Jason.encode!(pretty: true)
conn
|> Plug.Conn.send_resp(200, spec)
|> Plug.Conn.halt()
end
@doc false
def spec(conn, opts) do
phoenix_endpoint = opts[:phoenix_endpoint] || conn.private[:phoenix_endpoint]
opts
|> Keyword.put(:phoenix_endpoint, phoenix_endpoint)
|> AshJsonApi.OpenApi.spec(conn)
end
end
end