package sparrow import ( "flag" "fmt" "os" "github.com/peterbourgon/ff/v3" "edge-infra.dev/pkg/edge/edgeencrypt" ) type Config struct { Port string MetricPort string JWTSecret string Namespace string } func NewConfig() (*Config, error) { cfg := &Config{} fs := flag.NewFlagSet("sparrow", flag.ExitOnError) cfg.BindFlags(fs) if err := ff.Parse(fs, os.Args[1:], ff.WithEnvVarNoPrefix(), ff.WithIgnoreUndefined(true)); err != nil { return cfg, err } if err := cfg.Validate(); err != nil { return cfg, err } return cfg, nil } func (c *Config) BindFlags(fs *flag.FlagSet) { fs.StringVar(&c.Port, "port", "8080", "Port to listen on") fs.StringVar(&c.MetricPort, "metric-port", "8082", "Metric Port to listen on") fs.StringVar(&c.Namespace, "namespace", edgeencrypt.EncryptionName, "encryption namespace") fs.StringVar(&c.JWTSecret, "jwt-secret", edgeencrypt.EncryptionJWTSecret, "JWT secret containing public key for bearer authentication") } func (c *Config) Validate() error { if c.Port == "" { return fmt.Errorf("missing PORT environment variable") } if c.MetricPort == "" { return fmt.Errorf("missing METRIC_PORT environment variable") } if c.Namespace == "" { return fmt.Errorf("missing NAMESPACE environment variable") } if c.JWTSecret == "" { return fmt.Errorf("missing JWT_SECRET environment variable") } return nil }