From 17c97ebe9a37cd1d41a5a219c92951aaf57dc911 Mon Sep 17 00:00:00 2001 From: Timur Ismagilov Date: Fri, 19 Jun 2020 18:03:31 +0500 Subject: [PATCH] Implement saving changes --- handlers.go | 122 +++++++++++++++++++++++++++++++++++++- hypha.go | 47 ++++++++++++--- main.go | 4 +- render.go | 17 +++--- revision.go | 14 +++-- w/m/Fruit/Apple/2.bin | Bin 0 -> 35292 bytes w/m/Fruit/Apple/2.txt | 3 + w/m/Fruit/Apple/3.txt | 6 ++ w/m/Fruit/Apple/meta.json | 14 +---- 9 files changed, 190 insertions(+), 37 deletions(-) create mode 100644 w/m/Fruit/Apple/2.bin create mode 100644 w/m/Fruit/Apple/2.txt create mode 100644 w/m/Fruit/Apple/3.txt diff --git a/handlers.go b/handlers.go index 5f3dfac..56a6399 100644 --- a/handlers.go +++ b/handlers.go @@ -2,8 +2,13 @@ package main import ( "github.com/gorilla/mux" + "io/ioutil" "log" "net/http" + "path/filepath" + "strconv" + "strings" + "time" ) // Boilerplate code present in many handlers. Good to have it. @@ -62,7 +67,118 @@ func HandlerRename(w http.ResponseWriter, r *http.Request) { log.Println("Attempt to access an unimplemented thing") } -func HandlerUpdate(w http.ResponseWriter, r *http.Request) { - w.WriteHeader(http.StatusNotImplemented) - log.Println("Attempt to access an unimplemented thing") +func makeTagsSlice(responseTagsString string) (ret []string) { + // `responseTagsString` is string like "foo,, bar,kek". Whitespace around commas is insignificant. Expected output: []string{"foo", "bar", "kek"} + for _, tag := range strings.Split(responseTagsString, ",") { + if trimmed := strings.TrimSpace(tag); "" == trimmed { + ret = append(ret, trimmed) + } + } + return ret +} + +// Return an existing hypha it exists in `hyphae` or create a new one. If it `isNew`, you'll have to insert it to `hyphae` yourself. +func getHypha(name string) (*Hypha, bool) { + log.Println("Accessing hypha", name) + if h, ok := hyphae[name]; ok { + log.Println("Got hypha", name) + return h, false + } + log.Println("Create hypha", name) + h := &Hypha{ + FullName: name, + Path: filepath.Join(rootWikiDir, name), + Revisions: make(map[string]*Revision), + parentName: filepath.Dir(name), + } + return h, true +} + +// Create a new revison for hypha `h`. All data is fetched from `r`, except for BinaryMime and BinaryPath which require additional processing. You'll have te insert the revision to `h` yourself. +func revisionFromHttpData(h *Hypha, r *http.Request) *Revision { + idStr := strconv.Itoa(h.NewestRevisionInt() + 1) + log.Println(idStr) + rev := &Revision{ + Id: h.NewestRevisionInt() + 1, + FullName: h.FullName, + Tags: makeTagsSlice(r.PostFormValue("tags")), + Comment: r.PostFormValue("comment"), + Author: r.PostFormValue("author"), + Time: int(time.Now().Unix()), + TextMime: r.PostFormValue("text_mime"), + TextPath: filepath.Join(h.Path, idStr+".txt"), + // Left: BinaryMime, BinaryPath + } + return rev +} + +func writeTextFileFromHttpData(rev *Revision, r *http.Request) error { + data := []byte(r.PostFormValue("text")) + err := ioutil.WriteFile(rev.TextPath, data, 0644) + if err != nil { + log.Println("Failed to write", len(data), "bytes to", rev.TextPath) + } + return err +} + +func writeBinaryFileFromHttpData(h *Hypha, oldRev Revision, newRev *Revision, r *http.Request) error { + // 10 MB file size limit + r.ParseMultipartForm(10 << 20) + // Read file + file, handler, err := r.FormFile("binary") + if file != nil { + defer file.Close() + } + if err != nil { + log.Println("No binary data passed for", newRev.FullName) + newRev.BinaryMime = oldRev.BinaryMime + newRev.BinaryPath = oldRev.BinaryPath + log.Println("Set previous revision's binary data") + return nil + } + newRev.BinaryMime = handler.Header.Get("Content-Type") + newRev.BinaryPath = filepath.Join(h.Path, newRev.IdAsStr()+".bin") + data, err := ioutil.ReadAll(file) + if err != nil { + log.Println(err) + return err + } + log.Println("Got", len(data), "of binary data for", newRev.FullName) + err = ioutil.WriteFile(newRev.BinaryPath, data, 0644) + if err != nil { + log.Println("Failed to write", len(data), "bytes to", newRev.TextPath) + return err + } + log.Println("Written", len(data), "of binary data for", newRev.FullName) + return nil +} + +func HandlerUpdate(w http.ResponseWriter, r *http.Request) { + vars := mux.Vars(r) + log.Println("Attempt to update hypha", mux.Vars(r)["hypha"]) + h, isNew := getHypha(vars["hypha"]) + oldRev := h.GetNewestRevision() + newRev := revisionFromHttpData(h, r) + + if isNew { + h.CreateDir() + } + err := writeTextFileFromHttpData(newRev, r) + if err != nil { + log.Println(err) + return + } + err = writeBinaryFileFromHttpData(h, oldRev, newRev, r) + if err != nil { + log.Println(err) + return + } + + h.Revisions[newRev.IdAsStr()] = newRev + h.SaveJson() + + log.Println("Current hyphae storage is", hyphae) + + w.WriteHeader(http.StatusOK) + w.Write([]byte("Saved successfully")) } diff --git a/hypha.go b/hypha.go index b29b602..1189a57 100644 --- a/hypha.go +++ b/hypha.go @@ -1,20 +1,24 @@ package main import ( + "encoding/json" "fmt" "io/ioutil" + "log" "net/http" + "os" + "path/filepath" "strconv" "strings" ) type Hypha struct { - FullName string - Path string + FullName string `json:"-"` + Path string `json:"-"` ViewCount int `json:"views"` Deleted bool `json:"deleted"` Revisions map[string]*Revision `json:"revisions"` - ChildrenNames []string + ChildrenNames []string `json:"-"` parentName string } @@ -39,7 +43,15 @@ func (h *Hypha) Name() string { return h.FullName } +func (h *Hypha) GetNewestRevision() Revision { + return *h.Revisions[h.NewestRevision()] +} + func (h *Hypha) NewestRevision() string { + return strconv.Itoa(h.NewestRevisionInt()) +} + +func (h *Hypha) NewestRevisionInt() int { var largest int for k, _ := range h.Revisions { rev, _ := strconv.Atoi(k) @@ -47,16 +59,38 @@ func (h *Hypha) NewestRevision() string { largest = rev } } - return strconv.Itoa(largest) + return largest +} + +func (h *Hypha) MetaJsonPath() string { + return filepath.Join(h.Path, "meta.json") +} + +func (h *Hypha) CreateDir() error { + return os.MkdirAll(h.Path, 0644) } func (h *Hypha) ParentName() string { return h.parentName } +func (h *Hypha) SaveJson() { + data, err := json.Marshal(h) + if err != nil { + log.Println("Failed to create JSON of hypha.", err) + return + } + err = ioutil.WriteFile(h.MetaJsonPath(), data, 0644) + if err != nil { + log.Println("Failed to save JSON of hypha.", err) + return + } + log.Println("Saved JSON data of", h.FullName) +} + func ActionEdit(hyphaName string, w http.ResponseWriter) { w.Header().Set("Content-Type", "text/html; charset=utf-8") - var initContents, initTextMime, initBinaryMime, initTags string + var initContents, initTextMime, initTags string hypha, ok := hyphae[hyphaName] if !ok { initContents = "Describe " + hyphaName + "here." @@ -71,10 +105,9 @@ func ActionEdit(hyphaName string, w http.ResponseWriter) { } initContents = string(contents) initTextMime = newestRev.TextMime - initBinaryMime = newestRev.BinaryMime initTags = strings.Join(newestRev.Tags, ",") } w.WriteHeader(http.StatusOK) - w.Write([]byte(EditHyphaPage(hyphaName, initTextMime, initBinaryMime, initContents, initTags))) + w.Write([]byte(EditHyphaPage(hyphaName, initTextMime, initContents, initTags))) } diff --git a/main.go b/main.go index 0f3189d..b75717d 100644 --- a/main.go +++ b/main.go @@ -101,7 +101,9 @@ func main() { r.Queries("action", "rename", "to", hyphaPattern).Path(hyphaUrl). HandlerFunc(HandlerRename) - r.Queries("action", "update").Path(hyphaUrl). + r.Queries( + "action", "update", + ).Path(hyphaUrl).Methods("POST"). HandlerFunc(HandlerUpdate) r.HandleFunc(hyphaUrl, HandlerView) diff --git a/render.go b/render.go index d8267d2..2ffd963 100644 --- a/render.go +++ b/render.go @@ -24,12 +24,15 @@ func Layout(f map[string]string) string { return fmt.Sprintf(template, f["title"], f["head"], f["header"], f["main"], f["sidebar"], FooterText, f["bodyBottom"]) } -func EditHyphaPage(name, text_mime, binary_mime, content, tags string) string { +func EditHyphaPage(name, text_mime, content, tags string) string { template := ` @@ -67,7 +66,7 @@ func EditHyphaPage(name, text_mime, binary_mime, content, tags string) string { "title": fmt.Sprintf(TitleTemplate, "Edit "+name), "head": DefaultStyles, "header": `

