forked from zone-eu/wildduck
-
Notifications
You must be signed in to change notification settings - Fork 15
/
Copy pathirc.js
101 lines (87 loc) · 2.34 KB
/
irc.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
'use strict';
const config = require('wild-config');
const log = require('npmlog');
const IRCServer = require('./lib/irc/server');
const UserHandler = require('./lib/user-handler');
const MessageHandler = require('./lib/message-handler');
const db = require('./lib/db');
const fs = require('fs');
const certs = require('./lib/certs').get('irc');
const serverOptions = {
port: config.irc.port,
host: config.irc.host,
secure: config.irc.secure,
// log to console
logger: {
info(...args) {
args.shift();
log.info('IRC', ...args);
},
debug(...args) {
args.shift();
log.silly('IRC', ...args);
},
error(...args) {
args.shift();
log.error('IRC', ...args);
}
}
};
if (certs) {
serverOptions.key = certs.key;
if (certs.ca) {
serverOptions.ca = certs.ca;
}
serverOptions.cert = certs.cert;
}
const server = new IRCServer(serverOptions);
config.on('reload', () => {
// update message of the day
updateMotd();
});
updateMotd();
module.exports = done => {
if (!config.irc.enabled) {
return setImmediate(() => done(null, false));
}
let started = false;
server.messageHandler = new MessageHandler({
database: db.database,
redis: db.redis,
gridfs: db.gridfs,
attachments: config.attachments
});
server.userHandler = new UserHandler({
database: db.database,
users: db.users,
redis: db.redis,
authlogExpireDays: config.log.authlogExpireDays
});
server.on('error', err => {
if (!started) {
started = true;
return done(err);
}
log.error('IRC', err);
});
server.listen(config.irc.port, config.irc.host, () => {
if (started) {
return server.close();
}
started = true;
done(null, server);
});
};
function updateMotd() {
if (config.irc.motd.source === 'message') {
server.motd = config.irc.motd.message;
} else if (config.irc.motd.source === 'file') {
fs.readFile(config.irc.motd.file, 'utf-8', (err, motd) => {
if (err) {
log.error('IRC', 'Failed to realod MOTD. %s', err.message);
return;
}
server.motd = motd;
});
}
}