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