Changeset 691 in code for trunk/server.go


Ignore:
Timestamp:
Nov 15, 2021, 11:38:04 PM (4 years ago)
Author:
contact
Message:

Allow most config options to be reloaded

Closes: https://todo.sr.ht/~emersion/soju/42

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/server.go

    r689 r691  
    5454}
    5555
    56 type Server struct {
     56type Config struct {
    5757        Hostname        string
    5858        Title           string
    59         Logger          Logger
    6059        LogPath         string
    6160        Debug           bool
     
    6362        AcceptProxyIPs  config.IPSet
    6463        MaxUserNetworks int
    65         Identd          *Identd // can be nil
    66 
     64        MOTD            string
     65}
     66
     67type Server struct {
     68        Logger Logger
     69        Identd *Identd // can be nil
     70
     71        config    atomic.Value // *Config
    6772        db        Database
    6873        stopWG    sync.WaitGroup
     
    7277        listeners map[net.Listener]struct{}
    7378        users     map[string]*user
    74 
    75         motd atomic.Value // string
    7679}
    7780
    7881func NewServer(db Database) *Server {
    7982        srv := &Server{
    80                 Logger:          log.New(log.Writer(), "", log.LstdFlags),
    81                 MaxUserNetworks: -1,
    82                 db:              db,
    83                 listeners:       make(map[net.Listener]struct{}),
    84                 users:           make(map[string]*user),
    85         }
    86         srv.motd.Store("")
     83                Logger:    log.New(log.Writer(), "", log.LstdFlags),
     84                db:        db,
     85                listeners: make(map[net.Listener]struct{}),
     86                users:     make(map[string]*user),
     87        }
     88        srv.config.Store(&Config{Hostname: "localhost", MaxUserNetworks: -1})
    8789        return srv
    8890}
    8991
    9092func (s *Server) prefix() *irc.Prefix {
    91         return &irc.Prefix{Name: s.Hostname}
     93        return &irc.Prefix{Name: s.Config().Hostname}
     94}
     95
     96func (s *Server) Config() *Config {
     97        return s.config.Load().(*Config)
     98}
     99
     100func (s *Server) SetConfig(cfg *Config) {
     101        s.config.Store(cfg)
    92102}
    93103
     
    240250        conn, err := websocket.Accept(w, req, &websocket.AcceptOptions{
    241251                Subprotocols:   []string{"text.ircv3.net"}, // non-compliant, fight me
    242                 OriginPatterns: s.HTTPOrigins,
     252                OriginPatterns: s.Config().HTTPOrigins,
    243253        })
    244254        if err != nil {
     
    250260        if host, _, err := net.SplitHostPort(req.RemoteAddr); err == nil {
    251261                if ip := net.ParseIP(host); ip != nil {
    252                         isProxy = s.AcceptProxyIPs.Contains(ip)
     262                        isProxy = s.Config().AcceptProxyIPs.Contains(ip)
    253263                }
    254264        }
     
    294304        return &stats
    295305}
    296 
    297 func (s *Server) SetMOTD(motd string) {
    298         s.motd.Store(motd)
    299 }
    300 
    301 func (s *Server) MOTD() string {
    302         return s.motd.Load().(string)
    303 }
Note: See TracChangeset for help on using the changeset viewer.