diff --git a/src/api/http/api.go b/src/api/http/api.go index febfa67fd0..be99a80a5a 100644 --- a/src/api/http/api.go +++ b/src/api/http/api.go @@ -82,7 +82,6 @@ func (self *HttpServer) Serve(listener net.Listener) { self.registerEndpoint(p, "del", "/db/:name", self.dropDatabase) // cluster admins management interface - self.registerEndpoint(p, "get", "/cluster_admins", self.listClusterAdmins) self.registerEndpoint(p, "get", "/cluster_admins/authenticate", self.authenticateClusterAdmin) self.registerEndpoint(p, "post", "/cluster_admins", self.createClusterAdmin) @@ -98,6 +97,9 @@ func (self *HttpServer) Serve(listener net.Listener) { self.registerEndpoint(p, "post", "/db/:db/admins/:user", self.setDbAdmin) self.registerEndpoint(p, "del", "/db/:db/admins/:user", self.unsetDbAdmin) + // fetch current list of available interfaces + self.registerEndpoint(p, "get", "/interfaces", self.listInterfaces) + if err := libhttp.Serve(listener, p); err != nil && !strings.Contains(err.Error(), "closed network") { panic(err) } @@ -858,3 +860,21 @@ func (self *HttpServer) commonSetDbAdmin(w libhttp.ResponseWriter, r *libhttp.Re return libhttp.StatusOK, nil }) } + +func (self *HttpServer) listInterfaces(w libhttp.ResponseWriter, r *libhttp.Request) { + self.tryAsDbUserAndClusterAdmin(w, r, func(u common.User) (int, interface{}) { + entries, err := ioutil.ReadDir("admin/interfaces") + + if err != nil { + return errorToStatusCode(err), err.Error() + } + + directories := make([]string, 0, len(entries)) + for _, entry := range entries { + if entry.IsDir() { + directories = append(directories, entry.Name()) + } + } + return libhttp.StatusOK, directories + }) +}