server.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  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 server
  5. import (
  6. "crypto/tls"
  7. "log"
  8. "net/http"
  9. "time"
  10. "github.com/gorilla/mux"
  11. "github.com/miniflux/miniflux2/scheduler"
  12. "github.com/miniflux/miniflux2/config"
  13. "github.com/miniflux/miniflux2/reader/feed"
  14. "github.com/miniflux/miniflux2/storage"
  15. )
  16. // NewServer returns a new HTTP server.
  17. func NewServer(cfg *config.Config, store *storage.Storage, pool *scheduler.WorkerPool, feedHandler *feed.Handler) *http.Server {
  18. return startServer(cfg, getRoutes(cfg, store, feedHandler, pool))
  19. }
  20. func startServer(cfg *config.Config, handler *mux.Router) *http.Server {
  21. certFile := cfg.Get("CERT_FILE", config.DefaultCertFile)
  22. keyFile := cfg.Get("KEY_FILE", config.DefaultKeyFile)
  23. server := &http.Server{
  24. ReadTimeout: 5 * time.Second,
  25. WriteTimeout: 10 * time.Second,
  26. IdleTimeout: 60 * time.Second,
  27. Addr: cfg.Get("LISTEN_ADDR", config.DefaultListenAddr),
  28. Handler: handler,
  29. }
  30. if certFile != "" && keyFile != "" {
  31. server.TLSConfig = &tls.Config{
  32. MinVersion: tls.VersionTLS12,
  33. }
  34. go func() {
  35. log.Printf(`Listening on "%s" by using certificate "%s" and key "%s"`, server.Addr, certFile, keyFile)
  36. if err := server.ListenAndServeTLS(certFile, keyFile); err != nil {
  37. log.Fatalln(err)
  38. }
  39. }()
  40. } else {
  41. go func() {
  42. log.Printf(`Listening on "%s" without TLS`, server.Addr)
  43. if err := server.ListenAndServe(); err != nil {
  44. log.Fatalln(err)
  45. }
  46. }()
  47. }
  48. return server
  49. }