...

Source file src/edge-infra.dev/pkg/edge/datasync/sparrow/config.go

Documentation: edge-infra.dev/pkg/edge/datasync/sparrow

     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