aboutsummaryrefslogtreecommitdiffhomepage
path: root/daemon/server.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 /daemon/server.go
parentc39f2e1a8d2de6d412bcc673d29eb0f7a2d1f5f7 (diff)
Refactor packages to have more idiomatic code base
Diffstat (limited to 'daemon/server.go')
-rw-r--r--daemon/server.go63
1 files changed, 63 insertions, 0 deletions
diff --git a/daemon/server.go b/daemon/server.go
new file mode 100644
index 0000000..dfdfb79
--- /dev/null
+++ b/daemon/server.go
@@ -0,0 +1,63 @@
+// Copyright 2018 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 daemon
+
+import (
+ "crypto/tls"
+ "net/http"
+ "time"
+
+ "github.com/miniflux/miniflux/config"
+ "github.com/miniflux/miniflux/logger"
+ "github.com/miniflux/miniflux/reader/feed"
+ "github.com/miniflux/miniflux/scheduler"
+ "github.com/miniflux/miniflux/storage"
+
+ "golang.org/x/crypto/acme/autocert"
+)
+
+func newServer(cfg *config.Config, store *storage.Storage, pool *scheduler.WorkerPool, feedHandler *feed.Handler) *http.Server {
+ certFile := cfg.Get("CERT_FILE", config.DefaultCertFile)
+ keyFile := cfg.Get("KEY_FILE", config.DefaultKeyFile)
+ certDomain := cfg.Get("CERT_DOMAIN", config.DefaultCertDomain)
+ certCache := cfg.Get("CERT_CACHE", config.DefaultCertCache)
+ server := &http.Server{
+ ReadTimeout: 5 * time.Second,
+ WriteTimeout: 10 * time.Second,
+ IdleTimeout: 60 * time.Second,
+ Addr: cfg.Get("LISTEN_ADDR", config.DefaultListenAddr),
+ Handler: routes(cfg, store, feedHandler, pool),
+ }
+
+ if certDomain != "" && certCache != "" {
+ cfg.IsHTTPS = true
+ server.Addr = ":https"
+ certManager := autocert.Manager{
+ Cache: autocert.DirCache(certCache),
+ Prompt: autocert.AcceptTOS,
+ HostPolicy: autocert.HostWhitelist(certDomain),
+ }
+
+ go func() {
+ logger.Info(`Listening on "%s" by using auto-configured certificate for "%s"`, server.Addr, certDomain)
+ logger.Fatal(server.Serve(certManager.Listener()).Error())
+ }()
+ } else if certFile != "" && keyFile != "" {
+ server.TLSConfig = &tls.Config{MinVersion: tls.VersionTLS12}
+ cfg.IsHTTPS = true
+
+ go func() {
+ logger.Info(`Listening on "%s" by using certificate "%s" and key "%s"`, server.Addr, certFile, keyFile)
+ logger.Fatal(server.ListenAndServeTLS(certFile, keyFile).Error())
+ }()
+ } else {
+ go func() {
+ logger.Info(`Listening on "%s" without TLS`, server.Addr)
+ logger.Fatal(server.ListenAndServe().Error())
+ }()
+ }
+
+ return server
+}