package main import ( "encoding/json" "github.com/asdine/storm/v3" "log" "net/http" "sophuwu.site/myweb/config" "sophuwu.site/myweb/template" "strings" ) var DB *storm.DB func OpenDB() { db, err := storm.Open(config.DBPath) if err != nil { log.Fatalf("failed to open db: %v", err) } DB = db } func CloseDB() { err := DB.Close() if err != nil { log.Println(err) } } func GetPageData(page string) (template.HTMLDataMap, error) { var d template.HTMLDataMap err := DB.Get("pages", page, &d) return d, err } func SetPageData(page string, data template.HTMLDataMap) error { return DB.Set("pages", page, data) } func EditIndex(w http.ResponseWriter, r *http.Request) { var err error if r.Method == "GET" && r.URL.Path == "/manage/edit/" { var d template.HTMLDataMap d, err = GetPageData("index") var b []byte b, err = json.MarshalIndent(d, "", " ") if CheckHttpErr(err, w, r, 500) { return } bb := string(b) data := template.Data("Edit index", "Edit the index page") data.Set("Data", bb) err = template.Use(w, r, "edit", data) CheckHttpErr(err, w, r, 500) return } else if r.Method == "POST" && r.URL.Path == "/manage/edit/save" { err = r.ParseForm() if CheckHttpErr(err, w, r, 500) { return } var bb string bb = r.Form.Get("data") if bb == "" { HttpErr(w, r, 400) return } var d template.HTMLDataMap err = json.Unmarshal([]byte(bb), &d) if CheckHttpErr(err, w, r, 400) { return } err = SetPageData("index", d) if CheckHttpErr(err, w, r, 400) { return } http.Redirect(w, r, "/", 302) return } HttpErr(w, r, 405) } func ManagerHandler(w http.ResponseWriter, r *http.Request) { if r.URL.Path == "/manage/" { data := template.Data("Manage", config.URL) data["Options"] = []struct{ Name, URL string }{ {"Edit index", "/manage/edit/"}, {"Upload media", "/manage/media/"}, {"Delete media", "/manage/delete/media/"}, {"Post blog", "/manage/blog/"}, {"Add Animation", "/manage/animation/"}, {"Backup", "/manage/backup/"}, } err := template.Use(w, r, "manage", data) CheckHttpErr(err, w, r, 500) return } if r.URL.Path == "/manage/edit/" || r.URL.Path == "/manage/edit/save" { EditIndex(w, r) return } if r.URL.Path == "/manage/media/" { ManageMedia(w, r) return } if strings.HasPrefix(r.URL.Path, "/manage/delete/media/") { DeleteMedia(w, r) return } HttpErr(w, r, 404) }