all files / src/ meta.js

52.08% Statements 25/48
14.29% Branches 2/14
28.57% Functions 4/14
51.06% Lines 24/47
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 102 103 104 105 106 107 108                                  33× 33×       66×                                                                                                                                
"use strict";
 
var async = require('async'),
	winston = require('winston'),
	templates = require('templates.js'),
	os = require('os'),
	nconf = require('nconf'),
 
	user = require('./user'),
	groups = require('./groups'),
	emitter = require('./emitter'),
	pubsub = require('./pubsub'),
	auth = require('./routes/authentication'),
	utils = require('../public/src/utils');
 
(function (Meta) {
	Meta.reloadRequired = false;
 
	require('./meta/configs')(Meta);
	require('./meta/themes')(Meta);
	require('./meta/js')(Meta);
	require('./meta/css')(Meta);
	require('./meta/sounds')(Meta);
	require('./meta/settings')(Meta);
	require('./meta/logs')(Meta);
	require('./meta/tags')(Meta);
	require('./meta/dependencies')(Meta);
	Meta.templates = require('./meta/templates');
	Meta.blacklist = require('./meta/blacklist');
 
	/* Assorted */
	Meta.userOrGroupExists = function(slug, callback) {
		slug = utils.slugify(slug);
		async.parallel([
			async.apply(user.existsBySlug, slug),
			async.apply(groups.existsBySlug, slug)
		], function(err, results) {
			callback(err, results ? results.some(function(result) { return result; }) : false);
		});
	};
 
	Meta.reload = function(callback) {
		pubsub.publish('meta:reload', {hostname: os.hostname()});
		reload(callback);
	};
 
	pubsub.on('meta:reload', function(data) {
		if (data.hostname !== os.hostname()) {
			reload();
		}
	});
 
	function reload(callback) {
		callback = callback || function() {};
 
		var	plugins = require('./plugins');
		async.series([
			function (next) {
				plugins.fireHook('static:app.reload', {}, next);
			},
			async.apply(plugins.clearRequireCache),
			async.apply(plugins.reload),
			async.apply(plugins.reloadRoutes),
			async.apply(Meta.css.minify),
			async.apply(Meta.js.minify, 'nodebb.min.js'),
			async.apply(Meta.js.minify, 'acp.min.js'),
			async.apply(Meta.sounds.init),
			async.apply(Meta.templates.compile),
			async.apply(auth.reloadRoutes),
			function(next) {
				Meta.config['cache-buster'] = utils.generateUUID();
				templates.flush();
				next();
			}
		], function(err) {
			if (!err) {
				emitter.emit('nodebb:ready');
			}
			Meta.reloadRequired = false;
 
			callback(err);
		});
	}
 
	Meta.restart = function() {
		pubsub.publish('meta:restart', {hostname: os.hostname()});
		restart();
	};
 
	Iif (nconf.get('isPrimary') === 'true') {
		pubsub.on('meta:restart', function(data) {
			if (data.hostname !== os.hostname()) {
				restart();
			}
		});
	}
 
	function restart() {
		if (process.send) {
			process.send({
				action: 'restart'
			});
		} else {
			winston.error('[meta.restart] Could not restart, are you sure NodeBB was started with `./nodebb start`?');
		}
	}
}(exports));