constanze/config.go

60 lines
1.3 KiB
Go

package main
import (
"errors"
"fmt"
"github.com/go-playground/validator/v10"
"github.com/urfave/cli/v2"
"gopkg.in/yaml.v2"
"os"
)
type Config struct {
InstanceUrl string `yaml:"instance_url"`
OAuthApp OAuthApp `yaml:"oauth_app"`
OAuthToken OAuthToken `yaml:"oauth_token"`
}
func LoadConfig(configLocation string) (Config, error) {
c := Config{}
dat, err := os.ReadFile(configLocation)
if err != nil {
return c, errors.New(fmt.Sprintf("could not read config file %s", configLocation))
}
err = yaml.Unmarshal(dat, &c)
if err != nil {
return c, errors.New("could not parse yaml")
}
validate := validator.New()
err = validate.Struct(c)
if err != nil {
return c, err
}
return c, nil
}
func LoadConfigFromContext(cCtx *cli.Context) (Config, error) {
return LoadConfig(cCtx.String("config"))
}
func SaveConfig(configLocation string, config Config) error {
dat, err := yaml.Marshal(config)
if err != nil {
return errors.New("could not cast config to yaml")
}
err = os.WriteFile(configLocation, dat, 0644)
if err != nil {
return errors.New(fmt.Sprintf("could not write config file %s", configLocation))
}
return nil
}
func SaveConfigFromContext(cCtx *cli.Context, config Config) error {
return SaveConfig(cCtx.String("config"), config)
}