From 94fb8f24282be3aa41f275cb21d1eca76c1899a1 Mon Sep 17 00:00:00 2001 From: ache Date: Sun, 28 Feb 2021 21:59:58 +0100 Subject: Config + 1.16 + MultiSelection --- server.go | 71 +++++++++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 46 insertions(+), 25 deletions(-) (limited to 'server.go') diff --git a/server.go b/server.go index 1bc72d2..aed70d8 100644 --- a/server.go +++ b/server.go @@ -9,10 +9,10 @@ import ( "html/template" "flag" "path" - "syscall" "net/url" "errors" - "./config" + "strconv" + "davy/config" ) var tmpl *template.Template; @@ -127,11 +127,16 @@ func handleGet( w http.ResponseWriter, r *http.Request, headOnly bool) { cols = append(cols, Entry{"..", path.Dir(initPath), 0, ""}) initPath += "/" } + for _, file := range fileInfo { if file.IsDir() { - cols = append(cols, Entry{file.Name(), initPath + file.Name(), 0, ""}) + if config.Config.AllowHidden || file.Name()[0] != '.' { + cols = append(cols, Entry{file.Name(), initPath + file.Name(), 0, ""}) + } } else { - files = append(files, Entry{file.Name(), initPath + file.Name(), file.Size(), normaliseSize(file.Size())}) + if config.Config.AllowHidden || file.Name()[0] != '.' { + files = append(files, Entry{file.Name(), initPath + file.Name(), file.Size(), normaliseSize(file.Size())}) + } } } type Collection struct { @@ -154,7 +159,7 @@ func handleGet( w http.ResponseWriter, r *http.Request, headOnly bool) { func handleDelete( w http.ResponseWriter, r *http.Request) { filename := getPath(r) - fmt.Printf("Trying to get [%s]\n", filename) + fmt.Printf("Trying to delete [%s]\n", filename) if verifyEmptyBody(w, r) != nil { return } @@ -179,24 +184,33 @@ func handleDelete( w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusNoContent) // Default success code ¯\_(ツ)_/¯ cf : 9.6.1.8 } func handlePut( w http.ResponseWriter, r *http.Request) { + + filename := r.URL.Path[1:] if filename == "" { filename = "." } + fmt.Printf("Trying to create [%s]\n", filename) + stat, err := os.Stat(path.Dir(filename)) - if err == syscall.ENOENT { + if os.IsNotExist(err) { w.WriteHeader(http.StatusConflict) fmt.Fprintf(w, "Can't find [%s]\n)", path.Dir(filename)) - return + fmt.Fprintf(w, "Trying to create it") + err := os.MkdirAll(path.Dir(filename), os.ModePerm) + if err != nil && os.IsNotExist(err) { + return + } } else if err != nil{ w.WriteHeader(http.StatusInternalServerError) fmt.Fprintln(w, err.Error()) + fmt.Printf("Error Abording on [%s] about %s\n", filename, err) return - } else if ! stat.IsDir(){ + } else if !stat.IsDir(){ w.WriteHeader(http.StatusConflict) - fmt.Fprintln(w, "¯\\_(ツ)_/¯") + fmt.Fprintf(w, "¯\\_(ツ)_/¯ [Error: %s]\n", err) return } @@ -380,22 +394,20 @@ func handleMethod( w http.ResponseWriter, r *http.Request) { } } func main() { - var dir string + var dirRoot string var help, version bool helpString := `This is the help` versionString := "0.0.0" - config.ReadConfig() - const ( - defaultDir = "." + defaultRoot = "." usageDir = "the directory to serve" usageHelp = "show some help" usageVersion = "show the version" ) - flag.StringVar(&dir, "directory", defaultDir, usageDir) - flag.StringVar(&dir, "d", defaultDir, usageDir+" (shorthand)") + flag.StringVar(&dirRoot, "directory", "", usageDir) + flag.StringVar(&dirRoot, "d", "", usageDir + " (shorthand)") flag.BoolVar(&help, "help", false, usageHelp) flag.BoolVar(&help, "h", false, usageHelp+" (shorthand)") flag.BoolVar(&version, "version", false, usageVersion) @@ -403,12 +415,6 @@ func main() { flag.Parse() - fmt.Println(config.Config.Port) - - if dir == "" { - dir = defaultDir - } - if help { fmt.Println(helpString) return @@ -418,6 +424,21 @@ func main() { return } + if config.ReadConfig("") != nil { + if config.ReadConfig("config/config.json") != nil { + fmt.Println("Config file error.") + fmt.Println("Charging default value") + config.SetDefaultValue() + } + } + + if dirRoot == "" { + dirRoot = config.Config.RootPath + if dirRoot == "" { + dirRoot = defaultRoot + } + } + fmap := template.FuncMap{ "formatURL": encodeURL, "formatSize": normaliseSize, @@ -435,14 +456,14 @@ func main() { http.ServeFile(w, r, baseWd + "/static/ban.svg") }) - if err := os.Chdir(dir) ; err != nil { - fmt.Println("Error with directory [" + dir + "]") + if err := os.Chdir(dirRoot) ; err != nil { + fmt.Println("Error with directory [" + dirRoot + "]") return } - fmt.Println("Launch server") + fmt.Println("Launch server on port:", config.Config.Port) http.HandleFunc("/", handleMethod) - log.Fatal(http.ListenAndServe(":8080", nil)) + log.Fatal(http.ListenAndServe(":" + strconv.Itoa(config.Config.Port), nil)) fmt.Println("Bye bye") } -- cgit v1.2.3