board/backup
2025-04-15 23:49:28 +03:00

111 lines
2.7 KiB
Plaintext

type Page struct {
Id uint32
Title string
Body []byte
}
validPath = regexp.MustCompile("^/(edit|save|view)/([a-zA-Z0-9]+)$")
func (p *Page) save() error {
filename := p.Title + ".txt"
return os.WriteFile(fileStorage+filename, p.Body, 0600)
}
func loadPage(title string) (*Page, error) {
filename := title + ".txt"
body, err := os.ReadFile(fileStorage + filename)
if err != nil {
return nil, err
}
return &Page{Title: title, Body: body}, nil
}
//func renderTemplate(w http.ResponseWriter, name string, p *Page) {
// err := templates.ExecuteTemplate(w, name+".html", p)
// if err != nil {
// http.Error(w, err.Error(), http.StatusInternalServerError)
// }
//}
//func renderHomeTemplate(w http.ResponseWriter, p []string) {
// err := templates.ExecuteTemplate(w, "index.html", p)
// if err != nil {
// http.Error(w, err.Error(), http.StatusInternalServerError)
// }
//}
func viewHandler(w http.ResponseWriter, r *http.Request, title string) {
//p, err := loadPage(title)
//if err != nil {
// http.Redirect(w, r, "/edit/"+title, http.StatusFound)
// return
//}
//renderTemplate(w, "view", p)
}
func saveHandler(w http.ResponseWriter, r *http.Request, title string) {
body := r.FormValue("body")
p := &Page{Title: title, Body: []byte(body)}
err := p.save()
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
http.Redirect(w, r, "/view/"+title, http.StatusFound)
}
func editHandler(w http.ResponseWriter, r *http.Request, title string) {
//p, err := loadPage(title)
//if err != nil {
// p = &Page{Title: title}
//}
//renderTemplate(w, "edit", p)
}
func viewHomeHandler(w http.ResponseWriter, _ *http.Request) {
entries, err := os.ReadDir(fileStorage)
if err != nil {
http.Error(w, err.Error(), http.StatusBadRequest)
}
files := make([]string, len(entries))
for i, v := range entries {
if !v.IsDir() {
fileName := v.Name()
ext := filepath.Ext(fileName)
files[i] = strings.TrimSuffix(fileName, ext)
}
}
//renderHomeTemplate(w, files)
}
func makeHandler(fn func(http.ResponseWriter, *http.Request, string)) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
m := validPath.FindStringSubmatch(r.URL.Path)
if m == nil {
http.NotFound(w, r)
return
}
fn(w, r, m[2])
}
}
type apiHandler struct{}
//http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
// fmt.Println(r.URL.Path)
// err := t.Templates.ExecuteTemplate(w, "index.html", nil)
// if err != nil {
// http.Error(w, err.Error(), http.StatusInternalServerError)
// }
//})
//http.HandleFunc("/", viewHomeHandler)
//http.HandleFunc("/view/", makeHandler(viewHandler))
//http.HandleFunc("/edit/", makeHandler(editHandler))
//http.HandleFunc("/save/", makeHandler(saveHandler))