|
@@ -24,6 +24,7 @@ import (
|
24
|
24
|
"time"
|
25
|
25
|
|
26
|
26
|
"github.com/DanielOaks/girc-go/ircmsg"
|
|
27
|
+ "github.com/DanielOaks/oragono/irc/logger"
|
27
|
28
|
"github.com/tidwall/buntdb"
|
28
|
29
|
)
|
29
|
30
|
|
|
@@ -102,7 +103,7 @@ type Server struct {
|
102
|
103
|
listenerEventActMutex sync.Mutex
|
103
|
104
|
listeners map[string]ListenerInterface
|
104
|
105
|
listenerUpdateMutex sync.Mutex
|
105
|
|
- logger *Logger
|
|
106
|
+ logger *logger.Manager
|
106
|
107
|
monitoring map[string][]Client
|
107
|
108
|
motdLines []string
|
108
|
109
|
name string
|
|
@@ -137,7 +138,7 @@ type clientConn struct {
|
137
|
138
|
}
|
138
|
139
|
|
139
|
140
|
// NewServer returns a new Oragono server.
|
140
|
|
-func NewServer(configFilename string, config *Config, logger *Logger) (*Server, error) {
|
|
141
|
+func NewServer(configFilename string, config *Config, logger *logger.Manager) (*Server, error) {
|
141
|
142
|
casefoldedName, err := Casefold(config.Server.Name)
|
142
|
143
|
if err != nil {
|
143
|
144
|
return nil, fmt.Errorf("Server name isn't valid [%s]: %s", config.Server.Name, err.Error())
|
|
@@ -226,7 +227,7 @@ func NewServer(configFilename string, config *Config, logger *Logger) (*Server,
|
226
|
227
|
}
|
227
|
228
|
|
228
|
229
|
// open data store
|
229
|
|
- server.logger.Log(LogDebug, "startup", "Opening datastore")
|
|
230
|
+ server.logger.Debug("startup", "Opening datastore")
|
230
|
231
|
db, err := buntdb.Open(config.Datastore.Path)
|
231
|
232
|
if err != nil {
|
232
|
233
|
return nil, fmt.Errorf("Failed to open datastore: %s", err.Error())
|
|
@@ -237,7 +238,7 @@ func NewServer(configFilename string, config *Config, logger *Logger) (*Server,
|
237
|
238
|
err = server.store.View(func(tx *buntdb.Tx) error {
|
238
|
239
|
version, _ := tx.Get(keySchemaVersion)
|
239
|
240
|
if version != latestDbSchema {
|
240
|
|
- logger.Log(LogError, "startup", "server", fmt.Sprintf("Database must be updated. Expected schema v%s, got v%s.", latestDbSchema, version))
|
|
241
|
+ logger.Error("startup", "server", fmt.Sprintf("Database must be updated. Expected schema v%s, got v%s.", latestDbSchema, version))
|
241
|
242
|
return errDbOutOfDate
|
242
|
243
|
}
|
243
|
244
|
return nil
|
|
@@ -249,12 +250,12 @@ func NewServer(configFilename string, config *Config, logger *Logger) (*Server,
|
249
|
250
|
}
|
250
|
251
|
|
251
|
252
|
// load *lines
|
252
|
|
- server.logger.Log(LogDebug, "startup", "Loading D/Klines")
|
|
253
|
+ server.logger.Debug("startup", "Loading D/Klines")
|
253
|
254
|
server.loadDLines()
|
254
|
255
|
server.loadKLines()
|
255
|
256
|
|
256
|
257
|
// load password manager
|
257
|
|
- server.logger.Log(LogDebug, "startup", "Loading passwords")
|
|
258
|
+ server.logger.Debug("startup", "Loading passwords")
|
258
|
259
|
err = server.store.View(func(tx *buntdb.Tx) error {
|
259
|
260
|
saltString, err := tx.Get(keySalt)
|
260
|
261
|
if err != nil {
|
|
@@ -274,7 +275,7 @@ func NewServer(configFilename string, config *Config, logger *Logger) (*Server,
|
274
|
275
|
return nil, fmt.Errorf("Could not load salt: %s", err.Error())
|
275
|
276
|
}
|
276
|
277
|
|
277
|
|
- server.logger.Log(LogDebug, "startup", "Loading MOTD")
|
|
278
|
+ server.logger.Debug("startup", "Loading MOTD")
|
278
|
279
|
if config.Server.MOTD != "" {
|
279
|
280
|
file, err := os.Open(config.Server.MOTD)
|
280
|
281
|
if err == nil {
|
|
@@ -320,7 +321,7 @@ func NewServer(configFilename string, config *Config, logger *Logger) (*Server,
|
320
|
321
|
|
321
|
322
|
// start API if enabled
|
322
|
323
|
if server.restAPI.Enabled {
|
323
|
|
- logger.Log(LogInfo, "startup", "server", fmt.Sprintf("%s rest API started on %s.", server.name, server.restAPI.Listen))
|
|
324
|
+ logger.Info("startup", "server", fmt.Sprintf("%s rest API started on %s.", server.name, server.restAPI.Listen))
|
324
|
325
|
server.startRestAPI()
|
325
|
326
|
}
|
326
|
327
|
|
|
@@ -389,7 +390,7 @@ func (server *Server) Shutdown() {
|
389
|
390
|
server.clients.ByNickMutex.RUnlock()
|
390
|
391
|
|
391
|
392
|
if err := server.store.Close(); err != nil {
|
392
|
|
- server.logger.Log(LogError, "shutdown", fmt.Sprintln("Could not close datastore:", err))
|
|
393
|
+ server.logger.Error("shutdown", fmt.Sprintln("Could not close datastore:", err))
|
393
|
394
|
}
|
394
|
395
|
}
|
395
|
396
|
|
|
@@ -406,10 +407,10 @@ func (server *Server) Run() {
|
406
|
407
|
done = true
|
407
|
408
|
|
408
|
409
|
case <-server.rehashSignal:
|
409
|
|
- server.logger.Log(LogInfo, "rehash", "Rehashing due to SIGHUP")
|
|
410
|
+ server.logger.Info("rehash", "Rehashing due to SIGHUP")
|
410
|
411
|
err := server.rehash()
|
411
|
412
|
if err != nil {
|
412
|
|
- server.logger.Log(LogError, "rehash", fmt.Sprintln("Failed to rehash:", err.Error()))
|
|
413
|
+ server.logger.Error("rehash", fmt.Sprintln("Failed to rehash:", err.Error()))
|
413
|
414
|
}
|
414
|
415
|
|
415
|
416
|
case conn := <-server.newConns:
|
|
@@ -461,7 +462,7 @@ func (server *Server) Run() {
|
461
|
462
|
continue
|
462
|
463
|
}
|
463
|
464
|
|
464
|
|
- server.logger.Log(LogDebug, "localconnect-ip", fmt.Sprintf("Client connecting from %v", ipaddr))
|
|
465
|
+ server.logger.Debug("localconnect-ip", fmt.Sprintf("Client connecting from %v", ipaddr))
|
465
|
466
|
|
466
|
467
|
go NewClient(server, conn.Conn, conn.IsTLS)
|
467
|
468
|
continue
|
|
@@ -510,7 +511,7 @@ func (server *Server) createListener(addr string, tlsMap map[string]*tls.Config)
|
510
|
511
|
server.listeners[addr] = li
|
511
|
512
|
|
512
|
513
|
// start listening
|
513
|
|
- server.logger.Log(LogInfo, "listeners", fmt.Sprintf("listening on %s using %s.", addr, tlsString))
|
|
514
|
+ server.logger.Info("listeners", fmt.Sprintf("listening on %s using %s.", addr, tlsString))
|
514
|
515
|
|
515
|
516
|
// setup accept goroutine
|
516
|
517
|
go func() {
|
|
@@ -562,7 +563,7 @@ func (server *Server) createListener(addr string, tlsMap map[string]*tls.Config)
|
562
|
563
|
server.listenerUpdateMutex.Unlock()
|
563
|
564
|
|
564
|
565
|
// print notice
|
565
|
|
- server.logger.Log(LogInfo, "listeners", fmt.Sprintf("updated listener %s using %s.", addr, tlsString))
|
|
566
|
+ server.logger.Info("listeners", fmt.Sprintf("updated listener %s using %s.", addr, tlsString))
|
566
|
567
|
}
|
567
|
568
|
default:
|
568
|
569
|
// no events waiting for us, fall-through and continue
|
|
@@ -578,7 +579,7 @@ func (server *Server) createListener(addr string, tlsMap map[string]*tls.Config)
|
578
|
579
|
func (server *Server) wslisten(addr string, tlsMap map[string]*TLSListenConfig) {
|
579
|
580
|
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
|
580
|
581
|
if r.Method != "GET" {
|
581
|
|
- server.logger.Log(LogError, "ws", addr, fmt.Sprintf("%s method not allowed", r.Method))
|
|
582
|
+ server.logger.Error("ws", addr, fmt.Sprintf("%s method not allowed", r.Method))
|
582
|
583
|
return
|
583
|
584
|
}
|
584
|
585
|
|
|
@@ -591,7 +592,7 @@ func (server *Server) wslisten(addr string, tlsMap map[string]*TLSListenConfig)
|
591
|
592
|
|
592
|
593
|
ws, err := upgrader.Upgrade(w, r, nil)
|
593
|
594
|
if err != nil {
|
594
|
|
- server.logger.Log(LogError, "ws", addr, fmt.Sprintf("%s websocket upgrade error: %s", server.name, err))
|
|
595
|
+ server.logger.Error("ws", addr, fmt.Sprintf("%s websocket upgrade error: %s", server.name, err))
|
595
|
596
|
return
|
596
|
597
|
}
|
597
|
598
|
|
|
@@ -609,7 +610,7 @@ func (server *Server) wslisten(addr string, tlsMap map[string]*TLSListenConfig)
|
609
|
610
|
if listenTLS {
|
610
|
611
|
tlsString = "TLS"
|
611
|
612
|
}
|
612
|
|
- server.logger.Log(LogInfo, "listeners", fmt.Sprintf("websocket listening on %s using %s.", addr, tlsString))
|
|
613
|
+ server.logger.Info("listeners", fmt.Sprintf("websocket listening on %s using %s.", addr, tlsString))
|
613
|
614
|
|
614
|
615
|
if listenTLS {
|
615
|
616
|
err = http.ListenAndServeTLS(addr, config.Cert, config.Key, nil)
|
|
@@ -617,7 +618,7 @@ func (server *Server) wslisten(addr string, tlsMap map[string]*TLSListenConfig)
|
617
|
618
|
err = http.ListenAndServe(addr, nil)
|
618
|
619
|
}
|
619
|
620
|
if err != nil {
|
620
|
|
- server.logger.Log(LogError, "listeners", fmt.Sprintf("listenAndServe error [%s]: %s", tlsString, err))
|
|
621
|
+ server.logger.Error("listeners", fmt.Sprintf("listenAndServe error [%s]: %s", tlsString, err))
|
621
|
622
|
}
|
622
|
623
|
}()
|
623
|
624
|
}
|
|
@@ -651,7 +652,7 @@ func (server *Server) tryRegister(c *Client) {
|
651
|
652
|
}
|
652
|
653
|
|
653
|
654
|
// continue registration
|
654
|
|
- server.logger.Log(LogDebug, "localconnect", fmt.Sprintf("Client registered [%s]", c.nick))
|
|
655
|
+ server.logger.Debug("localconnect", fmt.Sprintf("Client registered [%s]", c.nick))
|
655
|
656
|
c.Register()
|
656
|
657
|
|
657
|
658
|
// send welcome text
|
|
@@ -1241,13 +1242,13 @@ func operHandler(server *Server, client *Client, msg ircmsg.IrcMessage) bool {
|
1241
|
1242
|
|
1242
|
1243
|
// rehash reloads the config and applies the changes from the config file.
|
1243
|
1244
|
func (server *Server) rehash() error {
|
1244
|
|
- server.logger.Log(LogDebug, "rehash", "Starting rehash")
|
|
1245
|
+ server.logger.Debug("rehash", "Starting rehash")
|
1245
|
1246
|
|
1246
|
1247
|
// only let one REHASH go on at a time
|
1247
|
1248
|
server.rehashMutex.Lock()
|
1248
|
1249
|
defer server.rehashMutex.Unlock()
|
1249
|
1250
|
|
1250
|
|
- server.logger.Log(LogDebug, "rehash", "Got rehash lock")
|
|
1251
|
+ server.logger.Debug("rehash", "Got rehash lock")
|
1251
|
1252
|
|
1252
|
1253
|
config, err := LoadConfig(server.configFilename)
|
1253
|
1254
|
|
|
@@ -1326,7 +1327,7 @@ func (server *Server) rehash() error {
|
1326
|
1327
|
// STS
|
1327
|
1328
|
stsValue := config.Server.STS.Value()
|
1328
|
1329
|
var stsDisabled bool
|
1329
|
|
- server.logger.Log(LogDebug, "rehash", "STS Vals", CapValues[STS], stsValue, fmt.Sprintf("server[%v] config[%v]", server.stsEnabled, config.Server.STS.Enabled))
|
|
1330
|
+ server.logger.Debug("rehash", "STS Vals", CapValues[STS], stsValue, fmt.Sprintf("server[%v] config[%v]", server.stsEnabled, config.Server.STS.Enabled))
|
1330
|
1331
|
if config.Server.STS.Enabled && !server.stsEnabled {
|
1331
|
1332
|
// enabling STS
|
1332
|
1333
|
SupportedCapabilities[STS] = true
|
|
@@ -1351,7 +1352,7 @@ func (server *Server) rehash() error {
|
1351
|
1352
|
|
1352
|
1353
|
// updated caps get DEL'd and then NEW'd
|
1353
|
1354
|
// so, we can just add updated ones to both removed and added lists here and they'll be correctly handled
|
1354
|
|
- server.logger.Log(LogDebug, "rehash", "Updated Caps", updatedCaps.String(Cap301), strconv.Itoa(len(updatedCaps)))
|
|
1355
|
+ server.logger.Debug("rehash", "Updated Caps", updatedCaps.String(Cap301), strconv.Itoa(len(updatedCaps)))
|
1355
|
1356
|
if len(updatedCaps) > 0 {
|
1356
|
1357
|
for capab := range updatedCaps {
|
1357
|
1358
|
addedCaps[capab] = true
|
|
@@ -1470,13 +1471,13 @@ func (server *Server) rehash() error {
|
1470
|
1471
|
|
1471
|
1472
|
// REHASH
|
1472
|
1473
|
func rehashHandler(server *Server, client *Client, msg ircmsg.IrcMessage) bool {
|
1473
|
|
- server.logger.Log(LogInfo, "rehash", fmt.Sprintf("REHASH command used by %s", client.nick))
|
|
1474
|
+ server.logger.Info("rehash", fmt.Sprintf("REHASH command used by %s", client.nick))
|
1474
|
1475
|
err := server.rehash()
|
1475
|
1476
|
|
1476
|
1477
|
if err == nil {
|
1477
|
1478
|
client.Send(nil, server.name, RPL_REHASHING, client.nick, "ircd.yaml", "Rehashing")
|
1478
|
1479
|
} else {
|
1479
|
|
- server.logger.Log(LogError, "rehash", fmt.Sprintln("Failed to rehash:", err.Error()))
|
|
1480
|
+ server.logger.Error("rehash", fmt.Sprintln("Failed to rehash:", err.Error()))
|
1480
|
1481
|
client.Send(nil, server.name, ERR_UNKNOWNERROR, client.nick, "REHASH", err.Error())
|
1481
|
1482
|
}
|
1482
|
1483
|
return false
|