UNPKG

sheercms

Version:

Sheer Cliff CMS is a simple and powerful content management system (CMS) for Node JS.

281 lines (232 loc) 8.71 kB
var logger = require('../logger'); var api = require('../api'); var auth = require('../auth'); var config = require('../config'); var path_mod = require('path'); var cms = require('sheercms'); var multiparty = require('multiparty'); /* callback: (err) */ module.exports.init = function(server, callback) { //routes server.get('/cms/packages/list', auth.authenticateAdmin, routePackageList); server.get('/cms/packages/get', auth.authenticateAdmin, routePackageGet); server.post('/cms/packages/create', auth.authenticateAdmin, routePackageCreate); server.post('/cms/packages/update', auth.authenticateAdmin, routePackageUpdate); server.post('/cms/packages/delete', auth.authenticateAdmin, routePackageDelete); server.post('/cms/packages/build', auth.authenticateAdmin, routePackageBuild); server.get('/cms/packages/download', auth.authenticateAdmin, routePackageDownload); server.post('/cms/packages/upload', auth.authenticateAdmin, routePackageUpload); server.post('/cms/packages/validate', auth.authenticateAdmin, routePackageValidate); if (callback) callback(null); }; function routePackageList(req, res, next) { try { api.packages.getPackages(function(err, results) { if (err) res.json({ success: false, message: err.message }); else res.json({ success: true, packages: results }); }); } catch(e) { logger.error(e); res.json({ success: false, message: 'Error retrieving the list of packages.'}); } } function routePackageGet(req, res, next) { try { var id = req.query.packageId; api.packages.getPackage(id, function(err, result) { if (err) res.json({ success: false, message: err.message }); else res.json({ success: true, package: result }); }); } catch(e) { logger.error(e); res.json({ success: false, message: 'Error retrieving the package.'}); } } function routePackageCreate(req, res, next) { try { var name = req.body.name; api.packages.createPackage(name, function(err, savedPkg) { if (err) res.json({ success: false, message: err.message }); else res.json({ success: true, package: savedPkg }); }); } catch(e) { logger.error(e); res.json({ success: false, message: 'Error creating the package.'}); } } function routePackageUpdate(req, res, next) { try { var json = req.body.data; var pkg = JSON.parse(json); //var username = req.user.username; //fix the package items pkg.items = fixPackageItems(pkg.items); api.packages.updatePackage(pkg, function(err, savedPkg) { if (err) res.json({ success: false, message: err.message }); else res.json({ success: true, package: savedPkg }); }); } catch(e) { logger.error(e); res.json({ success: false, message: 'Error updating the package.'}); } } function fixPackageItems(items) { var arr = []; if (items) { for(var i = 0; i < items.length; i++) { var item = items[i]; var obj = new PackageItem(item); arr.push(obj); } } return arr; } function routePackageDelete(req, res, next) { try { var id = req.body.packageId; api.packages.deletePackage(id, function(err) { if (err) res.json({ success: false, message: err.message }); else res.json({ success: true, message: 'Package deleted successfully!' }); }); } catch(e) { logger.error(e); res.json({ success: false, message: 'Error deleting the package.'}); } } function routePackageBuild(req, res, next) { try { var id = req.body.packageId; api.packages.buildPackage(id, function(err, result) { if (err) res.json({ success: false, message: err.message }); else res.json({ success: true, message: 'Package built successfully!' }); }); } catch(e) { logger.error(e); res.json({ success: false, message: 'Error building the package.'}); } } function routePackageDownload(req, res, next) { try { var id = req.query.id; api.packages.getPackage(id, function(err, pkg) { if (err) res.json({ success: false, message: err.message }); else if (pkg && pkg.filename && pkg.filename.length > 0) { var settings = api.packages.getPackageSettings(); var filename = pkg.filename.replace('.zip', '') + '.zip' res.set({ "Content-Disposition": 'attachment; filename="' + filename + '"' }); res.sendfile(path_mod.join(settings.path, filename)); } else { var e = new Error('Invalid package or package filename.'); logger.error(e); res.json({ success: false, message: e.message }); } }); } catch(e) { logger.error(e); res.json({ success: false, message: 'Error downloading the package.'}); } } function routePackageValidate(req, res, next) { try { var id = req.body.packageId; api.packages.validatePackage(id, function(err, result) { if (err) res.json({ success: false, message: err.message }); else res.json({ success: true, message: result.message, valid: result.valid, invalidItems: result.invalidItems }); }); } catch(e) { logger.error(e); res.json({ success: false, message: 'Error validating the package.'}); } } function routePackageUpload(req, res, next) { try { var username = req.user.username; var uploadDir = path_mod.join(cms.getRoot(), 'temp/uploads'); logger.info("Using upload directory: " + uploadDir); // parse a file upload var form = new multiparty.Form({ maxFilesSize: 20 * 1024 * 1024, //20 MB uploadDir: uploadDir }); var count = 0; form.parse(req, function(err, fields, files) { try { if (err) { logger.error(err); res.json({ success: false, message: err.message}); } else { var fileArr = files.file; //only one file uploaded at a time if (fileArr && fileArr.length > 0) { var file = fileArr[0]; logger.info("File uploaded to: " + file.path); var opt = { name: file.originalFilename, path: file.path, size: file.size, username: username }; var results = []; api.packages.installPackage(opt, function(result) { //onProgress //result: {package, item, value, total, status, message} results.push({ message: result.message, status: result.status }); }, function(err, pkg) { if (err) { res.json({ success: false, message: err.message, results: results }); } else { res.json({ success: true, message: "Package installed successfully!", results: results }); } }); } } } catch(e) { logger.error(e); res.json({ success: false, message: 'Error installing the package.'}); } }); } catch(e) { logger.error(e); res.json({ success: false, message: 'Error installing the package.'}); } } function PackageItem(item) { var self = this; self.itemId = item.itemId; self.itemType = item.itemType; self.name = item.name; self.recursive = item.recursive; self.overwrite = item.overwrite; self.publish = item.publish; }