1 /*jshint node:true, indent:2, curly:false, eqeqeq:true, immed:true, latedef:true, newcap:true, noarg:true,
2 regexp:true, undef:true, strict:true, trailing:true, white:true */
3 /*global X:true, SYS:true, _:true */
8 var async = require("async"),
10 path = require("path"),
11 buildAll = require("../../scripts/lib/build_all");
13 exports.installExtension = function (req, res) {
14 var database = req.session.passport.user.organization,
15 extensionName = req.query.extensionName,
16 username = req.session.passport.user.id,
17 user = new SYS.User(),
18 validateInput = function (callback) {
20 callback("Error: empty extension name");
25 validateUser = function (callback) {
28 username: X.options.databaseServer.user,
30 success: function (userModel, results) {
31 userModel.checkPrivilege("InstallExtension", database, callback);
34 callback({message: "_privilegeCheckError"});
38 npmLoad = function (callback) {
41 npmInstall = function (callback) {
42 npm.commands.install([extensionName], callback);
43 npm.on("log", function (message) {
44 // log the progress of the installation
48 buildExtension = function (callback) {
49 console.log("extension is", path.join(__dirname, "../../node_modules", extensionName));
52 extension: path.join(__dirname, "../../node_modules", extensionName)
55 // make the client-side assets immediately available to the webserver
56 // without the need for a datasource restart
57 useClientDir = function (callback) {
58 X.useClientDir("npm/" + extensionName + "/client",
59 path.join(__dirname, "../../node_modules", extensionName, "client"));
70 ], function (err, results) {
73 err.errorMessage = err.message;
77 console.log("all done");
78 res.send({data: "_success!"});