diff options
Diffstat (limited to 'internal')
| -rw-r--r-- | internal/config/validate.go | 62 | ||||
| -rw-r--r-- | internal/config/validate_test.go | 90 | 
2 files changed, 152 insertions, 0 deletions
diff --git a/internal/config/validate.go b/internal/config/validate.go new file mode 100644 index 000000000..d229e5418 --- /dev/null +++ b/internal/config/validate.go @@ -0,0 +1,62 @@ +/* +   GoToSocial +   Copyright (C) 2021-2022 GoToSocial Authors admin@gotosocial.org + +   This program is free software: you can redistribute it and/or modify +   it under the terms of the GNU Affero General Public License as published by +   the Free Software Foundation, either version 3 of the License, or +   (at your option) any later version. + +   This program is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +   GNU Affero General Public License for more details. + +   You should have received a copy of the GNU Affero General Public License +   along with this program.  If not, see <http://www.gnu.org/licenses/>. +*/ + +package config + +import ( +	"errors" +	"fmt" +	"strings" + +	"github.com/sirupsen/logrus" +	"github.com/spf13/viper" +) + +// Validate validates global config settings which don't have defaults, to make sure they are set sensibly. +func Validate() error { +	errs := []error{} + +	// host +	if viper.GetString(Keys.Host) == "" { +		errs = append(errs, fmt.Errorf("%s must be set", Keys.Host)) +	} + +	// protocol +	protocol := viper.GetString(Keys.Protocol) +	switch protocol { +	case "https": +		// no problem +		break +	case "http": +		logrus.Warnf("%s was set to 'http'; this should *only* be used for debugging and tests!", Keys.Protocol) +	case "": +		errs = append(errs, fmt.Errorf("%s must be set", Keys.Protocol)) +	default: +		errs = append(errs, fmt.Errorf("%s must be set to either http or https, provided value was %s", Keys.Protocol, protocol)) +	} + +	if len(errs) > 0 { +		errStrings := []string{} +		for _, err := range errs { +			errStrings = append(errStrings, err.Error()) +		} +		return errors.New(strings.Join(errStrings, "; ")) +	} + +	return nil +} diff --git a/internal/config/validate_test.go b/internal/config/validate_test.go new file mode 100644 index 000000000..6d8294205 --- /dev/null +++ b/internal/config/validate_test.go @@ -0,0 +1,90 @@ +/* +   GoToSocial +   Copyright (C) 2021-2022 GoToSocial Authors admin@gotosocial.org + +   This program is free software: you can redistribute it and/or modify +   it under the terms of the GNU Affero General Public License as published by +   the Free Software Foundation, either version 3 of the License, or +   (at your option) any later version. + +   This program is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +   GNU Affero General Public License for more details. + +   You should have received a copy of the GNU Affero General Public License +   along with this program.  If not, see <http://www.gnu.org/licenses/>. +*/ + +package config_test + +import ( +	"testing" + +	"github.com/spf13/viper" +	"github.com/stretchr/testify/suite" +	"github.com/superseriousbusiness/gotosocial/internal/config" +	"github.com/superseriousbusiness/gotosocial/testrig" +) + +type ConfigValidateTestSuite struct { +	suite.Suite +} + +func (suite *ConfigValidateTestSuite) TestValidateConfigOK() { +	testrig.InitTestConfig() + +	err := config.Validate() +	suite.NoError(err) +} + +func (suite *ConfigValidateTestSuite) TestValidateConfigNoHost() { +	testrig.InitTestConfig() + +	viper.Set(config.Keys.Host, "") + +	err := config.Validate() +	suite.EqualError(err, "host must be set") +} + +func (suite *ConfigValidateTestSuite) TestValidateConfigNoProtocol() { +	testrig.InitTestConfig() + +	viper.Set(config.Keys.Protocol, "") + +	err := config.Validate() +	suite.EqualError(err, "protocol must be set") +} + +func (suite *ConfigValidateTestSuite) TestValidateConfigNoProtocolOrHost() { +	testrig.InitTestConfig() + +	viper.Set(config.Keys.Host, "") +	viper.Set(config.Keys.Protocol, "") + +	err := config.Validate() +	suite.EqualError(err, "host must be set; protocol must be set") +} + +func (suite *ConfigValidateTestSuite) TestValidateConfigBadProtocol() { +	testrig.InitTestConfig() + +	viper.Set(config.Keys.Protocol, "foo") + +	err := config.Validate() +	suite.EqualError(err, "protocol must be set to either http or https, provided value was foo") +} + +func (suite *ConfigValidateTestSuite) TestValidateConfigBadProtocolNoHost() { +	testrig.InitTestConfig() + +	viper.Set(config.Keys.Host, "") +	viper.Set(config.Keys.Protocol, "foo") + +	err := config.Validate() +	suite.EqualError(err, "host must be set; protocol must be set to either http or https, provided value was foo") +} + +func TestConfigValidateTestSuite(t *testing.T) { +	suite.Run(t, &ConfigValidateTestSuite{}) +}  | 
