Diff
1diff --git a/cmd/soft/main.go b/cmd/soft/main.go
2index 678eff4eae49a12c44b8f3a145821480c50baf01..bb0954136e17dcc8628417098098f60677dc683a 100644
3--- a/cmd/soft/main.go
4+++ b/cmd/soft/main.go
5@@ -57,7 +57,7 @@ func main() {
6 done := make(chan os.Signal, 1)
7 signal.Notify(done, os.Interrupt, syscall.SIGINT, syscall.SIGTERM)
8
9- log.Printf("Starting SSH server on %s:%d", cfg.Host, cfg.Port)
10+ log.Printf("Starting SSH server on %s:%d", cfg.BindAddr, cfg.Port)
11 go func() {
12 if err := s.Start(); err != nil {
13 log.Fatalln(err)
14@@ -66,7 +66,7 @@ func main() {
15
16 <-done
17
18- log.Printf("Stopping SSH server on %s:%d", cfg.Host, cfg.Port)
19+ log.Printf("Stopping SSH server on %s:%d", cfg.BindAddr, cfg.Port)
20 ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
21 defer func() { cancel() }()
22 if err := s.Shutdown(ctx); err != nil {
23diff --git a/config/config.go b/config/config.go
24index 7155c83e5f0e65b747764c265ab9de00be0fa5f4..3c3ab52d0fa3c3ba6f7f091f656a8dda586cf8f9 100644
25--- a/config/config.go
26+++ b/config/config.go
27@@ -16,36 +16,26 @@ type Callbacks interface {
28
29 // Config is the configuration for Soft Serve.
30 type Config struct {
31- Host string `env:"SOFT_SERVE_HOST"`
32- Port int `env:"SOFT_SERVE_PORT"`
33+ BindAddr string `env:"SOFT_SERVE_BIND_ADDRESS" envDefault:""`
34+ Port int `env:"SOFT_SERVE_PORT" envDefault:"23231"`
35 KeyPath string `env:"SOFT_SERVE_KEY_PATH"`
36- RepoPath string `env:"SOFT_SERVE_REPO_PATH"`
37+ RepoPath string `env:"SOFT_SERVE_REPO_PATH" envDefault:".repos"`
38 InitialAdminKeys []string `env:"SOFT_SERVE_INITIAL_ADMIN_KEY" envSeparator:"\n"`
39 Callbacks Callbacks
40 }
41
42-func (c *Config) applyDefaults() {
43- if c.Port == 0 {
44- c.Port = 23231
45- }
46- if c.KeyPath == "" {
47- // NB: cross-platform-compatible path
48- c.KeyPath = filepath.Join(".ssh", "soft_serve_server_ed25519")
49- }
50- if c.RepoPath == "" {
51- c.RepoPath = ".repos"
52- }
53-}
54-
55 // DefaultConfig returns a Config with the values populated with the defaults
56 // or specified environment variables.
57 func DefaultConfig() *Config {
58- var scfg Config
59- if err := env.Parse(&scfg); err != nil {
60+ var cfg Config
61+ if err := env.Parse(&cfg); err != nil {
62 log.Fatalln(err)
63 }
64- scfg.applyDefaults()
65- return scfg.WithCallbacks(nil)
66+ if cfg.KeyPath == "" {
67+ // NB: cross-platform-compatible path
68+ cfg.KeyPath = filepath.Join(".ssh", "soft_serve_server_ed25519")
69+ }
70+ return cfg.WithCallbacks(nil)
71 }
72
73 // WithCallbacks applies the given Callbacks to the configuration.
74diff --git a/internal/config/config.go b/internal/config/config.go
75index e9da10ada7ca0cc131fa87292e989bd8f96c817e..3c5037ee73d97516b7308aa4708d83bca50cef19 100644
76--- a/internal/config/config.go
77+++ b/internal/config/config.go
78@@ -51,7 +51,7 @@ func NewConfig(cfg *config.Config) (*Config, error) {
79 var anonAccess string
80 var yamlUsers string
81 var displayHost string
82- host := cfg.Host
83+ host := cfg.BindAddr
84 port := cfg.Port
85
86 pks := make([]string, 0, len(cfg.InitialAdminKeys))
87@@ -72,7 +72,7 @@ func NewConfig(cfg *config.Config) (*Config, error) {
88 c := &Config{
89 Cfg: cfg,
90 }
91- c.Host = cfg.Host
92+ c.Host = cfg.BindAddr
93 c.Port = port
94 c.Source = rs
95 if len(pks) == 0 {
96diff --git a/server/server.go b/server/server.go
97index 17a0bd7e0c0f3ca6f07827d6bb93450fb97c77c4..0cb2c233ad6514feb2a28a8c2fa4cc316d5d2787 100644
98--- a/server/server.go
99+++ b/server/server.go
100@@ -41,7 +41,7 @@ func NewServer(cfg *config.Config) *Server {
101 s, err := wish.NewServer(
102 ssh.PublicKeyAuth(ac.PublicKeyHandler),
103 ssh.PasswordAuth(ac.PasswordHandler),
104- wish.WithAddress(fmt.Sprintf("%s:%d", cfg.Host, cfg.Port)),
105+ wish.WithAddress(fmt.Sprintf("%s:%d", cfg.BindAddr, cfg.Port)),
106 wish.WithHostKeyPath(cfg.KeyPath),
107 wish.WithMiddleware(mw...),
108 )