diff options
author | Frédéric Guillot <fred@miniflux.net> | 2018-01-02 22:04:48 -0800 |
---|---|---|
committer | Frédéric Guillot <fred@miniflux.net> | 2018-01-02 22:04:48 -0800 |
commit | 320d1b016747ba4501da9417d9ce5f99368a5768 (patch) | |
tree | 1054d96afde6022951b76cc4a09b78e1e3f05058 /daemon/server.go | |
parent | c39f2e1a8d2de6d412bcc673d29eb0f7a2d1f5f7 (diff) |
Refactor packages to have more idiomatic code base
Diffstat (limited to 'daemon/server.go')
-rw-r--r-- | daemon/server.go | 63 |
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 +} |