You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

56 lines
1.4 KiB

package main
import (
"bytes"
"flag"
"io"
"log"
"net/http"
"strings"
"time"
)
type Config struct {
PrinterHostname string
Port string
}
func main() {
var hostname string
flag.StringVar(&hostname, "hostname", "localhost", "Hostname the Prusa Connect API is available at (assumes http)")
var port string
flag.StringVar(&port, "port", "3000", "Local port to run server on")
flag.Parse()
config := Config{
PrinterHostname: "http://" + hostname,
Port: port,
}
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
if r.URL.Path == "index.html" || r.URL.Path == "/" {
http.ServeFile(w, r, "./static/")
} else if strings.HasSuffix(r.URL.Path, ".js") {
http.ServeFile(w, r, "./static/"+r.URL.Path)
} else if strings.HasSuffix(r.URL.Path, ".css") {
http.ServeFile(w, r, "./static/"+r.URL.Path)
} else if strings.HasSuffix(r.URL.Path, ".ico") {
http.ServeFile(w, r, "./static/"+r.URL.Path)
} else if strings.HasPrefix(r.URL.Path, "/api") {
resp, err := http.Get(config.PrinterHostname + r.URL.Path)
if err != nil {
log.Println(err)
http.NotFoundHandler().ServeHTTP(w, r)
} else {
b, err := io.ReadAll(resp.Body)
if err != nil {
log.Println(err)
http.NotFoundHandler().ServeHTTP(w, r)
}
http.ServeContent(w, r, "", time.Now(), bytes.NewReader(b))
}
} else {
http.NotFoundHandler().ServeHTTP(w, r)
}
})
http.ListenAndServe(":"+config.Port, nil)
}