Edit ` + name + `

`, - "main": fmt.Sprintf(template, content, text_mime, binary_mime, "Update "+name, tags), + "main": fmt.Sprintf(template, content, text_mime, "Update "+name, tags), "sidebar": "", "footer": FooterText, } diff --git a/revision.go b/revision.go index ee27137..a546cf7 100644 --- a/revision.go +++ b/revision.go @@ -6,11 +6,13 @@ import ( "io/ioutil" "log" "net/http" + "strconv" ) +// In different places, revision variable is called `r`. But when there is an http.Request as well, the revision becomes `rev`. TODO: name them consistently. type Revision struct { - Id int - FullName string + Id int `json:"-"` + FullName string `json:"-"` Tags []string `json:"tags"` ShortName string `json:"name"` Comment string `json:"comment"` @@ -18,8 +20,12 @@ type Revision struct { Time int `json:"time"` TextMime string `json:"text_mime"` BinaryMime string `json:"binary_mime"` - TextPath string - BinaryPath string + TextPath string `json:"-"` + BinaryPath string `json:"-"` +} + +func (r *Revision) IdAsStr() string { + return strconv.Itoa(r.Id) } // During initialisation, it is guaranteed that r.BinaryMime is set to "" if the revision has no binary data. diff --git a/w/m/Fruit/Apple/2.bin b/w/m/Fruit/Apple/2.bin new file mode 100644 index 0000000000000000000000000000000000000000..7127c67e38a86d08b0ed38e17bb7b1063dd319dc GIT binary patch literal 35292 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 A4*&oF literal 0 HcmV?d00001 diff --git a/w/m/Fruit/Apple/2.txt b/w/m/Fruit/Apple/2.txt new file mode 100644 index 0000000..77b6494 --- /dev/null +++ b/w/m/Fruit/Apple/2.txt @@ -0,0 +1,3 @@ +Красное яблоко. Для съёмки использовалась белая бумага позади и над яблоком, и фотовспышка SB-600 в 1/4 мощности. + +Source: https://commons.wikimedia.org/wiki/File:Red_Apple.jpg \ No newline at end of file diff --git a/w/m/Fruit/Apple/3.txt b/w/m/Fruit/Apple/3.txt new file mode 100644 index 0000000..84903ab --- /dev/null +++ b/w/m/Fruit/Apple/3.txt @@ -0,0 +1,6 @@ +Mycorrhiza is pure happiness + +Красное яблоко. Для съёмки использовалась белая бумага позади и над яблоком, и фотовспышка SB-600 в 1/4 мощности. + +Source: https://commons.wikimedia.org/wiki/File:Red_Apple.jpg + \ No newline at end of file diff --git a/w/m/Fruit/Apple/meta.json b/w/m/Fruit/Apple/meta.json index 732f242..b47c26a 100644 --- a/w/m/Fruit/Apple/meta.json +++ b/w/m/Fruit/Apple/meta.json @@ -1,13 +1 @@ -{ -"revisions":{ - "1":{ - "name": "Apple", - "time": 1591639464, - "author": "bouncepaw", - "comment": "add apple pic hehehe", - "tags": ["img"], - "text_mime": "text/plain", - "binary_mime": "image/jpeg" - } -} -} +{"views":0,"deleted":false,"revisions":{"1":{"tags":["img"],"name":"Apple","comment":"add apple pic hehehe","author":"bouncepaw","time":1591639464,"text_mime":"text/plain","binary_mime":"image/jpeg"},"2":{"tags":null,"name":"","comment":"Update Fruit/Apple","author":"","time":1592570366,"text_mime":"text/plain","binary_mime":"image/jpeg"},"3":{"tags":null,"name":"","comment":"Test fs dumping","author":"","time":1592570926,"text_mime":"text/plain","binary_mime":"image/jpeg"}}} \ No newline at end of file