Peter Kurfer
a720b0ee41
* supports HTTP * support TLS interception e.g. for HTTPS * support CA generation via cli * first draft of plugin API * support commands from plugins * includes Dockerfile * includes basic configuration
51 lines
1.1 KiB
Go
51 lines
1.1 KiB
Go
package config
|
|
|
|
import (
|
|
"github.com/baez90/inetmock/pkg/logging"
|
|
"github.com/baez90/inetmock/pkg/path"
|
|
"github.com/spf13/pflag"
|
|
"github.com/spf13/viper"
|
|
"go.uber.org/zap"
|
|
"strings"
|
|
)
|
|
|
|
func CreateConfig() Config {
|
|
logger, _ := logging.CreateLogger()
|
|
return &config{
|
|
logger: logger.Named("Config"),
|
|
}
|
|
}
|
|
|
|
type Config interface {
|
|
InitConfig(flags *pflag.FlagSet)
|
|
ReadConfig(configFilePath string) error
|
|
}
|
|
|
|
type config struct {
|
|
logger *zap.Logger
|
|
}
|
|
|
|
func (c config) InitConfig(flags *pflag.FlagSet) {
|
|
viper.SetConfigName("config")
|
|
viper.SetConfigType("yaml")
|
|
viper.AddConfigPath("/etc/inetmock/")
|
|
viper.AddConfigPath("$HOME/.inetmock")
|
|
viper.AddConfigPath(".")
|
|
viper.SetEnvPrefix("INetMock")
|
|
_ = viper.BindPFlags(flags)
|
|
viper.SetEnvKeyReplacer(strings.NewReplacer("-", "_"))
|
|
viper.AutomaticEnv()
|
|
}
|
|
|
|
func (c *config) ReadConfig(configFilePath string) (err error) {
|
|
if configFilePath != "" && path.FileExists(configFilePath) {
|
|
viper.SetConfigFile(configFilePath)
|
|
}
|
|
if err = viper.ReadInConfig(); err != nil {
|
|
if _, ok := err.(viper.ConfigFileNotFoundError); ok {
|
|
err = nil
|
|
c.logger.Warn("failed to load config")
|
|
}
|
|
}
|
|
return
|
|
}
|