diff options
Diffstat (limited to 'http.go')
| -rw-r--r-- | http.go | 133 |
1 files changed, 133 insertions, 0 deletions
@@ -0,0 +1,133 @@ +package main + +import ( + "fmt" + "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) { + // dumpClient(accessf, clientf, r) + var tmp string + // tmp = r.URL.String() + tmp = cleanURL(r.URL.Path) + parts := strings.Split(tmp, "?") + log.Info("client sent url =", tmp) + log.Info("parts are:", parts) + requrl := parts[0] + + url, repourl := findkey(requrl) + log.Warn("gowebd URL =", url, "REPO URL =", repourl, "REQUEST URL =", requrl) + if repourl != "" { + repoHTML(w, url, repourl) + return + } + if tmp == "/" { + 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 tmp == "/install.sh" { + writeFile(w, "install.sh") + return + } + if tmp == "/me" { + j, err := dumpJsonClient(r) + if err != nil { + fmt.Fprintln(w, "BAD ZOOT") + return + } + fmt.Fprintln(w, j) + return + } + if tmp == "/register" { + regfile, _ := os.OpenFile("/home/jcarr/regfile.log", 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 tmp == "/goReference.svg" { + writeFile(w, "goReference.svg") + return + } + if tmp == "/skeleton.v2.css" { + writeFile(w, "skeleton.v2.css") + return + } + if tmp == "/favicon.ico" { + writeFile(w, "ipv6.png") + return + } + // used for uptime monitor checking + if tmp == "/uptime" { + writeFile(w, "uptime.html") + return + } + log.Warn("BAD URL =", url, "REPO URL =", repourl) + badurl(w, r.URL.String()) + // fmt.Fprintln(w, "BAD", tmp) +} + +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) + // w.Close() + /* + filename = "/tmp/" + name + ".so" + log.Error(err, "write out file here", name, filename, len(pfile)) + f, _ := os.OpenFile(filename, os.O_WRONLY|os.O_CREATE, 0600) + f.Close() + */ +} + +func badurl(w http.ResponseWriter, badurl string) { + fmt.Fprintln(w, "<!DOCTYPE html>") + fmt.Fprintln(w, "<html>") + fmt.Fprintln(w, " <head>") + fmt.Fprintln(w, " <meta http-equiv=\"refresh\" content=\"3; url=https://"+HOSTNAME+"/\">") + fmt.Fprintln(w, " </head>") + fmt.Fprintln(w, " <body>") + fmt.Fprintln(w, " IPv4 IS NOT SUPPORTED<br>") + fmt.Fprintln(w, " MANY OF THESE REPOS REQUIRE IPv6.<br>") + fmt.Fprintln(w, " <br>") + fmt.Fprintln(w, " bad url", badurl, "<a href=\"https://go.wit.com/\">redirecting</a>") + fmt.Fprintln(w, " </body>") + fmt.Fprintln(w, "</html>") +} |
