summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEgil Moeller <egil.moller@freecode.no>2012-07-03 23:30:40 +0200
committerEgil Moeller <egil.moller@freecode.no>2012-07-03 23:31:44 +0200
commitb438a278a16fbac3b38ad2105c3431b7e669df83 (patch)
tree5fdff1cc0d84c0e082ba29d8e07804594e06afa4
parent3338db9485b1e97818ba67a6008866cbce15fef0 (diff)
downloadetherpad-lite-b438a278a16fbac3b38ad2105c3431b7e669df83.zip
Make the server restart on plugin install
-rw-r--r--src/ep.json4
-rw-r--r--src/node/hooks/express.js62
-rw-r--r--src/node/hooks/express/webaccess.js11
-rwxr-xr-xsrc/node/server.js45
-rw-r--r--src/static/js/pluginfw/installer.js10
5 files changed, 85 insertions, 47 deletions
diff --git a/src/ep.json b/src/ep.json
index 6bc77735..ce6d3a00 100644
--- a/src/ep.json
+++ b/src/ep.json
@@ -1,5 +1,9 @@
{
"parts": [
+ { "name": "express", "hooks": {
+ "createServer": "ep_etherpad-lite/node/hooks/express:createServer",
+ "restartServer": "ep_etherpad-lite/node/hooks/express:restartServer"
+ } },
{ "name": "static", "hooks": { "expressCreateServer": "ep_etherpad-lite/node/hooks/express/static:expressCreateServer" } },
{ "name": "specialpages", "hooks": { "expressCreateServer": "ep_etherpad-lite/node/hooks/express/specialpages:expressCreateServer" } },
{ "name": "padurlsanitize", "hooks": { "expressCreateServer": "ep_etherpad-lite/node/hooks/express/padurlsanitize:expressCreateServer" } },
diff --git a/src/node/hooks/express.js b/src/node/hooks/express.js
new file mode 100644
index 00000000..c7897e77
--- /dev/null
+++ b/src/node/hooks/express.js
@@ -0,0 +1,62 @@
+var hooks = require("ep_etherpad-lite/static/js/pluginfw/hooks");
+var express = require('express');
+var settings = require('../utils/Settings');
+var fs = require('fs');
+var path = require('path');
+var _ = require("underscore");
+
+var server;
+var serverName;
+
+exports.createServer = function () {
+ //try to get the git version
+ var version = "";
+ try
+ {
+ var rootPath = path.resolve(npm.dir, '..');
+ var ref = fs.readFileSync(rootPath + "/.git/HEAD", "utf-8");
+ var refPath = rootPath + "/.git/" + ref.substring(5, ref.indexOf("\n"));
+ version = fs.readFileSync(refPath, "utf-8");
+ version = version.substring(0, 7);
+ console.log("Your Etherpad Lite git version is " + version);
+ }
+ catch(e)
+ {
+ console.warn("Can't get git version for server header\n" + e.message)
+ }
+ console.log("Report bugs at https://github.com/Pita/etherpad-lite/issues")
+
+ serverName = "Etherpad-Lite " + version + " (http://j.mp/ep-lite)";
+
+ exports.restartServer();
+
+ console.log("You can access your Etherpad-Lite instance at http://" + settings.ip + ":" + settings.port + "/");
+ if(!_.isEmpty(settings.users)){
+ console.log("The plugin admin page is at http://" + settings.ip + ":" + settings.port + "/admin/plugins");
+ }
+ else{
+ console.warn("Admin username and password not set in settings.json. To access admin please uncomment and edit 'users' in settings.json");
+ }
+
+}
+
+exports.restartServer = function () {
+ if (server) {
+ console.log("Restarting express server");
+ server.close();
+ }
+
+ server = express.createServer();
+
+ server.use(function (req, res, next) {
+ res.header("Server", serverName);
+ next();
+ });
+
+ server.configure(function() {
+ hooks.callAll("expressConfigure", {"app": server});
+ });
+ hooks.callAll("expressCreateServer", {"app": server});
+
+ server.listen(settings.port, settings.ip);
+} \ No newline at end of file
diff --git a/src/node/hooks/express/webaccess.js b/src/node/hooks/express/webaccess.js
index 028d8ab1..ffced047 100644
--- a/src/node/hooks/express/webaccess.js
+++ b/src/node/hooks/express/webaccess.js
@@ -88,6 +88,8 @@ exports.basicAuth = function (req, res, next) {
});
}
+var secret = null;
+
exports.expressConfigure = function (hook_name, args, cb) {
// If the log level specified in the config file is WARN or ERROR the application server never starts listening to requests as reported in issue #158.
// Not installing the log4js connect logger when the log level has a higher severity than INFO since it would not log at that level anyway.
@@ -100,10 +102,15 @@ exports.expressConfigure = function (hook_name, args, cb) {
* name) to a javascript identifier compatible string. Makes code
* handling it cleaner :) */
- args.app.sessionStore = new express.session.MemoryStore();
+ if (!exports.sessionStore) {
+ exports.sessionStore = new express.session.MemoryStore();
+ secret = randomString(32);
+ }
+
+ args.app.sessionStore = exports.sessionStore;
args.app.use(express.session({store: args.app.sessionStore,
key: 'express_sid',
- secret: apikey = randomString(32)}));
+ secret: secret}));
args.app.use(exports.basicAuth);
}
diff --git a/src/node/server.js b/src/node/server.js
index 4eb38ea7..2cfcde82 100755
--- a/src/node/server.js
+++ b/src/node/server.js
@@ -22,36 +22,13 @@
*/
var log4js = require('log4js');
-var fs = require('fs');
var settings = require('./utils/Settings');
var db = require('./db/DB');
var async = require('async');
-var express = require('express');
-var path = require('path');
var plugins = require("ep_etherpad-lite/static/js/pluginfw/plugins");
var hooks = require("ep_etherpad-lite/static/js/pluginfw/hooks");
var npm = require("npm/lib/npm.js");
-var _ = require("underscore");
-//try to get the git version
-var version = "";
-try
-{
- var rootPath = path.resolve(npm.dir, '..');
- var ref = fs.readFileSync(rootPath + "/.git/HEAD", "utf-8");
- var refPath = rootPath + "/.git/" + ref.substring(5, ref.indexOf("\n"));
- version = fs.readFileSync(refPath, "utf-8");
- version = version.substring(0, 7);
- console.log("Your Etherpad Lite git version is " + version);
-}
-catch(e)
-{
- console.warn("Can't get git version for server header\n" + e.message)
-}
-
-console.log("Report bugs at https://github.com/Pita/etherpad-lite/issues")
-
-var serverName = "Etherpad-Lite " + version + " (http://j.mp/ep-lite)";
//set loglevel
log4js.setGlobalLogLevel(settings.loglevel);
@@ -75,27 +52,7 @@ async.waterfall([
//initalize the http server
function (callback)
{
- //create server
- var app = express.createServer();
-
- app.use(function (req, res, next) {
- res.header("Server", serverName);
- next();
- });
-
- app.configure(function() { hooks.callAll("expressConfigure", {"app": app}); });
-
- hooks.callAll("expressCreateServer", {"app": app});
-
- //let the server listen
- app.listen(settings.port, settings.ip);
- console.log("You can access your Etherpad-Lite instance at http://" + settings.ip + ":" + settings.port + "/");
- if(!_.isEmpty(settings.users)){
- console.log("The plugin admin page is at http://" + settings.ip + ":" + settings.port + "/admin/plugins");
- }
- else{
- console.warn("Admin username and password not set in settings.json. To access admin please uncomment and edit 'users' in settings.json");
- }
+ hooks.callAll("createServer", {});
callback(null);
}
]);
diff --git a/src/static/js/pluginfw/installer.js b/src/static/js/pluginfw/installer.js
index 1bb8db9e..e7c6fb80 100644
--- a/src/static/js/pluginfw/installer.js
+++ b/src/static/js/pluginfw/installer.js
@@ -3,7 +3,7 @@ var hooks = require("ep_etherpad-lite/static/js/pluginfw/hooks");
var npm = require("npm");
var registry = require("npm/lib/utils/npm-registry-client/index.js");
-var withNpm = function (npmfn, cb) {
+var withNpm = function (npmfn, final, cb) {
npm.load({}, function (er) {
if (er) return cb({progress:1, error:er});
npm.on("log", function (message) {
@@ -15,6 +15,7 @@ var withNpm = function (npmfn, cb) {
data.progress = 1;
data.message = "Done.";
cb(data);
+ final();
});
});
}
@@ -36,6 +37,9 @@ exports.uninstall = function(plugin_name, cb) {
});
});
},
+ function () {
+ hooks.aCallAll("restartServer", {}, function () {});
+ },
cb
);
};
@@ -51,6 +55,9 @@ exports.install = function(plugin_name, cb) {
});
});
},
+ function () {
+ hooks.aCallAll("restartServer", {}, function () {});
+ },
cb
);
};
@@ -93,6 +100,7 @@ exports.search = function(query, cache, cb) {
}
);
},
+ function () { },
cb
);
};