megauploader/httpui.go

82 lines
2.1 KiB
Go

package megauploader
import (
"bytes"
"encoding/json"
"fmt"
"html/template"
"net/http"
"net/url"
"strings"
rice "github.com/GeertJohan/go.rice"
"github.com/gorilla/mux"
)
//go:generate rice embed-go
// loadTmpl return the required template
// It is provided to centralize handling of templates; it will care about
// riceboxes and other quirks that templates might need
func (mu *MegaUploader) loadTmpl(tmplname string) (*template.Template, error) {
str := rice.MustFindBox("res/templates").MustString(tmplname)
tmpl := template.Must(
template.New(strings.Split(tmplname, ".")[0]).Funcs(template.FuncMap{
"pretty": func(data interface{}) string {
var out bytes.Buffer
enc := json.NewEncoder(&out)
enc.SetIndent("", " ")
err := enc.Encode(data)
if err != nil {
panic(err)
}
return out.String()
},
}).Parse(str),
)
str = rice.MustFindBox("res/templates").MustString("base.html.tmpl")
tmpl = template.Must(tmpl.Parse(str))
return tmpl, nil
}
func (mu *MegaUploader) home(w http.ResponseWriter, r *http.Request) {
tmpl, err := mu.loadTmpl("index.html.tmpl")
if err != nil {
http.Error(w, err.Error(), 500)
return
}
user, _ := getUser(r)
shares := mu.Conf.GetAuthShares(user)
w.Header().Set("Content-Type", "text/html; charset=utf-8")
tmpl.Execute(w, map[string]interface{}{
"Prefix": mu.Conf.Global.RoutePrefix,
"Shares": shares,
})
}
func (mu *MegaUploader) uploadUI(w http.ResponseWriter, r *http.Request) {
user, _ := getUser(r) // user is set: checked by middleware
sharename := mux.Vars(r)["share"]
share, err := mu.Conf.GetAuthShare(sharename, user)
if err != nil {
http.Error(w, fmt.Sprintf("Share '%s' not found", sharename), http.StatusNotFound)
return
}
tmpl, err := mu.loadTmpl("upload.html.tmpl")
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
viewurl, err := mu.Conf.GetShareURL(sharename)
if err != nil {
viewurl = url.URL{}
}
w.Header().Set("Content-Type", "text/html; charset=utf-8")
tmpl.Execute(w, map[string]interface{}{
"Prefix": mu.Conf.Global.RoutePrefix,
"Share": share,
"ViewURL": viewurl.String(),
})
}