func (pr *publishRequest) serveHTTP() { if !pr.rootpn.Valid() { pr.rw.WriteHeader(404) return } if pr.Debug() { pr.rw.Header().Set("Content-Type", "text/html") pr.pf("I am publish handler at base %q, serving root %q (permanode=%s), suffix %q, subreq %q<hr>", pr.base, pr.ph.rootName, pr.rootpn, html.EscapeString(pr.suffix), html.EscapeString(pr.subres)) } if err := pr.findSubject(); err != nil { if err == os.ErrNotExist { pr.rw.WriteHeader(404) return } logf("Error looking up %s/%q: %v", pr.rootpn, pr.suffix, err) pr.rw.WriteHeader(500) return } if pr.Debug() { pr.pf("<p><b>Subject:</b> <a href='/ui/?p=%s'>%s</a></p>", pr.subject, pr.subject) return } switch pr.subresourceType() { case "": pr.serveSubjectTemplate() case "b": // TODO: download a raw blob case "f": // file download pr.serveSubresFileDownload() case "i": // image, scaled pr.serveSubresImage() case "s": // static pr.req.URL.Path = pr.subres[len("/=s"):] if len(pr.req.URL.Path) <= 1 { http.Error(pr.rw, "Illegal URL.", http.StatusNotFound) return } file := pr.req.URL.Path[1:] server.ServeStaticFile(pr.rw, pr.req, pr.ph.staticFiles, file) case "z": pr.serveZip() default: pr.rw.WriteHeader(400) pr.pf("<p>Invalid or unsupported resource request.</p>") } }
func (pr *publishRequest) serveHTTP() { if !pr.rootpn.Valid() { pr.rw.WriteHeader(404) return } if pr.Debug() { pr.rw.Header().Set("Content-Type", "text/html") pr.pf("I am publish handler at base %q, serving root %q (permanode=%s), suffix %q, subreq %q<hr>", pr.base, pr.ph.rootName, pr.rootpn, html.EscapeString(pr.suffix), html.EscapeString(pr.subres)) } if err := pr.findSubject(); err != nil { if err == os.ErrNotExist { pr.rw.WriteHeader(404) return } logf("Error looking up %s/%q: %v", pr.rootpn, pr.suffix, err) pr.rw.WriteHeader(500) return } if pr.Debug() { pr.pf("<p><b>Subject:</b> <a href='/ui/?p=%s'>%s</a></p>", pr.subject, pr.subject) return } switch pr.subresourceType() { case "": // This should not happen too often as now that we have the // javascript code we're not hitting that code path often anymore // in a typical navigation. And the app handler is doing // request suppression anyway. // If needed, we can always do it in a narrower case later. if err := pr.ph.refreshMasterQuery(); err != nil { logf("Error refreshing master query: %v", err) pr.rw.WriteHeader(500) return } pr.serveSubjectTemplate() case "b": // TODO: download a raw blob case "f": // file download pr.serveSubresFileDownload() case "i": // image, scaled pr.serveSubresImage() case "s": // static pr.req.URL.Path = pr.subres[len("/=s"):] if len(pr.req.URL.Path) <= 1 { http.Error(pr.rw, "Illegal URL.", http.StatusNotFound) return } file := pr.req.URL.Path[1:] server.ServeStaticFile(pr.rw, pr.req, pr.ph.staticFiles, file) case "z": pr.serveZip() default: pr.rw.WriteHeader(400) pr.pf("<p>Invalid or unsupported resource request.</p>") } }