diff options
Diffstat (limited to 'internal')
-rw-r--r-- | internal/config/config.go | 17 | ||||
-rw-r--r-- | internal/config/default.go | 7 | ||||
-rw-r--r-- | internal/config/letsencrypt.go | 8 | ||||
-rw-r--r-- | internal/router/router.go | 22 |
4 files changed, 35 insertions, 19 deletions
diff --git a/internal/config/config.go b/internal/config/config.go index 117b8efb5..6f943d684 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -50,6 +50,7 @@ type Config struct { Host string `yaml:"host"` AccountDomain string `yaml:"accountDomain"` Protocol string `yaml:"protocol"` + Port int `yaml:"port"` DBConfig *DBConfig `yaml:"db"` TemplateConfig *TemplateConfig `yaml:"template"` AccountsConfig *AccountsConfig `yaml:"accounts"` @@ -150,6 +151,10 @@ func (c *Config) ParseCLIFlags(f KeyedFlags, version string) error { return errors.New("protocol was not set") } + if c.Port == 0 || f.IsSet(fn.Port) { + c.Port = f.Int(fn.Port) + } + // db flags if c.DBConfig.Type == "" || f.IsSet(fn.DbType) { c.DBConfig.Type = f.String(fn.DbType) @@ -262,6 +267,10 @@ func (c *Config) ParseCLIFlags(f KeyedFlags, version string) error { c.LetsEncryptConfig.Enabled = f.Bool(fn.LetsEncryptEnabled) } + if c.LetsEncryptConfig.Port == 0 || f.IsSet(fn.LetsEncryptPort) { + c.LetsEncryptConfig.Port = f.Int(fn.LetsEncryptPort) + } + if c.LetsEncryptConfig.CertDir == "" || f.IsSet(fn.LetsEncryptCertDir) { c.LetsEncryptConfig.CertDir = f.String(fn.LetsEncryptCertDir) } @@ -329,6 +338,7 @@ type Flags struct { Host string AccountDomain string Protocol string + Port string DbType string DbAddress string @@ -366,6 +376,7 @@ type Flags struct { LetsEncryptEnabled string LetsEncryptCertDir string LetsEncryptEmailAddress string + LetsEncryptPort string OIDCEnabled string OIDCIdpName string @@ -384,6 +395,7 @@ type Defaults struct { Host string AccountDomain string Protocol string + Port int SoftwareVersion string DbType string @@ -422,6 +434,7 @@ type Defaults struct { LetsEncryptEnabled bool LetsEncryptCertDir string LetsEncryptEmailAddress string + LetsEncryptPort int OIDCEnabled bool OIDCIdpName string @@ -442,6 +455,7 @@ func GetFlagNames() Flags { Host: "host", AccountDomain: "account-domain", Protocol: "protocol", + Port: "port", DbType: "db-type", DbAddress: "db-address", @@ -477,6 +491,7 @@ func GetFlagNames() Flags { StatusesMaxMediaFiles: "statuses-max-media-files", LetsEncryptEnabled: "letsencrypt-enabled", + LetsEncryptPort: "letsencrypt-port", LetsEncryptCertDir: "letsencrypt-cert-dir", LetsEncryptEmailAddress: "letsencrypt-email", @@ -500,6 +515,7 @@ func GetEnvNames() Flags { Host: "GTS_HOST", AccountDomain: "GTS_ACCOUNT_DOMAIN", Protocol: "GTS_PROTOCOL", + Port: "GTS_PORT", DbType: "GTS_DB_TYPE", DbAddress: "GTS_DB_ADDRESS", @@ -535,6 +551,7 @@ func GetEnvNames() Flags { StatusesMaxMediaFiles: "GTS_STATUSES_MAX_MEDIA_FILES", LetsEncryptEnabled: "GTS_LETSENCRYPT_ENABLED", + LetsEncryptPort: "GTS_LETSENCRYPT_PORT", LetsEncryptCertDir: "GTS_LETSENCRYPT_CERT_DIR", LetsEncryptEmailAddress: "GTS_LETSENCRYPT_EMAIL", diff --git a/internal/config/default.go b/internal/config/default.go index 61940eff4..35e9f1ad2 100644 --- a/internal/config/default.go +++ b/internal/config/default.go @@ -10,6 +10,7 @@ func TestDefault() *Config { ApplicationName: defaults.ApplicationName, Host: defaults.Host, Protocol: defaults.Protocol, + Port: defaults.Port, SoftwareVersion: defaults.SoftwareVersion, DBConfig: &DBConfig{ Type: defaults.DbType, @@ -51,6 +52,7 @@ func TestDefault() *Config { }, LetsEncryptConfig: &LetsEncryptConfig{ Enabled: defaults.LetsEncryptEnabled, + Port: defaults.LetsEncryptPort, CertDir: defaults.LetsEncryptCertDir, EmailAddress: defaults.LetsEncryptEmailAddress, }, @@ -115,6 +117,7 @@ func Default() *Config { }, LetsEncryptConfig: &LetsEncryptConfig{ Enabled: defaults.LetsEncryptEnabled, + Port: defaults.LetsEncryptPort, CertDir: defaults.LetsEncryptCertDir, EmailAddress: defaults.LetsEncryptEmailAddress, }, @@ -140,6 +143,7 @@ func GetDefaults() Defaults { Host: "", AccountDomain: "", Protocol: "https", + Port: 8080, DbType: "postgres", DbAddress: "localhost", @@ -175,6 +179,7 @@ func GetDefaults() Defaults { StatusesMaxMediaFiles: 6, LetsEncryptEnabled: true, + LetsEncryptPort: 80, LetsEncryptCertDir: "/gotosocial/storage/certs", LetsEncryptEmailAddress: "", @@ -197,6 +202,7 @@ func GetTestDefaults() Defaults { Host: "localhost:8080", AccountDomain: "", Protocol: "http", + Port: 8080, DbType: "postgres", DbAddress: "localhost", @@ -230,6 +236,7 @@ func GetTestDefaults() Defaults { StatusesMaxMediaFiles: 6, LetsEncryptEnabled: false, + LetsEncryptPort: 0, LetsEncryptCertDir: "", LetsEncryptEmailAddress: "", diff --git a/internal/config/letsencrypt.go b/internal/config/letsencrypt.go index ae40cb878..a71172635 100644 --- a/internal/config/letsencrypt.go +++ b/internal/config/letsencrypt.go @@ -3,9 +3,11 @@ package config // LetsEncryptConfig wraps everything needed to manage letsencrypt certificates from within gotosocial. type LetsEncryptConfig struct { // Should letsencrypt certificate fetching be enabled? - Enabled bool + Enabled bool `yaml:"enabled"` + // What port should the server listen for letsencrypt challenges on? + Port int `yaml:"port"` // Where should certificates be stored? - CertDir string + CertDir string `yaml:"certDir"` // Email address to pass to letsencrypt for notifications about certificate expiry etc. - EmailAddress string + EmailAddress string `yaml:"emailAddress"` } diff --git a/internal/router/router.go b/internal/router/router.go index 100e0b38e..64d7267be 100644 --- a/internal/router/router.go +++ b/internal/router/router.go @@ -68,30 +68,24 @@ func (r *router) AttachStaticFS(relativePath string, fs http.FileSystem) { r.engine.StaticFS(relativePath, fs) } -// Start starts the router nicely. -// -// Different ports and handlers will be served depending on whether letsencrypt is enabled or not. -// If it is enabled, then port 80 will be used for handling LE requests, and port 443 will be used -// for serving actual requests. -// -// If letsencrypt is not being used, then port 8080 only will be used for serving requests. +// Start starts the router nicely. It will serve two handlers if letsencrypt is enabled, and only the web/API handler if letsencrypt is not enabled. func (r *router) Start() { if r.config.LetsEncryptConfig.Enabled { - // serve the http handler on port 80 for receiving letsencrypt requests and solving their devious riddles + // serve the http handler on the selected letsencrypt port, for receiving letsencrypt requests and solving their devious riddles go func() { - if err := http.ListenAndServe(":http", r.certManager.HTTPHandler(http.HandlerFunc(httpsRedirect))); err != nil && err != http.ErrServerClosed { + if err := http.ListenAndServe(fmt.Sprintf(":%d", r.config.LetsEncryptConfig.Port), r.certManager.HTTPHandler(http.HandlerFunc(httpsRedirect))); err != nil && err != http.ErrServerClosed { r.logger.Fatalf("listen: %s", err) } }() - // and serve the actual TLS handler on port 443 + // and serve the actual TLS handler go func() { if err := r.srv.ListenAndServeTLS("", ""); err != nil && err != http.ErrServerClosed { r.logger.Fatalf("listen: %s", err) } }() } else { - // no tls required so just serve on port 8080 + // no tls required go func() { if err := r.srv.ListenAndServe(); err != nil && err != http.ErrServerClosed { r.logger.Fatalf("listen: %s", err) @@ -148,6 +142,7 @@ func New(cfg *config.Config, db db.DB, logger *logrus.Logger) (Router, error) { // create the http server here, passing the gin engine as handler s := &http.Server{ + Addr: fmt.Sprintf(":%d", cfg.Port), Handler: engine, ReadTimeout: readTimeout, WriteTimeout: writeTimeout, @@ -167,12 +162,7 @@ func New(cfg *config.Config, db db.DB, logger *logrus.Logger) (Router, error) { Cache: autocert.DirCache(cfg.LetsEncryptConfig.CertDir), Email: cfg.LetsEncryptConfig.EmailAddress, } - // and create an HTTPS server - s.Addr = ":https" s.TLSConfig = m.TLSConfig() - } else { - // le is NOT enabled, so just serve bare requests on port 8080 - s.Addr = ":8080" } return &router{ |