UNPKG

sheercms

Version:

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

223 lines (204 loc) 7.61 kB
var logger = require('../logger'); var api = require('../api'); var auth = require('../auth'); var path_mod = require('path'); var cms = require('sheercms'); var config = require('../config'); var multiparty = require('multiparty'); /* callback: (err) */ module.exports.init = function(server, callback) { //routes server.get('/cms/stats/get', auth.authenticateAdmin, routeGetStats); server.post('/cms/stats/backup', auth.authenticateAdmin, routeBackup); server.post('/cms/stats/uploadBackup', auth.authenticateAdmin, routeUploadBackup); server.post('/cms/stats/deleteBackup', auth.authenticateAdmin, routeDeleteBackup); server.post('/cms/stats/restoreBackup', auth.authenticateAdmin, routeRestoreBackup); server.get('/cms/stats/downloadBackup', auth.authenticateAdmin, routeDownloadBackup); if (callback) callback(null); }; /* GET ~/cms/stats/get */ function routeGetStats(req, res, next) { try { api.stats.getSystemStats(function(err, stats) { if (err) { res.json({ success: false, message: err.message }); } else { //get the backup list api.stats.getBackups(function(err, backups) { if (err) { res.json({ success: false, message: err.message }); } else { res.json({ success: true, stats: stats, backups: backups }); } }); } }); } catch(e) { logger.error(e); res.json({ success: false, message: "Error loading the system stats" }); } } /* POST ~/cms/stats/backup */ function routeBackup(req, res, next) { try { var options = { zip: true }; api.stats.backupDatabase(options, function(err) { if (err) { res.json({ success: false, message: "An error occurred while trying to take a backup: " + err }); } else { //get the backup list api.stats.getBackups(function(err, backups) { if (err) { res.json({ success: false, message: err.message }); } else { res.json({ success: true, message: "Database backup completed successfully!", backups: backups }); } }); } }); } catch(e) { logger.error(e); res.json({ success: false, message: "Error while backing up the database." }); } } function routeDownloadBackup(req, res, next) { var name = req.query.name; try { var path = api.stats.getBackupPath(name); if (path) { res.set({ "Content-Disposition": 'attachment; filename="' + name + '"' }); res.sendfile(path); } else { res.send(400, "Download name is invalid or not found."); } } catch(e) { logger.error(e); res.send(400, "An error occurred trying to download this backup"); } } function routeDeleteBackup(req, res, next) { var name = req.body.name; try { api.stats.deleteBackup(name, function(err) { if (err) { res.json({ success: false, message: "An error occurred while trying to delete the backup." }); } else { //get the backup list api.stats.getBackups(function(err, backups) { if (err) { res.json({ success: false, message: err.message }); } else { res.json({ success: true, message: "Database backup deleted successfully!", backups: backups }); } }); } }) } catch(e) { logger.error(e); res.json({ success: false, message: "An error occurred trying to delete this backup: " + name}); } } function routeRestoreBackup(req, res, next) { var name = req.body.name; try { api.stats.restoreBackup(name, function(err, text) { if (err) { res.json({ success: false, message: "An error occurred while trying to restore the backup.", name: name, text: text }); } else { res.json({ success: true, message: "Database backup restored successfully!", name: name, text: text}); } }) } catch(e) { logger.error(e); res.json({ success: false, message: "An error occurred trying to restore this backup: " + name}); } } /* POST ~/cms/stats/uploadBackup */ function routeUploadBackup(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: 100 * 1024 * 1024, //100 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 publish = (fields.publish && fields.publish.length > 0 && (fields.publish[0] == true || fields.publish[0] == "true")); //var contentId = (fields.contentId && fields.contentId.length > 0) ? fields.contentId[0] : null; 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 obj = { name: file.originalFilename, path: file.path, size: file.size, username: username } api.stats.uploadBackup(obj, function(err, newPath, filename) { if (err) { res.json({ success: false, message: 'Error uploading the media.'}); } else { //get the backup list api.stats.getBackups(function(err, backups) { if (err) { res.json({ success: false, message: err.message }); } else { res.json({ success: true, message: "Database backup uploaded successfully!", backups: backups, name: filename }); } }); } }); } else throw new Error("Uploaded file not found."); } } catch(e) { logger.error(e); res.json({ success: false, message: 'Error uploading the media.'}); } }); } catch(e) { logger.error(e); res.json({ success: false, message: "Error while uploading the database backup file." }); } }