diff options
Diffstat (limited to 'service/http/config.go')
-rw-r--r-- | service/http/config.go | 48 |
1 files changed, 46 insertions, 2 deletions
diff --git a/service/http/config.go b/service/http/config.go index b11d807c..d9adf727 100644 --- a/service/http/config.go +++ b/service/http/config.go @@ -5,13 +5,30 @@ import ( "github.com/spiral/roadrunner" "github.com/spiral/roadrunner/service" "strings" + "os" + "fmt" ) // Config configures RoadRunner HTTP server. type Config struct { - // Address and port to handle as http server. + // Port and port to handle as http server. Address string + // SSL defines https server options. + SSL struct { + // Port to listen as HTTPS server, defaults to 443. + Port int + + // Redirect when enabled forces all http connections to switch to https. + Redirect bool + + // Key defined private server key. + Key string + + // Cert is https certificate. + Cert string + } + // MaxRequest specified max size for payload body in megabytes, set 0 to unlimited. MaxRequest int64 @@ -22,6 +39,11 @@ type Config struct { Workers *roadrunner.ServerConfig } +// EnableTLS returns true if rr must listen TLS connections. +func (c *Config) EnableTLS() bool { + return c.SSL.Key != "" || c.SSL.Cert != "" +} + // Hydrate must populate Config values using given Config source. Must return error if Config is not valid. func (c *Config) Hydrate(cfg service.Config) error { if c.Workers == nil { @@ -32,6 +54,10 @@ func (c *Config) Hydrate(cfg service.Config) error { c.Uploads = &UploadsConfig{} } + if c.SSL.Port == 0 { + c.SSL.Port = 443 + } + c.Uploads.InitDefaults() c.Workers.InitDefaults() @@ -67,7 +93,25 @@ func (c *Config) Valid() error { } if !strings.Contains(c.Address, ":") { - return errors.New("mailformed server address") + return errors.New("mailformed http server address") + } + + if c.EnableTLS() { + if _, err := os.Stat(c.SSL.Key); err != nil { + if os.IsNotExist(err) { + return fmt.Errorf("key file '%s' does not exists", c.SSL.Key) + } + + return err + } + + if _, err := os.Stat(c.SSL.Cert); err != nil { + if os.IsNotExist(err) { + return fmt.Errorf("cert file '%s' does not exists", c.SSL.Key) + } + + return err + } } return nil |