package main import ( "fmt" "io/ioutil" "net/http" "os" "path/filepath" "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) { msg, err := ioutil.ReadAll(r.Body) // Read the body as []byte if err != nil { log.Info("ioutil.ReadAll() error =", err) return } // fmt.Fprintln(w, "ioutil.ReadAll() msg =", len(msg)) // dumpClient(accessf, clientf, r) var route string // tmp = r.URL.String() route = cleanURL(r.URL.Path) parts := strings.Split(route, "?") log.Info("client sent url =", route, parts) requrl := parts[0] url, repourl := findkey(requrl) log.Warn("gowebd URL =", url, "REPO URL =", repourl, "REQUEST URL =", requrl, "msg =", len(msg)) if repourl != "" { repoHTML(w, url, repourl) return } if route == "/" { indexHeader(w) indexBodyStart(w) indexBodyScanConfig(w) indexDivEnd(w) pfile, err := os.ReadFile(FOOTER) if err == nil { fmt.Fprint(w, string(pfile)) } else { log.Warn(err, "no footer file found in", FOOTER) log.Warn("falling back to the resources/footer.html") writeFile(w, "footer.html") } indexBodyEnd(w) return } if route == "/install.sh" { writeFile(w, "install.sh") return } if route == "/me" { j, err := dumpJsonClient(r) if err != nil { fmt.Fprintln(w, "BAD ZOOT") return } fmt.Fprintln(w, j) return } if route == "/register" { fname := filepath.Join(LIBDIR, "regfile.log") regfile, _ := os.OpenFile(fname, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666) if registerClient(regfile, r) { fmt.Fprintln(w, "OK") } else { fmt.Fprintln(w, "FAILED") } return } if route == "/patchset" { savePatchset(w, msg) return } if route == "/patchsetlist" { listPatchsets(w) return } if route == "/patchsetget" { filename := r.URL.Query().Get("filename") getPatchset(w, filename) return } if route == "/goReference.svg" { writeFile(w, "goReference.svg") return } if route == "/skeleton.v2.css" { writeFile(w, "skeleton.v2.css") return } if route == "/favicon.ico" { writeFile(w, "ipv6.png") return } // used for uptime monitor checking if route == "/uptime" { writeFile(w, "uptime.html") return } log.Warn("BAD URL =", url, "REPO URL =", repourl) badurl(w, r.URL.String()) } func writeFile(w http.ResponseWriter, filename string) { // fmt.Fprintln(w, "GOT TEST?") fullname := "resources/" + filename pfile, err := resources.ReadFile(fullname) if err != nil { log.Println("ERROR:", err) // w.Write(pfile) return } var repohtml string repohtml = string(pfile) if filename == "goReference.svg" { w.Header().Set("Content-Type", "image/svg+xml") } fmt.Fprintln(w, repohtml) log.Println("writeFile() found internal file:", filename) } func badurl(w http.ResponseWriter, badurl string) { fmt.Fprintln(w, "") fmt.Fprintln(w, "") fmt.Fprintln(w, "
") fmt.Fprintln(w, " ") fmt.Fprintln(w, " ") fmt.Fprintln(w, " ") fmt.Fprintln(w, " IPv4 IS NOT SUPPORTED