1
0
Fork 0
upl/handlers.go

96 lines
1.7 KiB
Go

package main
import (
"encoding/json"
"errors"
"html/template"
"io"
"net/http"
"os"
"time"
"github.com/gorilla/mux"
)
var globalStore store
var handleAssets = http.FileServer(http.FS(assetsWeb))
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/")))
}
}
/* 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
}
/* templates */
var tmpl = template.Must(template.ParseFS(assets, "web/*.tmpl"))
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)
}
/* upload template */
func handleUpload(w http.ResponseWriter, req *http.Request) {
vars := mux.Vars(req)
_, err := getCredential(vars["id"])
if errors.Is(err, errNotFound) {
errorResponseStatus(w, req, err)
executeTemplate(w, "upload-not-found.tmpl", nil)
return
}
if err != nil {
errorResponse(w, req, err)
return
}
executeTemplate(w, "upload.tmpl", nil)
}
/* create template */
func handleCreate(w http.ResponseWriter, req *http.Request) {
executeTemplate(w, "create.tmpl", nil)
}