handler.go 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. // Copyright 2017 Frédéric Guillot. All rights reserved.
  2. // Use of this source code is governed by the Apache 2.0
  3. // license that can be found in the LICENSE file.
  4. package core
  5. import (
  6. "net/http"
  7. "time"
  8. "github.com/miniflux/miniflux/helper"
  9. "github.com/miniflux/miniflux/locale"
  10. "github.com/miniflux/miniflux/logger"
  11. "github.com/miniflux/miniflux/server/middleware"
  12. "github.com/miniflux/miniflux/server/template"
  13. "github.com/miniflux/miniflux/storage"
  14. "github.com/gorilla/mux"
  15. )
  16. // HandlerFunc is an application HTTP handler.
  17. type HandlerFunc func(ctx *Context, request *Request, response *Response)
  18. // Handler manages HTTP handlers and middlewares.
  19. type Handler struct {
  20. store *storage.Storage
  21. translator *locale.Translator
  22. template *template.Engine
  23. router *mux.Router
  24. middleware *middleware.Chain
  25. }
  26. // Use is a wrapper around an HTTP handler.
  27. func (h *Handler) Use(f HandlerFunc) http.Handler {
  28. return h.middleware.WrapFunc(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
  29. defer helper.ExecutionTime(time.Now(), r.URL.Path)
  30. logger.Debug("[HTTP] %s %s", r.Method, r.URL.Path)
  31. ctx := NewContext(w, r, h.store, h.router)
  32. request := NewRequest(w, r)
  33. response := NewResponse(w, r, h.template)
  34. if ctx.IsAuthenticated() {
  35. h.template.SetLanguage(ctx.UserLanguage())
  36. } else {
  37. h.template.SetLanguage("en_US")
  38. }
  39. f(ctx, request, response)
  40. }))
  41. }
  42. // NewHandler returns a new Handler.
  43. func NewHandler(store *storage.Storage, router *mux.Router, template *template.Engine, translator *locale.Translator, middleware *middleware.Chain) *Handler {
  44. return &Handler{
  45. store: store,
  46. translator: translator,
  47. router: router,
  48. template: template,
  49. middleware: middleware,
  50. }
  51. }