sophuwu.site > myweb   
              110
            
             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)
}