towerops/lib/towerops_web/controllers/well_known_controller.ex

64 lines
1.8 KiB
Elixir

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