1
0
Fork 0
upl/handlers.go

96 lines
1.7 KiB
Go
Raw Normal View History

2021-05-22 22:24:28 +08:00
package main
import (
2021-05-23 00:46:15 +08:00
"encoding/json"
"errors"
2021-05-22 23:53:00 +08:00
"html/template"
"io"
2021-05-22 22:24:28 +08:00
"net/http"
"os"
2021-05-23 00:46:15 +08:00
"time"
"github.com/gorilla/mux"
2021-05-22 22:24:28 +08:00
)
var globalStore store
var handleAssets = http.FileServer(http.FS(assetsWeb))
2021-05-22 22:24:28 +08:00
func setupHandlers() {
var err error
globalStore, err = newRedisStore(os.Getenv("REDIS_CONNECTION"))
if err != nil {
panic(err)
}
if debug {
handleAssets = http.FileServer(http.FS(os.DirFS("web/assets/")))
}
2021-05-22 22:24:28 +08:00
}
2021-05-23 00:46:15 +08:00
/* credentials */
func getCredential(id string) (credential, error) {
cred := credential{}
b, err := globalStore.get(id)
if err != nil {
return cred, err
}
err = json.Unmarshal(b, &cred)
if err != nil {
return cred, err
}
return cred, nil
}
func setCredential(id string, cred credential, expire time.Duration) error {
b, err := json.Marshal(cred)
if err != nil {
return err
}
err = globalStore.put(id, b, expire)
if err != nil {
return err
}
return nil
}
2021-05-22 23:53:00 +08:00
/* templates */
2021-05-22 22:24:28 +08:00
2021-05-22 23:53:00 +08:00
var tmpl = template.Must(template.ParseFS(assets, "web/*.tmpl"))
2021-05-22 22:24:28 +08:00
func executeTemplate(w io.Writer, name string, data interface{}) error {
if debug {
tmpl = template.Must(template.ParseGlob("web/*.tmpl"))
}
return tmpl.ExecuteTemplate(w, name, nil)
}
2021-05-22 23:53:00 +08:00
/* upload template */
2021-05-22 22:24:28 +08:00
2021-05-22 23:53:00 +08:00
func handleUpload(w http.ResponseWriter, req *http.Request) {
2021-05-23 00:46:15 +08:00
vars := mux.Vars(req)
_, err := getCredential(vars["id"])
if errors.Is(err, errNotFound) {
errorResponseStatus(w, req, err)
executeTemplate(w, "upload-not-found.tmpl", nil)
2021-05-23 00:46:15 +08:00
return
}
if err != nil {
errorResponse(w, req, err)
return
}
executeTemplate(w, "upload.tmpl", nil)
2021-05-22 22:24:28 +08:00
}
2021-05-23 00:46:15 +08:00
/* create template */
func handleCreate(w http.ResponseWriter, req *http.Request) {
executeTemplate(w, "create.tmpl", nil)
2021-05-23 00:46:15 +08:00
}