summaryrefslogtreecommitdiff
path: root/internal
diff options
context:
space:
mode:
Diffstat (limited to 'internal')
-rw-r--r--internal/config/config.go17
-rw-r--r--internal/config/default.go7
-rw-r--r--internal/config/letsencrypt.go8
-rw-r--r--internal/router/router.go22
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{