diff options
| author | Adriano Sela Aviles <adriano@tailscale.com> | 2026-04-03 00:46:35 -0700 |
|---|---|---|
| committer | Adriano Sela Aviles <adriano@tailscale.com> | 2026-04-10 22:13:12 -0700 |
| commit | 1f6a4389b6dd64aff6e3fd8f5c6e61495fe00563 (patch) | |
| tree | af23385affa9c8f459bd9aa7f1efbd8d29913ff4 /ipn | |
| parent | 0e8ae9d60c92ec578bc0ff7c2be0334df6908c8b (diff) | |
| download | tailscale-adrianosela/visible-services.tar.xz tailscale-adrianosela/visible-services.zip | |
tailcfg,types/netmap: visible services in netmapadrianosela/visible-services
ipn/localapi: serve service list over localapi
cmd/tailscale: new service list command
Updates <FIXME(@adrianosela)>
Diffstat (limited to 'ipn')
| -rw-r--r-- | ipn/localapi/localapi.go | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/ipn/localapi/localapi.go b/ipn/localapi/localapi.go index 43942c52f..b06b69b04 100644 --- a/ipn/localapi/localapi.go +++ b/ipn/localapi/localapi.go @@ -82,6 +82,7 @@ var handler = map[string]LocalAPIHandler{ "prefs": (*Handler).servePrefs, "reload-config": (*Handler).reloadConfig, "reset-auth": (*Handler).serveResetAuth, + "services": (*Handler).serveServices, "set-expiry-sooner": (*Handler).serveSetExpirySooner, "shutdown": (*Handler).serveShutdown, "start": (*Handler).serveStart, @@ -1707,6 +1708,20 @@ func (h *Handler) serveShutdown(w http.ResponseWriter, r *http.Request) { eventbus.Publish[Shutdown](ec).Publish(Shutdown{}) } +func (h *Handler) serveServices(w http.ResponseWriter, r *http.Request) { + if r.Method != httpm.GET { + http.Error(w, "only GET allowed", http.StatusMethodNotAllowed) + return + } + nm := h.b.NetMap() + if nm == nil { + http.Error(w, "no netmap", http.StatusServiceUnavailable) + return + } + w.Header().Set("Content-Type", "application/json") + json.NewEncoder(w).Encode(nm.Services()) +} + func (h *Handler) serveGetAppcRouteInfo(w http.ResponseWriter, r *http.Request) { if !buildfeatures.HasAppConnectors { http.Error(w, feature.ErrUnavailable.Error(), http.StatusNotImplemented) |
