diff options
Diffstat (limited to 'server/core/handler.go')
-rw-r--r-- | server/core/handler.go | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/server/core/handler.go b/server/core/handler.go new file mode 100644 index 00000000..43205647 --- /dev/null +++ b/server/core/handler.go @@ -0,0 +1,57 @@ +// Copyright 2017 Frédéric Guillot. All rights reserved. +// Use of this source code is governed by the Apache 2.0 +// license that can be found in the LICENSE file. + +package core + +import ( + "github.com/miniflux/miniflux2/helper" + "github.com/miniflux/miniflux2/locale" + "github.com/miniflux/miniflux2/server/middleware" + "github.com/miniflux/miniflux2/server/template" + "github.com/miniflux/miniflux2/storage" + "log" + "net/http" + "time" + + "github.com/gorilla/mux" +) + +type HandlerFunc func(ctx *Context, request *Request, response *Response) + +type Handler struct { + store *storage.Storage + translator *locale.Translator + template *template.TemplateEngine + router *mux.Router + middleware *middleware.MiddlewareChain +} + +func (h *Handler) Use(f HandlerFunc) http.Handler { + return h.middleware.WrapFunc(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + defer helper.ExecutionTime(time.Now(), r.URL.Path) + log.Println(r.Method, r.URL.Path) + + ctx := NewContext(w, r, h.store, h.router) + request := NewRequest(w, r) + response := NewResponse(w, r, h.template) + + if ctx.IsAuthenticated() { + h.template.SetLanguage(ctx.GetUserLanguage()) + } else { + h.template.SetLanguage("en_US") + } + + f(ctx, request, response) + })) +} + +func NewHandler(store *storage.Storage, router *mux.Router, template *template.TemplateEngine, translator *locale.Translator, middleware *middleware.MiddlewareChain) *Handler { + return &Handler{ + store: store, + translator: translator, + router: router, + template: template, + middleware: middleware, + } +} |