gus/http.go

99 lines
1.8 KiB
Go

// 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"
"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")
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)
}
startHTTP()
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)
}
}