diff options
Diffstat (limited to 'cmd/server/edit.go')
| -rw-r--r-- | cmd/server/edit.go | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/cmd/server/edit.go b/cmd/server/edit.go new file mode 100644 index 0000000..730e6e9 --- /dev/null +++ b/cmd/server/edit.go @@ -0,0 +1,90 @@ +package main + +import ( + "bytes" + "html" + "io" + "log" + "net/http" + "os" + "path/filepath" + + "riedstra.dev/mitch/go-website/page" +) + +func (a *App) EditPage(w http.ResponseWriter, r *http.Request) { + if r.Method != "GET" { + page.Render(w, r, page.TemplateDirectory+"/4xx", map[string]interface{}{ + "Title": "Method Not allowed", + "Description": "Method not allowed", + }, http.StatusMethodNotAllowed) + + return + } + + p := r.URL.Path + + p = filepath.Clean(p) + + fh, err := os.Open("./" + p + page.Suffix) + if err != nil { + log.Printf("opening page: %s", err) + a.Err500Default(w, r) + + return + } + + b, err := io.ReadAll(fh) + if err != nil { + log.Printf("opening page: %s", err) + a.Err500Default(w, r) + + return + } + + page.Render(w, r, page.TemplateDirectory+"/edit", map[string]interface{}{ + "Page": p, + "Content": html.EscapeString(string(b)), + }, http.StatusOK) +} + +func (a *App) SaveEditPage(w http.ResponseWriter, r *http.Request) { + if r.Method != "POST" { + a.Err500Default(w, r) + + return + } + + p := r.URL.Path + content := r.FormValue("content") + + content = html.UnescapeString(content) + p = filepath.Clean(p) + + fn := "./" + p + page.Suffix + + fh, err := os.OpenFile(fn, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644) + if err != nil { + log.Printf("opening file %s for writing: %s", fn, err) + a.Err500Default(w, r) + + return + } + + c := bytes.ReplaceAll([]byte(content), []byte{'\r'}, []byte{}) + + _, err = fh.Write(c) + if err != nil { + log.Printf("opening file %s for writing: %s", fn, err) + a.Err500Default(w, r) + + return + } + + http.Redirect(w, r, "/"+r.URL.Path, http.StatusFound) + + err = a.ClearRedis() // Clear out the cache if any + if err != nil { + log.Printf("after editing %s: %s", fn, err) + } +} |
