defmodule ToweropsWeb.WellKnownController do @moduledoc false use ToweropsWeb, :controller def api_catalog(conn, _params) do conn |> put_resp_content_type("application/linkset+json") |> json(%{ "linkset" => [ %{ "anchor" => "#{base_url()}/api/v1", "service-doc" => [%{"href" => "#{base_url()}/docs/api"}], "service-desc" => [%{"href" => "#{base_url()}/docs/api", "type" => "text/html"}], "status" => [%{"href" => "#{base_url()}/health"}] } ] }) end def openid_configuration(conn, _params) do json(conn, oauth_server_metadata()) end def oauth_authorization_server(conn, _params) do json(conn, oauth_server_metadata()) end def oauth_protected_resource(conn, _params) do json(conn, %{ "resource" => "#{base_url()}/api/v1", "authorization_servers" => [base_url()], "scopes_supported" => ["read", "write"] }) end def mcp_server_card(conn, _params) do json(conn, %{ "serverInfo" => %{"name" => "TowerOps", "version" => "1.0.0"}, "transport" => %{"endpoint" => "#{base_url()}/mcp"}, "capabilities" => %{"tools" => %{}, "resources" => %{}, "prompts" => %{}} }) end def agent_skills(conn, _params) do json(conn, %{ "$schema" => "https://schemas.agentskills.io/discovery/0.2.0/schema.json", "skills" => [] }) end defp base_url, do: ToweropsWeb.Endpoint.url() defp oauth_server_metadata do %{ "issuer" => base_url(), "authorization_endpoint" => "#{base_url()}/oauth/authorize", "token_endpoint" => "#{base_url()}/oauth/token", "jwks_uri" => "#{base_url()}/.well-known/jwks.json", "grant_types_supported" => ["authorization_code"], "response_types_supported" => ["code"] } end end