Fix incorrect handing of NICK command
[KiwiIRC.git] / server / kiwi.js
1 var fs = require('fs'),
2 WebListener = require('./web.js').WebListener;
3
4 //load config
5
6 var config_filename = 'config.json',
7 config_dirs = ['/etc/kiwiirc/', __dirname + '/'];
8
9 var config = Object.create(null);
10 for (var i in config_dirs) {
11 try {
12 if (fs.lstatSync(config_dirs[i] + config_filename).isDirectory() === false) {
13 config = JSON.parse(fs.readFileSync(config_dirs[i] + config_filename, 'utf-8'));
14 console.log('Loaded config file ' + config_dirs[i] + config_filename);
15 break;
16 }
17 } catch (e) {
18 switch (e.code) {
19 case 'ENOENT': // No file/dir
20 break;
21 default:
22 console.log('An error occured parsing the config file ' + config_dirs[i] + config_filename + ': ' + e.message);
23 return false;
24 }
25 continue;
26 }
27 }
28
29 if (Object.keys(config).length === 0) {
30 console.log('Couldn\'t find a valid config file!');
31 process.exit(1);
32 }
33
34 if ((!config.servers) || (config.servers.length < 1)) {
35 console.log('No servers defined in config file');
36 process.exit(2);
37 }
38
39 //Create web listeners
40
41 var clients = [];
42 _.each(config.servers, function (server) {
43 var wl = new WebListener(server, config.transports);
44 wl.on('connection', function (client) {
45 clients.push(client);
46 });
47 wl.on('destroy', function (client) {
48 clients = _.reject(clients, function (c) {
49 return client === c;
50 });
51 });
52 });
53
54
55 //Set process title
56 process.title = 'Kiwi IRC';
57
58 //Change UID/GID
59 if ((config.user) && (config.user !== '')) {
60 process.setuid(config.user);
61 }
62 if ((config.group) && (config.group !== '')) {
63 process.setgid(config.group);
64 }
65
66 //Listen to STDIN
67 process.stdin.resume();
68 process.stdin.on('data', function (data) {
69 console.log(data.toString());
70 });