UNPKG

arrow-admin

Version:
106 lines (97 loc) 2.7 kB
// jscs:disable jsDoc var _ = require('lodash'), util = require('../util'), fs = require('fs'), path = require('path'), AppC = require('appc-platform-sdk'); function isAuthenticated(config, authCallback, user, org, callback) { if (authCallback) { // if in production and not enabled, return false if (config.env !== 'development' && !config.enableAdminInProduction) { return callback(true); // Note: 'true' is, in this case, an error object.. } authCallback(user, org, callback); } else { callback(true); // Note: 'true' is, in this case, an error object.. } } function configure(arrow, app, config, prefix, authCallback) { var confDir = path.resolve(path.join(arrow.getComponentDir('connector', false), '..', 'conf')); function checkAuth(req, resp, next, cb) { var user = req.query.username, org = +req.query.org_id; if (!user || !org) { // should always be passed, return a 500 return next(new Error('invalid parameters passed')); } isAuthenticated(config, authCallback, user, org, function (err) { if (err) { return resp.json({ success: false, message: 'Not authenticated.' }); } try { cb(); } catch (err) { return resp.json({ success: false, message: err.toString() }); } }); } app.get(prefix + '/configurations', function (req, resp, next) { checkAuth(req, resp, next, function () { var files = fs.readdirSync(confDir) .filter(function (f) { return f[0] !== '.'; }); return resp.json({ success: true, results: files }); }); }); app.get(prefix + '/configurations/:id', function (req, resp, next) { checkAuth(req, resp, next, function () { var files = fs.readdirSync(confDir) .filter(function (f) { return f[0] !== '.' && f === req.params.id; }) .map(function (f) { return fs.readFileSync(path.join(confDir, f), 'UTF-8'); }); return resp.json({ success: files.length === 1, results: files[0] }); }); }); app.post(prefix + '/configurations/:id', function (req, resp, next) { if (!req.body.code) { return resp.json({ success: false, message: 'code is a required body parameter.' }); } checkAuth(req, resp, next, function () { var files = fs.readdirSync(confDir) .filter(function (f) { return f[0] !== '.' && f === req.params.id; }); // TODO: In the future, we should let them create config files, too. if (files.length === 1) { fs.writeFileSync(path.join(confDir, files[0]), req.body.code, 'UTF-8'); } resp.json({ success: files.length === 1, results: files[0] }); arrow.emit('reload'); return; }); }); } exports.configure = configure;