summaryrefslogtreecommitdiff
path: root/src/gmi/gmi.go
diff options
context:
space:
mode:
authorBrian Picciano <mediocregopher@gmail.com>2023-01-23 22:30:30 +0100
committerBrian Picciano <mediocregopher@gmail.com>2023-01-23 22:31:19 +0100
commitc1c1bb2c4c1baf37dbcce96f144966d4ada65ac5 (patch)
treec69d7bf531734f6435c2e3e8edd2e3ae50c2f5e8 /src/gmi/gmi.go
parent024f51488614919240a71cae1cae1c8fe6df1229 (diff)
Implement cache and logger middlewares for gemini
Diffstat (limited to 'src/gmi/gmi.go')
-rw-r--r--src/gmi/gmi.go31
1 files changed, 27 insertions, 4 deletions
diff --git a/src/gmi/gmi.go b/src/gmi/gmi.go
index 6835ea0..c2a32aa 100644
--- a/src/gmi/gmi.go
+++ b/src/gmi/gmi.go
@@ -13,6 +13,7 @@ import (
"git.sr.ht/~adnano/go-gemini"
"git.sr.ht/~adnano/go-gemini/certificate"
+ "github.com/mediocregopher/blog.mediocregopher.com/srv/cache"
"github.com/mediocregopher/blog.mediocregopher.com/srv/cfg"
"github.com/mediocregopher/blog.mediocregopher.com/srv/post"
"github.com/mediocregopher/mediocre-go-lib/v2/mctx"
@@ -23,6 +24,7 @@ import (
// unless otherwise noted.
type Params struct {
Logger *mlog.Logger
+ Cache cache.Cache
PostStore post.Store
PostAssetStore post.AssetStore
@@ -108,10 +110,11 @@ func New(params Params) (API, error) {
go func() {
- ctx := mctx.WithAnnotator(context.Background(), &a.params)
+ err := a.srv.ListenAndServe(context.Background())
- err := a.srv.ListenAndServe(ctx)
if err != nil && !errors.Is(err, context.Canceled) {
+
+ ctx := mctx.WithAnnotator(context.Background(), &a.params)
a.params.Logger.Fatal(ctx, "serving gemini server", err)
}
}()
@@ -123,6 +126,26 @@ func (a *api) Shutdown(ctx context.Context) error {
return a.srv.Shutdown(ctx)
}
+func (a *api) logReqMiddleware(h gemini.Handler) gemini.Handler {
+
+ type logCtxKey string
+
+ return gemini.HandlerFunc(func(
+ ctx context.Context,
+ rw gemini.ResponseWriter,
+ r *gemini.Request,
+ ) {
+
+ ctx = mctx.Annotate(ctx,
+ logCtxKey("url"), r.URL.String(),
+ )
+
+ h.ServeGemini(ctx, rw, r)
+
+ a.params.Logger.Info(ctx, "handled gemini request")
+ })
+}
+
func indexMiddleware(h gemini.Handler) gemini.Handler {
return gemini.HandlerFunc(func(
@@ -212,8 +235,8 @@ func (a *api) handler() (gemini.Handler, error) {
h = mux
h = indexMiddleware(h)
- // TODO logging
- // TODO caching
+ h = a.logReqMiddleware(h)
+ h = cacheMiddleware(a.params.Cache)(h)
return h, nil
}