Developer Center website. https://developers.write.as
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.

72 lines
1.6 KiB

  1. package main
  2. import (
  3. "code.as/writeas/developers-site/platform"
  4. "fmt"
  5. "github.com/writeas/web-core/log"
  6. "net/http"
  7. "os"
  8. "path/filepath"
  9. "runtime/debug"
  10. "time"
  11. )
  12. func viewPage(w http.ResponseWriter, r *http.Request) {
  13. start := time.Now()
  14. defer func() {
  15. if e := recover(); e != nil {
  16. log.Error("%s: %s", e, debug.Stack())
  17. http.Error(w, "Error", http.StatusInternalServerError)
  18. }
  19. log.Info(fmt.Sprintf("\"%s %s\" %s \"%s\"", r.Method, r.RequestURI, time.Since(start), r.UserAgent()))
  20. }()
  21. name := r.URL.Path[1:]
  22. if name == "" {
  23. name = "index"
  24. }
  25. // Make sure the page exists
  26. if _, err := os.Stat(filepath.Join(pagesDir, name+".tmpl")); os.IsNotExist(err) {
  27. log.Info(filepath.Join(pagesDir, name, "index.tmpl"))
  28. if _, err := os.Stat(filepath.Join(pagesDir, name, "index.tmpl")); os.IsNotExist(err) {
  29. t, err := getTemplate("404")
  30. if err != nil {
  31. http.Error(w, err.Error(), http.StatusInternalServerError)
  32. return
  33. }
  34. w.WriteHeader(http.StatusNotFound)
  35. err = t.ExecuteTemplate(w, "base", nil)
  36. if err != nil {
  37. log.Info("Unable to render 404 page: %s", err)
  38. }
  39. return
  40. } else {
  41. name = filepath.Join(name, "index")
  42. log.Info("name is now %s", name)
  43. }
  44. }
  45. // Render the page
  46. t, err := getTemplate(name)
  47. if err != nil {
  48. http.Error(w, err.Error(), http.StatusInternalServerError)
  49. return
  50. }
  51. p := struct {
  52. Path string
  53. Platform platform.Platform
  54. }{
  55. Path: name,
  56. Platform: platform.WriteAs,
  57. }
  58. err = t.ExecuteTemplate(w, "base", p)
  59. if err != nil {
  60. http.Error(w, err.Error(), http.StatusInternalServerError)
  61. return
  62. }
  63. }