partage

Unnamed repository; edit this file 'description' to name the repository.
git clone git://git.z3bra.org/partage.git
Log | Files | Refs

commit bd7d7c3397dafb954e0f452f75179227cbec4226
parent bd7a30667ba7fc6c187d4eb085c7d2bac36ed0ec
Author: Willy Goiffon <dev@z3bra.org>
Date:   Wed, 13 Oct 2021 16:57:27 +0200

Add templating system for pages

Diffstat:
Mgo.mod | 2++
Mpartage.go | 33+++++++++++++++++++++++++++++----
Atemplates/index.html | 21+++++++++++++++++++++
3 files changed, 52 insertions(+), 4 deletions(-)

diff --git a/go.mod b/go.mod @@ -1,3 +1,5 @@ module git.z3bra.org/partage go 1.17 + +require github.com/dustin/go-humanize v1.0.0 // indirect diff --git a/partage.go b/partage.go @@ -8,17 +8,26 @@ import ( "os" "path" "path/filepath" + "html/template" + + "github.com/dustin/go-humanize" ) +type templatedata struct { + Maxsize string +} + var conf struct { bind string + baseuri string filepath string rootdir string - baseuri string + templatedir string filectx string maxsize int64 } + func contenttype(f *os.File) string { buffer := make([]byte, 512) @@ -92,6 +101,19 @@ func servefile(f *os.File, w http.ResponseWriter) { } } +func servetemplate(w http.ResponseWriter, f string, d templatedata) { + t, err := template.ParseFiles(conf.templatedir + "/" + f) + if err != nil { + w.WriteHeader(http.StatusInternalServerError) + return + } + + err = t.Execute(w, d) + if err != nil { + fmt.Println(err) + } +} + func uploaderPut(w http.ResponseWriter, r *http.Request) { // Max 15 Gb uploads if r.ContentLength > conf.maxsize { @@ -119,8 +141,10 @@ func uploaderPut(w http.ResponseWriter, r *http.Request) { func uploaderGet(w http.ResponseWriter, r *http.Request) { // r.URL.Path is sanitized regarding "." and ".." filename := r.URL.Path - if r.URL.Path == "/" { - filename = "/index.html" + if r.URL.Path == "/" || r.URL.Path == "/index" { + data := templatedata{ Maxsize: humanize.IBytes(uint64(conf.maxsize))} + servetemplate(w, "/index.html", data) + return } f, err := os.Open(conf.rootdir + filename) @@ -145,11 +169,12 @@ func uploader(w http.ResponseWriter, r *http.Request) { func main() { conf.bind = "0.0.0.0:8080" - conf.maxsize = 28 * 1024 * 1024 + conf.maxsize = 30064771072 // 28Gib conf.filepath = "/tmp" conf.rootdir = "./static" conf.baseuri = "http://192.168.0.3:8080" conf.filectx = "/f/" + conf.templatedir = "./templates" http.HandleFunc("/", uploader) http.Handle(conf.filectx, http.StripPrefix(conf.filectx, http.FileServer(http.Dir(conf.filepath)))) diff --git a/templates/index.html b/templates/index.html @@ -0,0 +1,21 @@ +<!DOCTYPE HTML> +<html> +<head> + <meta charset="utf-8"> + <meta name="author" content="z3bra"> + <meta name="viewport" content="width=device-width"> + <link rel="icon" type="image/png" href="/favicon.png" /> + <title>Partage</title> +</head> +<body> + <h1>Partage</h1> + <p> + Use the box below to upload and share files. File size is + limited to {{.Maxsize}}. + </p> + <form> + <label for="uck">Select file(s) to share</label> + <input id="uck" type="file" multiple=true/> + <input type="submit" value="Upload!"/> + </form> +</body>