/* Copyright © 2022 Seednode */ package cmd import ( "fmt" "io" "log" "net/http" "os" "strconv" "strings" ) func generateHeader() string { htmlHeader := ` OUI Lookup ` return htmlHeader } func generateFooter() string { htmlFooter := ` ` return htmlFooter } func generatePageRaw(w http.ResponseWriter, output []string) { w.Header().Add("Content-Type", "text/plain") for i := 0; i < len(output); i++ { if Verbose { fmt.Println(output[i]) } _, err := io.WriteString(w, output[i]+"\n") if err != nil { fmt.Println(err) } } } func generatePageHtml(w http.ResponseWriter, output []string) { w.Header().Add("Content-Type", "text/html") _, err := io.WriteString(w, generateHeader()) if err != nil { fmt.Println(err) } for i := 0; i < len(output); i++ { if Verbose { fmt.Println(output[i]) } _, err = io.WriteString(w, " "+output[i]+"
\n") if err != nil { fmt.Println(err) } } _, err = io.WriteString(w, generateFooter()) if err != nil { fmt.Println(err) } } func generatePageHelp(r *http.Request, w http.ResponseWriter) { w.Header().Add("Content-Type", "text/html") _, err := io.WriteString(w, generateHeader()) if err != nil { fmt.Println(err) } exampleHtmlUrl := fmt.Sprintf("http://%v/7C:0E:CE:FE:FE:FE,10:FE:ED:AB:AB:AB", r.Host) exampleRawUrl := fmt.Sprintf("http://%v/raw/7C:0E:CE:FE:FE:FE,10:FE:ED:AB:AB:AB", r.Host) exampleJsonUrl := fmt.Sprintf("http://%v/json/7C:0E:CE:FE:FE:FE,10:FE:ED:AB:AB:AB", r.Host) help := fmt.Sprintf(" Provide one or more MAC addresses, separated by commas.
\n For example: %v", exampleHtmlUrl, exampleHtmlUrl) help += fmt.Sprintf("

\n Also supports plain text responses.
\n For example: %v", exampleRawUrl, exampleRawUrl) help += fmt.Sprintf("

\n And JSON responses, of course.
\n For example: %v", exampleJsonUrl, exampleJsonUrl) _, err = io.WriteString(w, help) if err != nil { fmt.Println(err) } _, err = io.WriteString(w, generateFooter()) if err != nil { fmt.Println(err) } } func servePageHandler() http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { var ouis []string oui := r.RequestURI if oui == "" { generatePageHelp(r, w) return } args := strings.Split(oui, ",") for i := 0; i < len(args); i++ { ouis = append(ouis, args[i]) } var output []string generatePageHtml(w, output) } } func doNothing(http.ResponseWriter, *http.Request) {} func ServePage(args []string) { fileList := getFileList(args) fileName, filePath := pickFile(fileList) fmt.Println(fileName) fmt.Println(filePath) os.Exit(0) defer HandleExit() http.HandleFunc("/", servePageHandler()) http.HandleFunc("/favicon.ico", doNothing) port := strconv.Itoa(Port) log.Fatal(http.ListenAndServe(":"+port, nil)) }