Adds WellKnownController with 6 public, no-auth endpoints: api-catalog, openid-configuration, oauth-authorization-server, oauth-protected-resource, mcp/server-card.json, and agent-skills/index.json.
84 lines
2.2 KiB
Elixir
84 lines
2.2 KiB
Elixir
defmodule ToweropsWeb.WellKnownController do
|
|
@moduledoc false
|
|
|
|
use ToweropsWeb, :controller
|
|
|
|
def api_catalog(conn, _params) do
|
|
base_url = ToweropsWeb.Endpoint.url()
|
|
|
|
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
|
|
base_url = ToweropsWeb.Endpoint.url()
|
|
|
|
json(conn, %{
|
|
"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
|
|
|
|
def oauth_authorization_server(conn, _params) do
|
|
base_url = ToweropsWeb.Endpoint.url()
|
|
|
|
json(conn, %{
|
|
"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
|
|
|
|
def oauth_protected_resource(conn, _params) do
|
|
base_url = ToweropsWeb.Endpoint.url()
|
|
|
|
json(conn, %{
|
|
"resource" => "#{base_url}/api/v1",
|
|
"authorization_servers" => [base_url],
|
|
"scopes_supported" => ["read", "write"]
|
|
})
|
|
end
|
|
|
|
def mcp_server_card(conn, _params) do
|
|
base_url = ToweropsWeb.Endpoint.url()
|
|
|
|
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
|
|
end
|