|
- package main
-
- import (
- "code.as/writeas/developers-web/platform"
- "fmt"
- "github.com/writeas/web-core/log"
- "net/http"
- "os"
- "path/filepath"
- "runtime/debug"
- "time"
- )
-
- func viewPage(w http.ResponseWriter, r *http.Request) {
- start := time.Now()
- defer func() {
- if e := recover(); e != nil {
- log.Error("%s: %s", e, debug.Stack())
- http.Error(w, "Error", http.StatusInternalServerError)
- }
-
- log.Info(fmt.Sprintf("\"%s %s\" %s \"%s\" \"%s\"", r.Method, r.RequestURI, time.Since(start), r.UserAgent(), r.Host))
- }()
-
- name := r.URL.Path[1:]
- if name == "" {
- name = "index"
- }
-
- pl := &platform.WriteAs
- if r.Host == "developers.snap.as" || r.Host == fmt.Sprintf("devsnap.local:%d", *portPtr) {
- pl = &platform.SnapAs
- }
-
- p := struct {
- Path string
- Platform *platform.Platform
- }{
- Path: name,
- Platform: pl,
- }
-
- // Make sure the page exists
- if _, err := os.Stat(filepath.Join(pagesDir, pl.SiteDir, p.Path+".tmpl")); os.IsNotExist(err) {
- log.Info(filepath.Join(pagesDir, pl.SiteDir, p.Path, "index.tmpl"))
- if _, err := os.Stat(filepath.Join(pagesDir, pl.SiteDir, p.Path, "index.tmpl")); os.IsNotExist(err) {
- t, err := getTemplate(pl.SiteDir, "404")
- if err != nil {
- http.Error(w, err.Error(), http.StatusInternalServerError)
- return
- }
-
- w.WriteHeader(http.StatusNotFound)
- err = t.ExecuteTemplate(w, "base", p)
- if err != nil {
- log.Info("Unable to render 404 page: %s", err)
- }
- return
- } else {
- p.Path = filepath.Join(p.Path, "index")
- log.Info("name is now %s", p.Path)
- }
- }
-
- // Render the page
- t, err := getTemplate(pl.SiteDir, p.Path)
- if err != nil {
- http.Error(w, err.Error(), http.StatusInternalServerError)
- return
- }
-
- err = t.ExecuteTemplate(w, "base", p)
- if err != nil {
- http.Error(w, err.Error(), http.StatusInternalServerError)
- return
- }
- }
|