You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

88 lines
1.9 KiB

package main
import (
"html/template"
"log"
"net/http"
"os"
"path/filepath"
"strings"
padArchiver ".."
"github.com/gorilla/mux"
)
type ItemModel struct {
Name string
Path string
IsDir bool
Content template.HTML
}
type MenuModel struct {
PageTitle string
Items []ItemModel
}
func main() {
router := mux.NewRouter()
router.HandleFunc("/", getDir).Methods("GET")
router.HandleFunc("/dir/{path}", getDir).Methods("GET")
router.HandleFunc("/page/{path}", getPage).Methods("GET")
log.Println("padArchiver web server running")
log.Print("port: 8080")
log.Fatal(http.ListenAndServe(":8080", router))
}
func generateMenu(dirpath string) MenuModel {
var menuPage MenuModel
menuPage.PageTitle = "padArchiver - Menu"
_ = filepath.Walk(padArchiver.Storage+dirpath, func(path string, f os.FileInfo, err error) error {
if path != padArchiver.Storage {
path = strings.Replace(path, padArchiver.Storage, "", -1)
var item ItemModel
item.Name = path
path = strings.Replace(path, "/", "%", -1)
if f.IsDir() {
item.Path = "/dir/" + path
} else {
item.Path = "/page/" + path
}
item.IsDir = f.IsDir()
menuPage.Items = append(menuPage.Items, item)
}
return nil
})
return menuPage
}
func getDir(w http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r)
var dirpath string
if _, ok := vars["path"]; ok {
dirpath = vars["path"]
dirpath = strings.Replace(dirpath, "%", "/", -1)
}
menuPage := generateMenu(dirpath)
tmpl := template.Must(template.ParseFiles("templates/menuTemplate.html"))
tmpl.Execute(w, menuPage)
}
func getPage(w http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r)
path := vars["path"]
path = strings.Replace(path, "%", "/", -1)
path = padArchiver.Storage + path
content, err := fileToHTML(path)
check(err)
var item ItemModel
item.Name = path
item.Content = template.HTML(content)
tmpl := template.Must(template.ParseFiles("templates/pageTemplate.html"))
tmpl.Execute(w, item)
}