mirror of
https://github.com/Hopiu/webapi-eca.git
synced 2026-03-17 06:20:23 +00:00
69 lines
2.3 KiB
JavaScript
69 lines
2.3 KiB
JavaScript
var fs = require('fs'),
|
|
path = require('path'),
|
|
log = require('./logging');
|
|
|
|
function requireFromString(src, name, dir) {
|
|
if(!dir) dir = __dirname;
|
|
//FIXME load modules only into a safe environment with given modules, no access to whole application
|
|
var id = path.resolve(dir, name, name + '.js');
|
|
var m = new module.constructor(id, module);
|
|
m.paths = module.paths;
|
|
try {
|
|
m._compile(src);
|
|
} catch(err) {
|
|
err.addInfo = 'during compilation of module ' + name;
|
|
log.error('LM', err);
|
|
// log.error('LM', ' during compilation of ' + name + ': ' + err);
|
|
}
|
|
return m.exports;
|
|
}
|
|
|
|
function loadModule(directory, name, callback) {
|
|
try {
|
|
fs.readFile(path.resolve(__dirname, '..', directory, name, name + '.js'), 'utf8', function (err, data) {
|
|
if (err) {
|
|
log.error('LM', 'Loading module file!');
|
|
return;
|
|
}
|
|
var mod = requireFromString(data, name, directory);
|
|
if(mod && fs.existsSync(path.resolve(__dirname, '..', directory, name, 'credentials.json'))) {
|
|
fs.readFile(path.resolve(__dirname, '..', directory, name, 'credentials.json'), 'utf8', function (err, auth) {
|
|
if (err) {
|
|
log.error('LM', 'Loading credentials file for "' + name + '"!');
|
|
callback(name, data, mod, null);
|
|
return;
|
|
}
|
|
if(mod.loadCredentials) mod.loadCredentials(JSON.parse(auth));
|
|
callback(name, data, mod, auth);
|
|
});
|
|
} else {
|
|
// Hand back the name, the string contents and the compiled module
|
|
callback(name, data, mod, null);
|
|
}
|
|
});
|
|
} catch(err) {
|
|
log.error('LM', 'Failed loading module "' + name + '"');
|
|
}
|
|
}
|
|
|
|
function loadModules(directory, callback) {
|
|
fs.readdir(path.resolve(__dirname, '..', directory), function (err, list) {
|
|
if (err) {
|
|
log.error('LM', 'loading modules directory: ' + err);
|
|
return;
|
|
}
|
|
log.print('LM', 'Loading ' + list.length + ' modules from "' + directory + '"');
|
|
list.forEach(function (file) {
|
|
fs.stat(path.resolve(__dirname, '..', directory, file), function (err, stat) {
|
|
if (stat && stat.isDirectory()) {
|
|
loadModule(directory, file, callback);
|
|
}
|
|
});
|
|
});
|
|
});
|
|
}
|
|
|
|
exports.loadModule = loadModule;
|
|
exports.loadModules = loadModules;
|
|
exports.requireFromString = requireFromString;
|
|
|