diff --git a/cmd/backend/files.go b/cmd/backend/files.go new file mode 100644 index 0000000..2ccbb37 --- /dev/null +++ b/cmd/backend/files.go @@ -0,0 +1,28 @@ +package backend + +import ( + "fmt" + "io" + "os" +) + +func CopyFile(src, dst string) error { + srcFile, err := os.Open(src) + if err != nil { + return fmt.Errorf("error opening source file: %v", err) + } + defer srcFile.Close() + + dstFile, err := os.OpenFile(dst, os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0644) + if err != nil { + return fmt.Errorf("error opening destination file: %v", err) + } + defer dstFile.Close() + + _, err = io.Copy(dstFile, srcFile) + if err != nil { + return fmt.Errorf("error copying file: %v", err) + } + + return dstFile.Sync() +} diff --git a/cmd/frontend/articles.go b/cmd/frontend/articles.go index 799d2c5..befb441 100644 --- a/cmd/frontend/articles.go +++ b/cmd/frontend/articles.go @@ -33,27 +33,6 @@ type EditorHTMLData struct { Tags []*b.Tag } -func copyFile(src, dst string) error { - srcFile, err := os.Open(src) - if err != nil { - return fmt.Errorf("error opening source file: %v", err) - } - defer srcFile.Close() - - dstFile, err := os.Create(dst) - if err != nil { - return fmt.Errorf("error opening destination file: %v", err) - } - defer dstFile.Close() - - _, err = io.Copy(dstFile, srcFile) - if err != nil { - return fmt.Errorf("error copying file: %v", err) - } - - return dstFile.Sync() -} - func WriteArticle(c *b.Config, db *b.DB, s *b.CookieStore) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { session, err := getSession(w, r, c, s) @@ -61,14 +40,13 @@ func WriteArticle(c *b.Config, db *b.DB, s *b.CookieStore) http.HandlerFunc { return } - data := new(EditorHTMLData) + data := &EditorHTMLData{Action: "submit"} if session.Values["article"] == nil { data = &EditorHTMLData{Article: new(b.Article)} } else { data = session.Values["article"].(*EditorHTMLData) } - // data.Mode = EditMode data.Tags, err = db.GetTagList() if err != nil { @@ -77,8 +55,6 @@ func WriteArticle(c *b.Config, db *b.DB, s *b.CookieStore) http.HandlerFunc { return } - data.Action = "submit" - tmpl, err := template.ParseFiles(c.WebDir + "/templates/editor.html") template.Must(tmpl, err).ExecuteTemplate(w, "page-content", data) } @@ -696,7 +672,7 @@ func AllowEditArticle(c *b.Config, db *b.DB, s *b.CookieStore) http.HandlerFunc return } - if err = copyFile(fmt.Sprint(c.ArticleDir, "/", oldID, ".md"), fmt.Sprint(c.ArticleDir, "/", newID, ".md")); err != nil { + if err = b.CopyFile(fmt.Sprint(c.ArticleDir, "/", oldID, ".md"), fmt.Sprint(c.ArticleDir, "/", newID, ".md")); err != nil { log.Println(err) http.Error(w, err.Error(), http.StatusInternalServerError) return