aboutsummaryrefslogtreecommitdiff
path: root/server/core/handler.go
diff options
context:
space:
mode:
Diffstat (limited to 'server/core/handler.go')
-rw-r--r--server/core/handler.go57
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,
+ }
+}