func handleHTTP(router *weave.Router, httpAddr string) { encryption := "off" if router.UsingPassword() { encryption = "on" } muxRouter := mux.NewRouter() muxRouter.Methods("GET").Path("/status").HandlerFunc(func(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "weave router", version) fmt.Fprintln(w, "Encryption", encryption) fmt.Fprintln(w, router.Status()) }) muxRouter.Methods("GET").Path("/status-json").HandlerFunc(func(w http.ResponseWriter, r *http.Request) { json, _ := router.GenerateStatusJSON(version, encryption) w.Write(json) }) muxRouter.Methods("POST").Path("/connect").HandlerFunc(func(w http.ResponseWriter, r *http.Request) { if err := router.ConnectionMaker.InitiateConnection(r.FormValue("peer")); err != nil { http.Error(w, fmt.Sprint("invalid peer address: ", err), http.StatusBadRequest) } }) muxRouter.Methods("POST").Path("/forget").HandlerFunc(func(w http.ResponseWriter, r *http.Request) { router.ConnectionMaker.ForgetConnection(r.FormValue("peer")) }) http.Handle("/", muxRouter) protocol := "tcp" if strings.HasPrefix(httpAddr, "/") { os.Remove(httpAddr) // in case it's there from last time protocol = "unix" } l, err := net.Listen(protocol, httpAddr) if err != nil { log.Fatal("Unable to create http listener socket: ", err) } err = http.Serve(l, nil) if err != nil { log.Fatal("Unable to create http server", err) } }