arrow-admin
Version:
Arrow Admin Website
71 lines (61 loc) • 1.78 kB
JavaScript
// jscs:disable jsDoc
var _ = require('lodash'),
fs = require('fs-extra'),
path = require('path'),
util = require('../util');
function configure(arrow, app, config, prefix) {
var token = String(Date.now());
if (config.env === 'development') {
// re-generate the token when restarted
arrow.on('stopped', function () {
token = String(Date.now());
});
app.get(prefix + '/generate/token/:token', function (req, resp, next) {
return resp.json({
// if the same token is passed back, we haven't yet restarted
// if it's different, we're good
success: req.params.token !== token
});
});
app.post(prefix + '/generate/model/:name', function (req, resp, next) {
var filename = util.generateModelName(config, req.params.name),
dirname = path.dirname(filename);
fs.mkdirp(dirname, function (err) {
if (err) {
return util.json(resp, {
success: false,
message: err.message
});
}
if (req.query.originalModelName) {
var original = req.query.originalModelName.replace(/[/\\]/g, '');
var originalFilename = util.generateModelName(config, original);
if (fs.existsSync(originalFilename)) {
fs.unlinkSync(originalFilename);
}
}
var suffix = 1;
while (fs.existsSync(filename)) {
filename = util.generateModelName(config, req.params.name + (++suffix));
}
fs.writeFile(filename, req.body, function (err) {
if (err) {
return util.json(resp, {
success: false,
message: err.message
});
} else {
// send back the started timestamp as a token
util.json(resp, {
success: true,
token: token
});
arrow.emit('reload');
return;
}
});
});
});
}
}
exports.configure = configure;