diff options
Diffstat (limited to 'svc')
-rw-r--r-- | svc/handlers.go | 69 | ||||
-rw-r--r-- | svc/handlers_test.go | 8 | ||||
-rw-r--r-- | svc/svc.go | 4 |
3 files changed, 38 insertions, 43 deletions
diff --git a/svc/handlers.go b/svc/handlers.go index f83d4b2..d3b8d8a 100644 --- a/svc/handlers.go +++ b/svc/handlers.go @@ -17,59 +17,58 @@ func getEtag(modtime time.Time) string { return fmt.Sprintf("%x", sha256.Sum256(shabytes)) } -// handles "/" -func indexHandler(w http.ResponseWriter, r *http.Request) { +func sendStaticEtag(w http.ResponseWriter, isCSS bool) { + if isCSS { + etag := getEtag(staticCache.cssMod) + w.Header().Set("ETag", "\""+etag+"\"") + w.Header().Set("Content-Time", txtutf8) + return + } + etag := getEtag(staticCache.indexMod) + w.Header().Set("ETag", "\""+etag+"\"") + w.Header().Set("Content-Time", htmlutf8) +} +// handles "/" and "/css" +func staticHandler(w http.ResponseWriter, r *http.Request) { pingAssets() // Take the hex-encoded sha256 sum of the index template's mod time // to send as an ETag. If an error occurred when grabbing the file info, // the ETag will be empty. staticCache.mu.RLock() - etag := getEtag(staticCache.indexMod) - w.Header().Set("ETag", "\""+etag+"\"") - w.Header().Set("Content-Type", htmlutf8) - - _, err := w.Write(staticCache.index) - staticCache.mu.RUnlock() - if err != nil { - errHTTP(w, r, err, http.StatusInternalServerError) - return + switch r.URL.Path { + case "/css": + sendStaticEtag(w, true) + _, err := w.Write(staticCache.css) + if err != nil { + staticCache.mu.RUnlock() + errHTTP(w, r, err, http.StatusInternalServerError) + return + } + default: + sendStaticEtag(w, false) + _, err := w.Write(staticCache.index) + if err != nil { + staticCache.mu.RUnlock() + errHTTP(w, r, err, http.StatusInternalServerError) + return + } } - - log200(r) -} - -// Serving the stylesheet virtually because -// files aren't served directly in getwtxt. -func cssHandler(w http.ResponseWriter, r *http.Request) { - - pingAssets() - - staticCache.mu.RLock() - etag := getEtag(staticCache.cssMod) - w.Header().Set("ETag", "\""+etag+"\"") - w.Header().Set("Content-Type", cssutf8) - - _, err := w.Write(staticCache.css) staticCache.mu.RUnlock() - if err != nil { - errHTTP(w, r, err, http.StatusInternalServerError) - return - } log200(r) } // handles "/api" func apiBaseHandler(w http.ResponseWriter, r *http.Request) { - indexHandler(w, r) + staticHandler(w, r) } // handles "/api/plain" // maybe add json/xml support later func apiFormatHandler(w http.ResponseWriter, r *http.Request) { - indexHandler(w, r) + staticHandler(w, r) } func apiAllTweetsHandler(w http.ResponseWriter, r *http.Request) { @@ -95,7 +94,6 @@ func apiAllTweetsHandler(w http.ResponseWriter, r *http.Request) { // handles "/api/plain/(users|mentions|tweets)" func apiEndpointHandler(w http.ResponseWriter, r *http.Request) { - errLog("Error when parsing query values: ", r.ParseForm()) if r.FormValue("q") != "" || r.FormValue("url") != "" { @@ -165,7 +163,6 @@ func apiEndpointPOSTHandler(w http.ResponseWriter, r *http.Request) { // handles "/api/plain/tags" func apiTagsBaseHandler(w http.ResponseWriter, r *http.Request) { - out, err := twtxtCache.QueryInStatus("#") if err != nil { errHTTP(w, r, err, http.StatusInternalServerError) @@ -190,12 +187,10 @@ func apiTagsBaseHandler(w http.ResponseWriter, r *http.Request) { // handles "/api/plain/tags/[a-zA-Z0-9]+" func apiTagsHandler(w http.ResponseWriter, r *http.Request) { - vars := mux.Vars(r) tags := vars["tags"] out := compositeStatusQuery("#"+tags, r) - out = registry.ReduceToPage(1, out) data := parseQueryOut(out) diff --git a/svc/handlers_test.go b/svc/handlers_test.go index c393957..455950f 100644 --- a/svc/handlers_test.go +++ b/svc/handlers_test.go @@ -10,7 +10,7 @@ import ( "testing" ) -// The first three are testing whether the landing page is +// The first few are testing whether the landing page is // being sent correctly. If i change the base behavior of // /api // /api/plain @@ -23,7 +23,7 @@ func basicHandlerTest(path string, name string, t *testing.T) { w := httptest.NewRecorder() req := httptest.NewRequest("GET", path, nil) - indexHandler(w, req) + staticHandler(w, req) resp := w.Result() defer resp.Body.Close() @@ -51,7 +51,7 @@ func Benchmark_indexHandler(b *testing.B) { b.ResetTimer() for i := 0; i < b.N; i++ { - indexHandler(w, req) + staticHandler(w, req) } } func Test_apiBaseHandler(t *testing.T) { @@ -224,7 +224,7 @@ func Test_cssHandler(t *testing.T) { req := httptest.NewRequest("GET", "http://localhost"+testport+"/css", nil) t.Run(name, func(t *testing.T) { - cssHandler(w, req) + staticHandler(w, req) resp := w.Result() defer resp.Body.Close() diff --git a/svc/svc.go b/svc/svc.go index 6c9ee58..6284239 100644 --- a/svc/svc.go +++ b/svc/svc.go @@ -50,11 +50,11 @@ func newServer(port string, index *mux.Router) *http.Server { func setIndexRouting(index *mux.Router) { index.Path("/"). Methods("GET", "HEAD"). - HandlerFunc(indexHandler) + HandlerFunc(staticHandler) index.Path("/css"). Methods("GET", "HEAD"). - HandlerFunc(cssHandler) + HandlerFunc(staticHandler) index.Path("/api"). Methods("GET", "HEAD"). |