fix: rename host to bind address

Ayman Bagabas created

and use env to apply defaults

Change summary

cmd/soft/main.go          |  4 ++--
config/config.go          | 30 ++++++++++--------------------
internal/config/config.go |  4 ++--
server/server.go          |  2 +-
4 files changed, 15 insertions(+), 25 deletions(-)

Detailed changes

cmd/soft/main.go 🔗

@@ -57,7 +57,7 @@ func main() {
 	done := make(chan os.Signal, 1)
 	signal.Notify(done, os.Interrupt, syscall.SIGINT, syscall.SIGTERM)
 
-	log.Printf("Starting SSH server on %s:%d", cfg.Host, cfg.Port)
+	log.Printf("Starting SSH server on %s:%d", cfg.BindAddr, cfg.Port)
 	go func() {
 		if err := s.Start(); err != nil {
 			log.Fatalln(err)
@@ -66,7 +66,7 @@ func main() {
 
 	<-done
 
-	log.Printf("Stopping SSH server on %s:%d", cfg.Host, cfg.Port)
+	log.Printf("Stopping SSH server on %s:%d", cfg.BindAddr, cfg.Port)
 	ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
 	defer func() { cancel() }()
 	if err := s.Shutdown(ctx); err != nil {

config/config.go 🔗

@@ -16,36 +16,26 @@ type Callbacks interface {
 
 // Config is the configuration for Soft Serve.
 type Config struct {
-	Host             string   `env:"SOFT_SERVE_HOST"`
-	Port             int      `env:"SOFT_SERVE_PORT"`
+	BindAddr         string   `env:"SOFT_SERVE_BIND_ADDRESS" envDefault:""`
+	Port             int      `env:"SOFT_SERVE_PORT" envDefault:"23231"`
 	KeyPath          string   `env:"SOFT_SERVE_KEY_PATH"`
-	RepoPath         string   `env:"SOFT_SERVE_REPO_PATH"`
+	RepoPath         string   `env:"SOFT_SERVE_REPO_PATH" envDefault:".repos"`
 	InitialAdminKeys []string `env:"SOFT_SERVE_INITIAL_ADMIN_KEY" envSeparator:"\n"`
 	Callbacks        Callbacks
 }
 
-func (c *Config) applyDefaults() {
-	if c.Port == 0 {
-		c.Port = 23231
-	}
-	if c.KeyPath == "" {
-		// NB: cross-platform-compatible path
-		c.KeyPath = filepath.Join(".ssh", "soft_serve_server_ed25519")
-	}
-	if c.RepoPath == "" {
-		c.RepoPath = ".repos"
-	}
-}
-
 // DefaultConfig returns a Config with the values populated with the defaults
 // or specified environment variables.
 func DefaultConfig() *Config {
-	var scfg Config
-	if err := env.Parse(&scfg); err != nil {
+	var cfg Config
+	if err := env.Parse(&cfg); err != nil {
 		log.Fatalln(err)
 	}
-	scfg.applyDefaults()
-	return scfg.WithCallbacks(nil)
+	if cfg.KeyPath == "" {
+		// NB: cross-platform-compatible path
+		cfg.KeyPath = filepath.Join(".ssh", "soft_serve_server_ed25519")
+	}
+	return cfg.WithCallbacks(nil)
 }
 
 // WithCallbacks applies the given Callbacks to the configuration.

internal/config/config.go 🔗

@@ -51,7 +51,7 @@ func NewConfig(cfg *config.Config) (*Config, error) {
 	var anonAccess string
 	var yamlUsers string
 	var displayHost string
-	host := cfg.Host
+	host := cfg.BindAddr
 	port := cfg.Port
 
 	pks := make([]string, 0, len(cfg.InitialAdminKeys))
@@ -72,7 +72,7 @@ func NewConfig(cfg *config.Config) (*Config, error) {
 	c := &Config{
 		Cfg: cfg,
 	}
-	c.Host = cfg.Host
+	c.Host = cfg.BindAddr
 	c.Port = port
 	c.Source = rs
 	if len(pks) == 0 {

server/server.go 🔗

@@ -41,7 +41,7 @@ func NewServer(cfg *config.Config) *Server {
 	s, err := wish.NewServer(
 		ssh.PublicKeyAuth(ac.PublicKeyHandler),
 		ssh.PasswordAuth(ac.PasswordHandler),
-		wish.WithAddress(fmt.Sprintf("%s:%d", cfg.Host, cfg.Port)),
+		wish.WithAddress(fmt.Sprintf("%s:%d", cfg.BindAddr, cfg.Port)),
 		wish.WithHostKeyPath(cfg.KeyPath),
 		wish.WithMiddleware(mw...),
 	)