backstrap-server
Version:
Backstrap is a lightweight framework for building APIs
167 lines (145 loc) • 4.24 kB
JavaScript
var Q = require('q');
var fs = require('fs');
var crypto = require('crypto');
var dataAccess;
var utilities;
var accessControl;
var serviceRegistration;
var settings;
var models;
const path = require('path');
const rootDir = path.dirname(require.main.filename);
var schemaController = require('../schema.js');
//Settings File, contains DB params
var nodeEnv = process.env.NODE_ENV || 'local';
var settingsFile = rootDir+'/config/config.' + nodeEnv + '.js';
var config;
try {
config = require(settingsFile);
}
catch(e) {
settingsFile = '../config/config.'+nodeEnv+'.js';
config = require(settingsFile);
}
var rsString = process.env.BS_REMOTE || 'false';
rsString = rsString.toLowerCase();
var useRemoteSettings = rsString == 'true' ? true : false;
var Cms = function(da, util, ac, sr, st, m) {
dataAccess = da;
utilities = util;
accessControl = ac;
serviceRegistration = sr;
settings = st;
models = m;
};
Cms.prototype.get = {
file: function(req, callback) {
var requestedFile = req.query.file_name;
var deferred = Q.defer();
var returnObj;
if(requestedFile === 'models') {
returnObj = {models: models.data.models};
}
else if(requestedFile === 'security') {
returnObj = {roles: accessControl.data.roles};
}
else {
var errorObj = new ErrorObj(500,
'cm0001',
__filename,
'unknown file'
);
deferred.reject(errorObj);
}
// ADD EVENT TO SESSION
var resolveObj = returnObj;
deferred.resolve(resolveObj);
deferred.promise.nodeify(callback);
return deferred.promise;
}
};
Cms.prototype.post = {
file: function(req, callback) {
var body = req.body;
var file_object = body.file_object;
var deferred = Q.defer();
if (file_object.type === 'models'){
models.data.models = file_object.data;
models.save(false)
.then(function(success){
return schemaController.updateSchema(models, config.db.name, config.db.user, config.db.pass, config.db.host, config.db.port, utilities);
})
.then(function(schemaUpdate_res) {
return serviceRegistration.updateFromModels(false);
})
.then(function(endptsUpdate_res) {
return settings.reloadNetwork();
})
.then(function(reloadNetwork_res) {
var resolveObj = {models: models.data.models};
deferred.resolve(resolveObj);
})
.fail(function(err){
if(err !== undefined && err !== null && typeof(err.AddToMessage) === 'function') {
err.setMessages('error writing models config file', 'Problem updating models config file');
deferred.reject(err.AddToError(__filename, 'file'));
}
else {
var errorObj = new ErrorObj(500,
'cm0002',
__filename,
'file',
'error saving models config file',
'Error saving models config file',
err
);
deferred.reject(errorObj);
}
});
}
else if (file_object.type === 'security'){
var objSecurity = { roles: file_object.data };
accessControl.data = objSecurity;
accessControl.save(true)
.then(function(success) {
var resolveObj = {roles: models.data.roles};
deferred.resolve(resolveObj);
})
.fail(function(err) {
if(err !== undefined && err !== null && typeof(err.AddToMessage) === 'function') {
err.setMessages('error writing security config file', 'Problem updating security config file');
deferred.reject(err.AddToError(__filename, 'file'));
}
else {
var errorObj = new ErrorObj(500,
'cm0003',
__filename,
'file',
'error saving security config file',
'Error saving security config file',
err
);
deferred.reject(errorObj);
}
});
}
else{
var errorObj = new ErrorObj(500,
'cm0004',
__filename,
'file',
'error saving file'
);
deferred.reject(errorObj);
}
deferred.promise.nodeify(callback);
return deferred.promise;
}
};
Cms.prototype.put = {
};
Cms.prototype.patch = {
};
Cms.prototype.delete = {
};
exports.cms = Cms;