Add endpoint for listing available admin interfaces.

pull/82/head
Todd Persen 2013-11-29 15:47:22 -05:00
parent 9d88a583fe
commit d964545c6f
1 changed files with 21 additions and 1 deletions

View File

@ -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
})
}