template_utils.go 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. package panelui
  2. import (
  3. "fmt"
  4. "html/template"
  5. "net/http"
  6. "os"
  7. "strings"
  8. "github.com/GeertJohan/go.rice"
  9. )
  10. func templateGet(w http.ResponseWriter, r *http.Request, name string, box *rice.Box) (*template.Template, error) {
  11. tmplRaw, err := box.Bytes(name)
  12. if err != nil {
  13. w.WriteHeader(500)
  14. fmt.Fprintln(os.Stderr, err)
  15. fmt.Fprintln(w, "Unexpected error processing template")
  16. return nil, err
  17. }
  18. tmpl := template.Must(template.New(name).Parse(string(tmplRaw)))
  19. return tmpl, nil
  20. }
  21. func templateExecute(w http.ResponseWriter, r *http.Request, name string, box *rice.Box, data map[string]interface{}) error {
  22. tmpl, err := templateGet(w, r, name, box)
  23. if err != nil {
  24. return err
  25. }
  26. // TODO: run template _before_ writing it (to a buffer) so that appropriate error can be checked
  27. w.WriteHeader(200)
  28. if strings.HasSuffix(name, ".html") {
  29. w.Header().Set("Content-type", "text/html")
  30. }
  31. if pref, has := os.LookupEnv("PANEL_PREFIX"); has {
  32. data["BaseURL"] = pref
  33. } else {
  34. data["BaseURL"] = "/"
  35. }
  36. tmpl.Execute(w, data)
  37. return nil
  38. }