Changeset 691 in code for trunk/cmd/soju
- Timestamp:
- Nov 15, 2021, 11:38:04 PM (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/cmd/soju/main.go
r687 r691 38 38 } 39 39 40 func loadMOTD(srv *soju.Server, filename string) error {41 if filename == "" {42 return nil43 }44 45 b, err := ioutil.ReadFile(filename)46 if err != nil {47 return err48 }49 srv.SetMOTD(strings.TrimSuffix(string(b), "\n"))50 return nil51 }52 53 40 func bumpOpenedFileLimit() error { 54 41 var rlimit syscall.Rlimit … … 63 50 } 64 51 52 var ( 53 configPath string 54 debug bool 55 56 tlsCert atomic.Value // *tls.Certificate 57 ) 58 59 func loadConfig() (*config.Server, *soju.Config, error) { 60 var raw *config.Server 61 if configPath != "" { 62 var err error 63 raw, err = config.Load(configPath) 64 if err != nil { 65 return nil, nil, fmt.Errorf("failed to load config file: %v", err) 66 } 67 } else { 68 raw = config.Defaults() 69 } 70 71 var motd string 72 if raw.MOTDPath != "" { 73 b, err := ioutil.ReadFile(raw.MOTDPath) 74 if err != nil { 75 return nil, nil, fmt.Errorf("failed to load MOTD: %v", err) 76 } 77 motd = strings.TrimSuffix(string(b), "\n") 78 } 79 80 if raw.TLS != nil { 81 cert, err := tls.LoadX509KeyPair(raw.TLS.CertPath, raw.TLS.KeyPath) 82 if err != nil { 83 return nil, nil, fmt.Errorf("failed to load TLS certificate and key: %v", err) 84 } 85 tlsCert.Store(&cert) 86 } 87 88 cfg := &soju.Config{ 89 Hostname: raw.Hostname, 90 Title: raw.Title, 91 LogPath: raw.LogPath, 92 HTTPOrigins: raw.HTTPOrigins, 93 AcceptProxyIPs: raw.AcceptProxyIPs, 94 MaxUserNetworks: raw.MaxUserNetworks, 95 Debug: debug, 96 MOTD: motd, 97 } 98 return raw, cfg, nil 99 } 100 65 101 func main() { 66 102 var listen []string 67 var configPath string68 var debug bool69 103 flag.Var((*stringSliceFlag)(&listen), "listen", "listening address") 70 104 flag.StringVar(&configPath, "config", "", "path to configuration file") … … 72 106 flag.Parse() 73 107 74 var cfg *config.Server 75 if configPath != "" { 76 var err error 77 cfg, err = config.Load(configPath) 78 if err != nil { 79 log.Fatalf("failed to load config file: %v", err) 80 } 81 } else { 82 cfg = config.Defaults() 108 cfg, serverCfg, err := loadConfig() 109 if err != nil { 110 log.Fatal(err) 83 111 } 84 112 … … 98 126 99 127 var tlsCfg *tls.Config 100 var tlsCert atomic.Value101 128 if cfg.TLS != nil { 102 cert, err := tls.LoadX509KeyPair(cfg.TLS.CertPath, cfg.TLS.KeyPath)103 if err != nil {104 log.Fatalf("failed to load TLS certificate and key: %v", err)105 }106 tlsCert.Store(&cert)107 108 129 tlsCfg = &tls.Config{ 109 130 GetCertificate: func(*tls.ClientHelloInfo) (*tls.Certificate, error) { … … 114 135 115 136 srv := soju.NewServer(db) 116 srv.Hostname = cfg.Hostname 117 srv.Title = cfg.Title 118 srv.LogPath = cfg.LogPath 119 srv.HTTPOrigins = cfg.HTTPOrigins 120 srv.AcceptProxyIPs = cfg.AcceptProxyIPs 121 srv.MaxUserNetworks = cfg.MaxUserNetworks 122 srv.Debug = debug 123 124 if err := loadMOTD(srv, cfg.MOTDPath); err != nil { 125 log.Fatalf("failed to load MOTD: %v", err) 126 } 137 srv.SetConfig(serverCfg) 127 138 128 139 for _, listen := range cfg.Listen { … … 259 270 switch sig { 260 271 case syscall.SIGHUP: 261 log.Print("reloading TLS certificate and MOTD") 262 if cfg.TLS != nil { 263 cert, err := tls.LoadX509KeyPair(cfg.TLS.CertPath, cfg.TLS.KeyPath) 264 if err != nil { 265 log.Printf("failed to reload TLS certificate and key: %v", err) 266 break 267 } 268 tlsCert.Store(&cert) 269 } 270 if err := loadMOTD(srv, cfg.MOTDPath); err != nil { 271 log.Printf("failed to reload MOTD: %v", err) 272 log.Print("reloading configuration") 273 _, serverCfg, err := loadConfig() 274 if err != nil { 275 log.Printf("failed to reloading configuration: %v", err) 276 } else { 277 srv.SetConfig(serverCfg) 272 278 } 273 279 case syscall.SIGINT, syscall.SIGTERM: … … 287 293 return proxyproto.IGNORE, nil 288 294 } 289 if srv. AcceptProxyIPs.Contains(tcpAddr.IP) {295 if srv.Config().AcceptProxyIPs.Contains(tcpAddr.IP) { 290 296 return proxyproto.USE, nil 291 297 }
Note:
See TracChangeset
for help on using the changeset viewer.