webdav: refactor server initialization

This commit is contained in:
Nicola Murino
2021-01-03 09:51:54 +01:00
parent 1e1c46ae1b
commit 4b522a2455
7 changed files with 67 additions and 62 deletions

View File

@@ -32,34 +32,13 @@ var (
type webDavServer struct {
config *Configuration
certMgr *common.CertManager
status ServiceStatus
binding Binding
}
func newServer(config *Configuration, configDir string) (*webDavServer, error) {
var err error
server := &webDavServer{
config: config,
certMgr: nil,
}
certificateFile := getConfigPath(config.CertificateFile, configDir)
certificateKeyFile := getConfigPath(config.CertificateKeyFile, configDir)
if certificateFile != "" && certificateKeyFile != "" {
server.certMgr, err = common.NewCertManager(certificateFile, certificateKeyFile, logSender)
if err != nil {
return server, err
}
if err := server.certMgr.LoadRootCAs(config.CACertificates, configDir); err != nil {
return server, err
}
}
return server, nil
}
func (s *webDavServer) listenAndServe(binding Binding) error {
func (s *webDavServer) listenAndServe() error {
httpServer := &http.Server{
Addr: binding.GetAddress(),
Handler: server,
Addr: s.binding.GetAddress(),
Handler: s,
ReadHeaderTimeout: 30 * time.Second,
IdleTimeout: 120 * time.Second,
MaxHeaderBytes: 1 << 16, // 64KB
@@ -74,22 +53,24 @@ func (s *webDavServer) listenAndServe(binding Binding) error {
AllowCredentials: s.config.Cors.AllowCredentials,
OptionsPassthrough: true,
})
httpServer.Handler = c.Handler(server)
httpServer.Handler = c.Handler(s)
}
if s.certMgr != nil && binding.EnableHTTPS {
server.status.Bindings = append(server.status.Bindings, binding)
if certMgr != nil && s.binding.EnableHTTPS {
serviceStatus.Bindings = append(serviceStatus.Bindings, s.binding)
httpServer.TLSConfig = &tls.Config{
GetCertificate: s.certMgr.GetCertificateFunc(),
GetCertificate: certMgr.GetCertificateFunc(),
MinVersion: tls.VersionTLS12,
}
if binding.ClientAuthType == 1 {
httpServer.TLSConfig.ClientCAs = s.certMgr.GetRootCAs()
if s.binding.ClientAuthType == 1 {
httpServer.TLSConfig.ClientCAs = certMgr.GetRootCAs()
httpServer.TLSConfig.ClientAuth = tls.RequireAndVerifyClientCert
}
logger.Info(logSender, "", "starting HTTPS serving, binding: %v", s.binding.GetAddress())
return httpServer.ListenAndServeTLS("", "")
}
binding.EnableHTTPS = false
server.status.Bindings = append(server.status.Bindings, binding)
s.binding.EnableHTTPS = false
serviceStatus.Bindings = append(serviceStatus.Bindings, s.binding)
logger.Info(logSender, "", "starting HTTP serving, binding: %v", s.binding.GetAddress())
return httpServer.ListenAndServe()
}