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 } }