From 4ed57528379c9d1ac0f5bc77b95439bbba3d4488 Mon Sep 17 00:00:00 2001 From: Mitch Riedstra Date: Sat, 21 Nov 2020 01:13:16 -0500 Subject: Initial version of a web interface --- cmd/web/main.go | 89 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 cmd/web/main.go (limited to 'cmd/web/main.go') diff --git a/cmd/web/main.go b/cmd/web/main.go new file mode 100644 index 0000000..93025e5 --- /dev/null +++ b/cmd/web/main.go @@ -0,0 +1,89 @@ +package main + +import ( + "flag" + "log" + "net/http" + "os" + "path/filepath" + + "github.com/gorilla/mux" + "riedstra.dev/mitch/steam-export/steam" +) + +var ( + Logger = log.New(os.Stderr, "", log.LstdFlags) + Listen = ":8899" + + Lib = steam.NewLibraryMust(DefaultLib) +) + +//size, err := estimateSize(g.LibraryPath + "common/" + g.Name) +//if err != nil { +// http.Error(w, "Encountered:"+err, 500) +// return +//} +func estimateSize(pth string) (int64, error) { + var size int64 = 0 + + err := filepath.Walk(pth, func(path string, info os.FileInfo, err error) error { + + if err != nil { + return err + } + + if info.Mode().IsRegular() { + size = size + info.Size() + } + + return nil + }) + + return size, err + +} + +func gameDownloader(w http.ResponseWriter, r *http.Request) { + vars := mux.Vars(r) + game := vars["game"] + + g, ok := Lib.Games[game] + if !ok { + Logger.Printf("Missing: %s", game) + http.Error(w, "Game is missing", 404) + return + } + + w.Header().Add("Content-type", "application/tar") + + err := g.Package(w) + if err != nil { + Logger.Printf("Error Sending game: %s", err) + // Headers already sent, don't bother sending an error + } + +} + +func main() { + fl := flag.NewFlagSet("steam-export", flag.ExitOnError) + debug := fl.Bool("d", false, "Print line numbers in log") + listen := fl.String("l", Listen, "What address do we listen on?") + fl.Parse(os.Args[1:]) + + if *debug { + Logger.SetFlags(log.LstdFlags | log.Llongfile) + } + + r := mux.NewRouter() + + r.HandleFunc("/download/{game}", gameDownloader) + r.HandleFunc("/style.css", cssHandler) + r.HandleFunc("/", index) + + s := http.Server{ + Handler: r, + Addr: *listen, + } + + Logger.Fatal(s.ListenAndServe()) +} -- cgit v1.2.3