add options http method on all endpoints.

pull/17/head
John Shahid 2013-10-24 15:46:05 -04:00
parent cfeb27ee03
commit ecc2df164a
1 changed files with 27 additions and 11 deletions

View File

@ -41,31 +41,43 @@ func (self *HttpServer) ListenAndServe() {
self.Serve(conn) self.Serve(conn)
} }
func (self *HttpServer) registerEndpoint(p *pat.PatternServeMux, method string, pattern string, f libhttp.HandlerFunc) {
switch method {
case "get":
p.Get(pattern, CorsHeaderHandler(f))
case "post":
p.Post(pattern, CorsHeaderHandler(f))
case "del":
p.Del(pattern, CorsHeaderHandler(f))
}
p.Options(pattern, CorsHeaderHandler(self.sendCrossOriginHeader))
}
func (self *HttpServer) Serve(listener net.Listener) { func (self *HttpServer) Serve(listener net.Listener) {
self.conn = listener self.conn = listener
p := pat.New() p := pat.New()
// Run the given query and return an array of series or a chunked response // Run the given query and return an array of series or a chunked response
// with each batch of points we get back // with each batch of points we get back
p.Get("/db/:db/series", CorsHeaderHandler(self.query)) self.registerEndpoint(p, "get", "/db/:db/series", self.query)
// Write points to the given database // Write points to the given database
p.Post("/db/:db/series", CorsHeaderHandler(self.writePoints)) self.registerEndpoint(p, "post", "/db/:db/series", self.writePoints)
p.Post("/db", CorsHeaderHandler(self.createDatabase)) self.registerEndpoint(p, "post", "/db", self.createDatabase)
// cluster admins management interface // cluster admins management interface
p.Post("/cluster_admins", CorsHeaderHandler(self.createClusterAdmin)) self.registerEndpoint(p, "post", "/cluster_admins", self.createClusterAdmin)
p.Post("/cluster_admins/:user", CorsHeaderHandler(self.updateClusterAdmin)) self.registerEndpoint(p, "post", "/cluster_admins/:user", self.updateClusterAdmin)
p.Del("/cluster_admins/:user", CorsHeaderHandler(self.deleteClusterAdmin)) self.registerEndpoint(p, "del", "/cluster_admins/:user", self.deleteClusterAdmin)
// db users management interface // db users management interface
p.Post("/db/:db/users", CorsHeaderHandler(self.createDbUser)) self.registerEndpoint(p, "post", "/db/:db/users", self.createDbUser)
p.Del("/db/:db/users/:user", CorsHeaderHandler(self.deleteDbUser)) self.registerEndpoint(p, "del", "/db/:db/users/:user", self.deleteDbUser)
p.Post("/db/:db/users/:user", CorsHeaderHandler(self.updateDbUser)) self.registerEndpoint(p, "post", "/db/:db/users/:user", self.updateDbUser)
p.Post("/db/:db/admins/:user", CorsHeaderHandler(self.setDbAdmin)) self.registerEndpoint(p, "post", "/db/:db/admins/:user", self.setDbAdmin)
p.Del("/db/:db/admins/:user", CorsHeaderHandler(self.unsetDbAdmin)) self.registerEndpoint(p, "del", "/db/:db/admins/:user", self.unsetDbAdmin)
if err := libhttp.Serve(listener, p); err != nil && !strings.Contains(err.Error(), "closed network") { if err := libhttp.Serve(listener, p); err != nil && !strings.Contains(err.Error(), "closed network") {
panic(err) panic(err)
@ -155,6 +167,10 @@ func TimePrecisionFromString(s string) (TimePrecision, error) {
return 0, fmt.Errorf("Unknown time precision %s", s) return 0, fmt.Errorf("Unknown time precision %s", s)
} }
func (self *HttpServer) sendCrossOriginHeader(w libhttp.ResponseWriter, r *libhttp.Request) {
w.WriteHeader(libhttp.StatusOK)
}
func (self *HttpServer) query(w libhttp.ResponseWriter, r *libhttp.Request) { func (self *HttpServer) query(w libhttp.ResponseWriter, r *libhttp.Request) {
query := r.URL.Query().Get("q") query := r.URL.Query().Get("q")
db := r.URL.Query().Get(":db") db := r.URL.Query().Get(":db")