diff --git a/config/config.go b/config/config.go index c5e57c7..179f8cb 100644 --- a/config/config.go +++ b/config/config.go @@ -4,7 +4,22 @@ import "github.com/jinzhu/configor" // Configuration is stuff that can be configured externally per env variables or config file (config.yml). type Configuration struct { - Port int `default:"8080"` + Server struct { + Port int `default:"80"` + SSL struct { + Enabled *bool `default:"false"` + RedirectToHTTPS *bool `default:"true"` + Port int `default:"443"` + CertFile string `default:""` + CertKey string `default:""` + LetsEncrypt struct { + Enabled *bool `default:"false"` + AcceptTOS *bool `default:"false"` + Cache string `default:"certs"` + Hosts []string + } + } + } Database struct { Dialect string `default:"sqlite3"` Connection string `default:"gotify.db"` diff --git a/config/config_test.go b/config/config_test.go index 9c82ee7..73f55bc 100644 --- a/config/config_test.go +++ b/config/config_test.go @@ -9,10 +9,13 @@ import ( func TestConfigEnv(t *testing.T) { os.Setenv("GOTIFY_DEFAULTUSER_NAME", "jmattheis") + os.Setenv("GOTIFY_SERVER_SSL_LETSENCRYPT_HOSTS", "- push.example.tld\n- push.other.tld") conf := Get() - assert.Equal(t, 8080, conf.Port, "should use defaults") + assert.Equal(t, 80, conf.Server.Port, "should use defaults") assert.Equal(t, "jmattheis", conf.DefaultUser.Name, "should not use default but env var") + assert.Equal(t, []string{"push.example.tld", "push.other.tld"}, conf.Server.SSL.LetsEncrypt.Hosts) os.Unsetenv("GOTIFY_DEFAULTUSER_NAME") + os.Unsetenv("GOTIFY_SERVER_SSL_LETSENCRYPT_HOSTS") } func TestConfigFile(t *testing.T) { @@ -22,7 +25,13 @@ func TestConfigFile(t *testing.T) { }() assert.Nil(t, err) _, err = file.WriteString(` -port: 1234 +server: + port: 1234 + ssl: + port: 3333 + letsencrypt: + hosts: + - push.example.tld database: dialect: mysql connection: user name @@ -33,7 +42,9 @@ defaultuser: file.Close() assert.Nil(t, err) conf := Get() - assert.Equal(t, 1234, conf.Port) + assert.Equal(t, 1234, conf.Server.Port) + assert.Equal(t, 3333, conf.Server.SSL.Port) + assert.Equal(t, []string{"push.example.tld"}, conf.Server.SSL.LetsEncrypt.Hosts) assert.Equal(t, "nicories", conf.DefaultUser.Name) assert.Equal(t, "12345", conf.DefaultUser.Pass) assert.Equal(t, "mysql", conf.Database.Dialect)