package config import ( "io" "io/ioutil" "time" "github.com/pkg/errors" "gopkg.in/yaml.v2" ) type Config struct { HTTP HTTPConfig `yaml:"http"` OIDC OIDCConfig `yaml:"oidc"` } // NewFromFile retrieves the configuration from the given file func NewFromFile(filepath string) (*Config, error) { config := NewDefault() data, err := ioutil.ReadFile(filepath) if err != nil { return nil, errors.Wrapf(err, "could not read file '%s'", filepath) } if err := yaml.Unmarshal(data, config); err != nil { return nil, errors.Wrapf(err, "could not unmarshal configuration") } return config, nil } type HTTPConfig struct { Address string `yaml:"address"` CookieAuthenticationKey string `yaml:"cookieAuthenticationKey"` CookieEncryptionKey string `yaml:"cookieEncryptionKey"` CookieMaxAge int `yaml:"cookieMaxAge"` TemplateDir string `yaml:"templateDir"` PublicDir string `yaml:"publicDir"` } type OIDCConfig struct { ClientID string `yaml:"clientId"` ClientSecret string `yaml:"clientSecret"` IssuerURL string `ymal:"issuerUrl"` RedirectURL string `yaml:"redirectUrl"` } func NewDumpDefault() *Config { config := NewDefault() return config } func NewDefault() *Config { return &Config{ HTTP: HTTPConfig{ Address: ":3002", CookieAuthenticationKey: "", CookieEncryptionKey: "", CookieMaxAge: int((time.Hour * 1).Seconds()), // 1 hour TemplateDir: "template", PublicDir: "public", }, OIDC: OIDCConfig{ IssuerURL: "http://localhost:4444/", RedirectURL: "http://localhost:3002/oauth2/callback", }, } } func Dump(config *Config, w io.Writer) error { data, err := yaml.Marshal(config) if err != nil { return errors.Wrap(err, "could not dump config") } if _, err := w.Write(data); err != nil { return err } return nil }