diff --git a/go.mod b/go.mod index 6b49d21..50f476e 100644 --- a/go.mod +++ b/go.mod @@ -12,7 +12,7 @@ require ( github.com/dchest/captcha v0.0.0-20200903113550-03f5f0333e1f github.com/dgrijalva/jwt-go v3.2.0+incompatible github.com/elnormous/contenttype v0.0.0-20210110050721-79150725153f - github.com/go-chi/chi/v5 v5.0.0 + github.com/go-chi/chi/v5 v5.0.1 github.com/go-fed/httpsig v1.1.0 github.com/go-sql-driver/mysql v1.5.0 // indirect github.com/gofrs/flock v0.8.0 // indirect diff --git a/go.sum b/go.sum index cf199ec..9448df9 100644 --- a/go.sum +++ b/go.sum @@ -71,8 +71,8 @@ github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMo github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/go-chi/chi/v5 v5.0.0 h1:DBPx88FjZJH3FsICfDAfIfnb7XxKIYVGG6lOPlhENAg= -github.com/go-chi/chi/v5 v5.0.0/go.mod h1:BBug9lr0cqtdAhsu6R4AAdvufI0/XBzAQSsUqJpoZOs= +github.com/go-chi/chi/v5 v5.0.1 h1:ALxjCrTf1aflOlkhMnCUP86MubbWFrzB3gkRPReLpTo= +github.com/go-chi/chi/v5 v5.0.1/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8= github.com/go-fed/httpsig v1.1.0 h1:9M+hb0jkEICD8/cAiNqEB66R87tTINszBRTjwjQzWcI= github.com/go-fed/httpsig v1.1.0/go.mod h1:RCMrTZvN1bJYtofsG4rd5NaO5obxQ5xBkdiS7xsT7bM= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= diff --git a/http.go b/http.go index 1059e31..aeef0ca 100644 --- a/http.go +++ b/http.go @@ -3,11 +3,13 @@ package main import ( "compress/flate" "fmt" + "log" "net/http" "net/url" "strconv" "strings" "sync/atomic" + "time" "github.com/caddyserver/certmagic" "github.com/dchest/captcha" @@ -81,6 +83,8 @@ const paginationPath = "/page/{page:[0-9-]+}" const feedPath = ".{feed:rss|json|atom}" func buildHandler() (http.Handler, error) { + startTime := time.Now() + r := chi.NewRouter() // Private mode @@ -316,37 +320,53 @@ func buildHandler() (http.Handler, error) { r.Group(func(r chi.Router) { r.Use(privateModeHandler...) r.Use(cacheMiddleware) + already := map[string]bool{} for _, d := range dates { // Year yearPath := blogPath + "/" + fmt.Sprintf("%0004d", d.year) - yearHandler := serveDate(blog, yearPath, d.year, 0, 0) - r.Get(yearPath, yearHandler) - r.Get(yearPath+feedPath, yearHandler) - r.Get(yearPath+paginationPath, yearHandler) + if !already[yearPath] { + yearHandler := serveDate(blog, yearPath, d.year, 0, 0) + r.Get(yearPath, yearHandler) + r.Get(yearPath+feedPath, yearHandler) + r.Get(yearPath+paginationPath, yearHandler) + already[yearPath] = true + } // Specific month monthPath := yearPath + "/" + fmt.Sprintf("%02d", d.month) - monthHandler := serveDate(blog, monthPath, d.year, d.month, 0) - r.Get(monthPath, monthHandler) - r.Get(monthPath+feedPath, monthHandler) - r.Get(monthPath+paginationPath, monthHandler) + if !already[monthPath] { + monthHandler := serveDate(blog, monthPath, d.year, d.month, 0) + r.Get(monthPath, monthHandler) + r.Get(monthPath+feedPath, monthHandler) + r.Get(monthPath+paginationPath, monthHandler) + already[monthPath] = true + } // Specific day dayPath := monthPath + "/" + fmt.Sprintf("%02d", d.day) - dayHandler := serveDate(blog, monthPath, d.year, d.month, d.day) - r.Get(dayPath, dayHandler) - r.Get(dayPath+feedPath, dayHandler) - r.Get(dayPath+paginationPath, dayHandler) + if !already[dayPath] { + dayHandler := serveDate(blog, monthPath, d.year, d.month, d.day) + r.Get(dayPath, dayHandler) + r.Get(dayPath+feedPath, dayHandler) + r.Get(dayPath+paginationPath, dayHandler) + already[dayPath] = true + } // Generic month genericMonthPath := blogPath + "/x/" + fmt.Sprintf("%02d", d.month) - genericMonthHandler := serveDate(blog, genericMonthPath, 0, d.month, 0) - r.Get(genericMonthPath, genericMonthHandler) - r.Get(genericMonthPath+feedPath, genericMonthHandler) - r.Get(genericMonthPath+paginationPath, genericMonthHandler) + if !already[genericMonthPath] { + genericMonthHandler := serveDate(blog, genericMonthPath, 0, d.month, 0) + r.Get(genericMonthPath, genericMonthHandler) + r.Get(genericMonthPath+feedPath, genericMonthHandler) + r.Get(genericMonthPath+paginationPath, genericMonthHandler) + already[genericMonthPath] = true + } // Specific day genericMonthDayPath := genericMonthPath + "/" + fmt.Sprintf("%02d", d.day) - genericMonthDayHandler := serveDate(blog, genericMonthDayPath, 0, d.month, d.day) - r.Get(genericMonthDayPath, genericMonthDayHandler) - r.Get(genericMonthDayPath+feedPath, genericMonthDayHandler) - r.Get(genericMonthDayPath+paginationPath, genericMonthDayHandler) + if !already[genericMonthDayPath] { + genericMonthDayHandler := serveDate(blog, genericMonthDayPath, 0, d.month, d.day) + r.Get(genericMonthDayPath, genericMonthDayHandler) + r.Get(genericMonthDayPath+feedPath, genericMonthDayHandler) + r.Get(genericMonthDayPath+paginationPath, genericMonthDayHandler) + already[genericMonthDayPath] = true + } } }) @@ -424,6 +444,8 @@ func buildHandler() (http.Handler, error) { serveError(rw, r, "", http.StatusMethodNotAllowed) }) + log.Println("Building handler took", time.Since(startTime)) + return r, nil }