From e6061810f938c70a654a71e108b0ef4fee38d213 Mon Sep 17 00:00:00 2001
From: Julian Lam <julian@designcreateplay.com>
Date: Mon, 25 May 2015 16:06:49 -0400
Subject: [PATCH] updating nodebb executable so that it is a node script
 instead of bash script

---
 nodebb       | 250 +++++++++++++++++++++++++--------------------------
 package.json |   6 +-
 2 files changed, 125 insertions(+), 131 deletions(-)

diff --git a/nodebb b/nodebb
index d45163ee32..dd05fbf841 100755
--- a/nodebb
+++ b/nodebb
@@ -1,138 +1,130 @@
-#!/bin/bash
-
-# $0 script path
-# $1 action
-# $2 subaction
-
-node="$(which nodejs 2>/dev/null)";
-if [ $? -gt 0 ];
-	then node="$(which node)";
-fi
-
-function pidExists() {
-	if [ -e "pidfile" ];
-		then
-			if ps -p $(cat pidfile) > /dev/null
-				then return 1;
-				else
-					rm ./pidfile;
-					return 0;
-			fi
-		else
-			return 0;
-	fi
+#!/usr/bin/env node
+
+var colors = require('colors'),
+	cproc = require('child_process'),
+	argv = require('minimist')(process.argv.slice(2)),
+	fs = require('fs');
+
+var getRunningPid = function(callback) {
+		fs.readFile(__dirname + '/pidfile', {
+			encoding: 'utf-8'
+		}, function(err, pid) {
+			if (err) {
+				return callback(err);
+			}
+
+			try {
+				process.kill(parseInt(pid, 10), 0);
+				callback(null, parseInt(pid, 10));
+			} catch(e) {
+				callback(e);
+			}
+		});
+	};
+
+switch(process.argv[2]) {
+	case 'status':
+		getRunningPid(function(err, pid) {
+			if (!err) {
+				process.stdout.write('\nNodeBB Running '.bold + '(pid '.cyan + pid.toString().cyan + ')\n'.cyan);
+				process.stdout.write('\t"' + './nodebb stop'.yellow + '" to stop the NodeBB server\n');
+				process.stdout.write('\t"' + './nodebb log'.yellow + '" to view server output\n');
+				process.stdout.write('\t"' + './nodebb restart'.yellow + '" to restart NodeBB\n\n');
+			} else {
+				process.stdout.write('\nNodeBB is not running\n'.bold);
+				process.stdout.write('\t"' + './nodebb start'.yellow + '" to launch the NodeBB server\n\n');
+			}
+		})
+		break;
+
+	case 'start':
+		process.stdout.write('\nStarting NodeBB\n'.bold);
+		process.stdout.write('  "' + './nodebb stop'.yellow + '" to stop the NodeBB server\n');
+		process.stdout.write('  "' + './nodebb log'.yellow + '" to view server output\n');
+		process.stdout.write('  "' + './nodebb restart'.yellow + '" to restart NodeBB\n\n');
+
+		// Spawn a new NodeBB process
+		cproc.fork(__dirname + '/loader.js', {
+			env: process.env,
+			detatched: true
+		});
+		break;
+
+	case 'stop':
+		getRunningPid(function(err, pid) {
+			if (!err) {
+				process.kill(pid, 'SIGTERM');
+				process.stdout.write('Stopping NodeBB. Goodbye!\n')
+			} else {
+				process.stdout.write('NodeBB is already stopped.\n');
+			}
+		});
+		break;
+
+	case 'restart':
+		getRunningPid(function(err, pid) {
+			if (!err) {
+				process.kill(pid, 'SIGHUP');
+			} else {
+				process.stdout.write('NodeBB could not be restarted, as a running instance could not be found.');
+			}
+		});
+		break;
+
+	case 'reload':
+		getRunningPid(function(err, pid) {
+			if (!err) {
+				process.kill(pid, 'SIGUSR2');
+			} else {
+				process.stdout.write('NodeBB could not be reloaded, as a running instance could not be found.');
+			}
+		});
+		break;
+
+	case 'dev':
+		process.env.NODE_ENV = 'development';
+		cproc.fork(__dirname + '/loader.js', ['--no-daemon', '--no-silent'], {
+			env: process.env
+		});
+		break;
+
+	default:
+		process.stdout.write('\nWelcome to NodeBB\n\n'.bold);
+		process.stdout.write('Usage: ./nodebb {start|stop|reload|restart|log|setup|reset|upgrade|dev}\n\n');
+		process.stdout.write('\t' + 'start'.yellow + '\tStart the NodeBB server\n');
+		process.stdout.write('\t' + 'stop'.yellow + '\tStops the NodeBB server\n');
+		process.stdout.write('\t' + 'reload'.yellow + '\tRestarts NodeBB\n');
+		process.stdout.write('\t' + 'restart'.yellow + '\tRestarts NodeBB\n');
+		process.stdout.write('\t' + 'log'.yellow + '\tOpens the logging interface (useful for debugging)\n');
+		process.stdout.write('\t' + 'setup'.yellow + '\tRuns the NodeBB setup script\n');
+		process.stdout.write('\t' + 'reset'.yellow + '\tDisables all plugins, restores the default theme.\n');
+		process.stdout.write('\t' + 'upgrade'.yellow + '\tRun NodeBB upgrade scripts, ensure packages are up-to-date\n');
+		process.stdout.write('\t' + 'dev'.yellow + '\tStart NodeBB in interactive development mode\n');
+		process.stdout.write('\t' + 'watch'.yellow + '\tStart NodeBB in development mode and watch for changes\n');
+		process.stdout.write('\n');
+		break;
 }
 
-case "$1" in
-	start)
-		echo "Starting NodeBB";
-		echo "  \"./nodebb stop\" to stop the NodeBB server";
-		echo "  \"./nodebb log\" to view server output";
-		echo "  \"./nodebb restart\" to restart NodeBB";
-
-		# Start the loader daemon
-		"$node" loader "$@"
-		;;
-
-	stop)
-		pidExists;
-		if [ 0 -eq $? ];
-			then
-				echo "NodeBB is already stopped.";
-			else
-				echo "Stopping NodeBB. Goodbye!";
-				kill $(cat pidfile);
-		fi
-		;;
-
-	restart)
-		pidExists;
-		if [ 0 -eq $? ];
-			then
-				echo "NodeBB could not be restarted, as a running instance could not be found.";
-			else
-				echo "Restarting NodeBB.";
-				kill -1 $(cat pidfile);
-		fi
-		;;
-
-	reload)
-		pidExists;
-		if [ 0 -eq $? ];
-			then
-				echo "NodeBB could not be reloaded, as a running instance could not be found.";
-			else
-				echo "Reloading NodeBB.";
-				kill -12 $(cat pidfile);
-		fi
-		;;
-
-	status)
-		pidExists;
-		if [ 0 -eq $? ];
-			then
-				echo "NodeBB is not running";
-				echo "  \"./nodebb start\" to launch the NodeBB server";
-			else
-				echo "NodeBB Running (pid $(cat pidfile))";
-				echo "  \"./nodebb stop\" to stop the NodeBB server";
-				echo "  \"./nodebb log\" to view server output";
-				echo "  \"./nodebb restart\" to restart NodeBB";
-		fi
-		;;
-
+/*
 	log)
-		clear;
-		tail -F ./logs/output.log;
-		;;
+			clear;
+			tail -F ./logs/output.log;
+			;;
 
 	upgrade)
-		npm install
-		# ls -d node_modules/nodebb* | xargs -n1 basename | xargs npm install
-		# ls -d node_modules/nodebb* | xargs -n1 basename | xargs npm update
-		npm i nodebb-theme-vanilla nodebb-theme-lavender nodebb-widget-essentials
-		"$node" app --upgrade
-		touch package.json
-		;;
+			npm install
+			# ls -d node_modules/nodebb* | xargs -n1 basename | xargs npm install
+			# ls -d node_modules/nodebb* | xargs -n1 basename | xargs npm update
+			npm i nodebb-theme-vanilla nodebb-theme-lavender nodebb-widget-essentials
+			"$node" app --upgrade
+			touch package.json
+			;;
 
 	setup)
-		"$node" app --setup "$@"
-		;;
+			"$node" app --setup "$@"
+			;;
 
 	reset)
-		"$node" app --reset --$2
-		;;
-
-	dev)
-		echo "Launching NodeBB in \"development\" mode."
-		echo "To run the production build of NodeBB, please use \"forever\"."
-		echo "More Information: https://docs.nodebb.org/en/latest/running/index.html"
-		NODE_ENV=development "$node" loader --no-daemon --no-silent "$@"
-		;;
-
-	watch)
-		echo "***************************************************************************"
-		echo "WARNING: ./nodebb watch will be deprecated soon. Please use grunt: "
-		echo "https://docs.nodebb.org/en/latest/running/index.html#grunt-development"
-		echo "***************************************************************************"
-		NODE_ENV=development supervisor -q --ignore public/templates,public/nodebb.min.js,public/nodebb.min.js.map --extensions 'node|js|tpl|less' -- app "$@"
-		;;
-
-	*)
-		echo "Welcome to NodeBB"
-		echo $"Usage: $0 {start|stop|reload|restart|log|setup|reset|upgrade|dev|watch}"
-		echo ''
-		column -s '	' -t <<< '
-		start	Start the NodeBB server
-		stop	Stops the NodeBB server
-		reload	Restarts NodeBB
-		restart	Restarts NodeBB
-		log	Opens the logging interface (useful for debugging)
-		setup	Runs the NodeBB setup script
-		reset	Disables all plugins, restores the default theme.
-		upgrade	Run NodeBB upgrade scripts, ensure packages are up-to-date
-		dev	Start NodeBB in interactive development mode
-		watch	Start NodeBB in development mode and watch for changes
-		'
-		exit 1
-esac
+			"$node" app --reset --$2
+			;;
+*/
\ No newline at end of file
diff --git a/package.json b/package.json
index 27d4933f94..6fd4275862 100644
--- a/package.json
+++ b/package.json
@@ -17,6 +17,7 @@
     "async": "~0.9.0",
     "bcryptjs": "~2.1.0",
     "body-parser": "^1.9.0",
+    "colors": "^1.1.0",
     "compression": "^1.1.0",
     "connect-ensure-login": "^0.1.1",
     "connect-flash": "^0.1.1",
@@ -34,6 +35,7 @@
     "logrotate-stream": "^0.2.3",
     "lru-cache": "^2.6.1",
     "mime": "^1.3.4",
+    "minimist": "^1.1.1",
     "mkdirp": "~0.5.0",
     "mmmagic": "^0.3.13",
     "morgan": "^1.3.2",
@@ -44,11 +46,11 @@
     "nodebb-plugin-mentions": "^0.11.2",
     "nodebb-plugin-soundpack-default": "^0.1.1",
     "nodebb-plugin-spam-be-gone": "^0.4.0",
+    "nodebb-rewards-essentials": "^0.0.1",
     "nodebb-theme-lavender": "^1.0.42",
-    "nodebb-theme-vanilla": "^1.0.130",
     "nodebb-theme-persona": "^0.1.55",
+    "nodebb-theme-vanilla": "^1.0.130",
     "nodebb-widget-essentials": "^1.0.2",
-    "nodebb-rewards-essentials": "^0.0.1",
     "npm": "^2.1.4",
     "passport": "^0.2.1",
     "passport-local": "1.0.0",