aboutsummaryrefslogtreecommitdiff
path: root/http/handler/handler.go
diff options
context:
space:
mode:
authorGravatar Frédéric Guillot <fred@miniflux.net> 2018-01-02 22:04:48 -0800
committerGravatar Frédéric Guillot <fred@miniflux.net> 2018-01-02 22:04:48 -0800
commit320d1b016747ba4501da9417d9ce5f99368a5768 (patch)
tree1054d96afde6022951b76cc4a09b78e1e3f05058 /http/handler/handler.go
parentc39f2e1a8d2de6d412bcc673d29eb0f7a2d1f5f7 (diff)
downloadv2-320d1b016747ba4501da9417d9ce5f99368a5768.tar.gz
v2-320d1b016747ba4501da9417d9ce5f99368a5768.tar.zst
v2-320d1b016747ba4501da9417d9ce5f99368a5768.zip
Refactor packages to have more idiomatic code base
Diffstat (limited to 'http/handler/handler.go')
-rw-r--r--http/handler/handler.go70
1 files changed, 70 insertions, 0 deletions
diff --git a/http/handler/handler.go b/http/handler/handler.go
new file mode 100644
index 00000000..3dd1d1b1
--- /dev/null
+++ b/http/handler/handler.go
@@ -0,0 +1,70 @@
+// 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 handler
+
+import (
+ "net/http"
+ "time"
+
+ "github.com/miniflux/miniflux/config"
+ "github.com/miniflux/miniflux/http/middleware"
+ "github.com/miniflux/miniflux/locale"
+ "github.com/miniflux/miniflux/logger"
+ "github.com/miniflux/miniflux/storage"
+ "github.com/miniflux/miniflux/template"
+ "github.com/miniflux/miniflux/timer"
+
+ "github.com/gorilla/mux"
+ "github.com/tomasen/realip"
+)
+
+// ControllerFunc is an application HTTP handler.
+type ControllerFunc func(ctx *Context, request *Request, response *Response)
+
+// Handler manages HTTP handlers and middlewares.
+type Handler struct {
+ cfg *config.Config
+ store *storage.Storage
+ translator *locale.Translator
+ template *template.Engine
+ router *mux.Router
+ middleware *middleware.Chain
+}
+
+// Use is a wrapper around an HTTP handler.
+func (h *Handler) Use(f ControllerFunc) http.Handler {
+ return h.middleware.WrapFunc(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ defer timer.ExecutionTime(time.Now(), r.URL.Path)
+ logger.Debug("[HTTP] %s %s %s", realip.RealIP(r), r.Method, r.URL.Path)
+
+ if r.Header.Get("X-Forwarded-Proto") == "https" {
+ h.cfg.IsHTTPS = true
+ }
+
+ ctx := NewContext(r, h.store, h.router, h.translator)
+ request := NewRequest(r)
+ response := NewResponse(w, r, h.template)
+
+ if ctx.IsAuthenticated() {
+ h.template.SetLanguage(ctx.UserLanguage())
+ } else {
+ h.template.SetLanguage("en_US")
+ }
+
+ f(ctx, request, response)
+ }))
+}
+
+// NewHandler returns a new Handler.
+func NewHandler(cfg *config.Config, store *storage.Storage, router *mux.Router, template *template.Engine, translator *locale.Translator, middleware *middleware.Chain) *Handler {
+ return &Handler{
+ cfg: cfg,
+ store: store,
+ translator: translator,
+ router: router,
+ template: template,
+ middleware: middleware,
+ }
+}