// Copyright 2017-2025 WIT.COM Inc. All rights reserved. // Use of this source code is governed by the GPL 3.0 package main import ( "fmt" "io/ioutil" "net/http" "os" "strconv" "strings" "go.wit.com/log" ) // remove '?' part and trailing '/' func cleanURL(url string) string { url = "/" + strings.Trim(url, "/") return url } func okHandler(w http.ResponseWriter, r *http.Request) { log.Info("Got URL Path: ", r.URL.Path) route := cleanURL(r.URL.Path) // domname := r.URL.Query().Get("domain") flag := r.URL.Query().Get("flag") port := r.URL.Query().Get("port") dest := r.URL.Query().Get("dest") msg, err := ioutil.ReadAll(r.Body) // Read the body as []byte if err != nil { fmt.Fprintln(w, "ReadAll() error =", err) return } log.Info("Got URL msg:", string(msg)) if route == "/" { fmt.Fprintln(w, "OK") return } // exit gus if route == "/kill" { log.Warn("KILLED") fmt.Fprintln(w, "KILLED") os.Exit(-1) return } /* if route == "/list" { all := me.portmaps.All() for all.Scan() { pm := all.Next() if !pm.Enabled { continue } s := fmt.Sprintf("portmap enabled for port %d to %s", pm.Listen, pm.Connect) log.Info(s) fmt.Fprintln(w, s) } return } */ if route == "/save" { log.Info("event log is len =", me.events.Len()) me.events.Save() return } if route == "/enable" { log.HttpMode(w) defer log.HttpMode(nil) num, _ := strconv.Atoi(port) log.Info("enable port =", num, "dest =", dest) enablePort(num, dest) return } if route == "/disable" { log.HttpMode(w) defer log.HttpMode(nil) num, _ := strconv.Atoi(port) log.Info("disable port =", num, "dest =", dest) return } // toggle logging flags if route == "/flag" { log.HttpMode(w) defer log.HttpMode(nil) log.Info("going to toggle flag:", flag) switch flag { case "PING": if PING.Enabled() { log.Log(NOW, "toogle PING false") PING.SetBool(false) } else { log.Log(NOW, "toogle PING true") PING.SetBool(true) } default: log.Info("unknown looging flag:", flag) } return } log.Warn("BAD URL =", route) } // starts and sits waiting for HTTP requests func startHTTP() { http.HandleFunc("/", okHandler) p := fmt.Sprintf(":%d", argv.Port) log.Println("Running on port", p) err := http.ListenAndServe(p, nil) if err != nil { log.Println("Error starting server:", err) } }