...
1 package sparrow
2
3 import (
4 "flag"
5 "fmt"
6 "os"
7
8 "github.com/peterbourgon/ff/v3"
9
10 "edge-infra.dev/pkg/edge/edgeencrypt"
11 )
12
13 type Config struct {
14 Port string
15 MetricPort string
16 JWTSecret string
17 Namespace string
18 }
19
20 func NewConfig() (*Config, error) {
21 cfg := &Config{}
22
23 fs := flag.NewFlagSet("sparrow", flag.ExitOnError)
24
25 cfg.BindFlags(fs)
26
27 if err := ff.Parse(fs, os.Args[1:], ff.WithEnvVarNoPrefix(), ff.WithIgnoreUndefined(true)); err != nil {
28 return cfg, err
29 }
30
31 if err := cfg.Validate(); err != nil {
32 return cfg, err
33 }
34
35 return cfg, nil
36 }
37
38 func (c *Config) BindFlags(fs *flag.FlagSet) {
39 fs.StringVar(&c.Port, "port", "8080", "Port to listen on")
40 fs.StringVar(&c.MetricPort, "metric-port", "8082", "Metric Port to listen on")
41 fs.StringVar(&c.Namespace, "namespace", edgeencrypt.EncryptionName, "encryption namespace")
42 fs.StringVar(&c.JWTSecret, "jwt-secret", edgeencrypt.EncryptionJWTSecret,
43 "JWT secret containing public key for bearer authentication")
44 }
45
46 func (c *Config) Validate() error {
47 if c.Port == "" {
48 return fmt.Errorf("missing PORT environment variable")
49 }
50 if c.MetricPort == "" {
51 return fmt.Errorf("missing METRIC_PORT environment variable")
52 }
53 if c.Namespace == "" {
54 return fmt.Errorf("missing NAMESPACE environment variable")
55 }
56 if c.JWTSecret == "" {
57 return fmt.Errorf("missing JWT_SECRET environment variable")
58 }
59 return nil
60 }
61
View as plain text