UNPKG

4.66 kBJavaScriptView Raw
1var express = require('express');
2var router = express.Router();
3var _ = require('lodash');
4var path = require('path');
5var common = require('./common');
6
7// runs on all routes and checks password if one is setup
8router.all('/db/*', common.checkLogin, function (req, res, next){
9 next();
10});
11
12// create a new database
13router.post('/database/:conn/db_create', function (req, res, next){
14 var connection_list = req.app.locals.dbConnections;
15
16 // Check for existance of connection
17 if(connection_list[req.params.conn] === undefined){
18 res.status(400).json({'msg': req.i18n.__('Invalid connection')});
19 return;
20 }
21
22 // check for valid DB name
23 if(req.body.db_name.indexOf(' ') >= 0 || req.body.db_name.indexOf('.') >= 0){
24 res.status(400).json({'msg': req.i18n.__('Invalid database name')});
25 return;
26 }
27
28 // Get DB form pool
29 var mongo_db = connection_list[req.params.conn].native.db(req.body.db_name);
30
31 // adding a new collection to create the DB
32 mongo_db.collection('test').save({}, function (err, docs){
33 if(err){
34 console.error('Error creating database: ' + err);
35 res.status(400).json({'msg': req.i18n.__('Error creating database') + ': ' + err});
36 }else{
37 res.status(200).json({'msg': req.i18n.__('Database successfully created')});
38 }
39 });
40});
41
42// delete a database
43router.post('/database/:conn/db_delete', function (req, res, next){
44 var connection_list = req.app.locals.dbConnections;
45
46 // Check for existance of connection
47 if(connection_list[req.params.conn] === undefined){
48 res.status(400).json({'msg': req.i18n.__('Invalid connection')});
49 }
50
51 // Get DB form pool
52 var mongo_db = connection_list[req.params.conn].native.db(req.body.db_name);
53
54 // delete a collection
55 mongo_db.dropDatabase(function (err, result){
56 if(err){
57 console.error('Error deleting database: ' + err);
58 res.status(400).json({'msg': req.i18n.__('Error deleting database') + ': ' + err});
59 }else{
60 res.status(200).json({'msg': req.i18n.__('Database successfully deleted'), 'db_name': req.body.db_name});
61 }
62 });
63});
64
65// Backup a database
66router.post('/database/:conn/:db/db_backup', function (req, res, next){
67 var mongodbBackup = require('mongodb-backup');
68 var MongoURI = require('mongo-uri');
69 var connection_list = req.app.locals.dbConnections;
70
71 // Check for existance of connection
72 if(connection_list[req.params.conn] === undefined){
73 res.status(400).json({'msg': req.i18n.__('Invalid connection')});
74 }
75
76 // get the URI
77 var conn_uri = MongoURI.parse(connection_list[req.params.conn].connString);
78 var db_name = req.params.db;
79
80 var uri = connection_list[req.params.conn].connString;
81
82 // add DB to URI if not present
83 if(!conn_uri.database){
84 uri = uri + '/' + db_name;
85 }
86
87 // kick off the backup
88 mongodbBackup({uri: uri, root: path.join(__dirname, '../backups'), callback: function(err){
89 if(err){
90 console.error('Backup DB error: ' + err);
91 res.status(400).json({'msg': req.i18n.__('Unable to backup database')});
92 }else{
93 res.status(200).json({'msg': req.i18n.__('Database successfully backed up')});
94 }
95 }});
96});
97
98// Restore a database
99router.post('/database/:conn/:db/db_restore', function (req, res, next){
100 var MongoURI = require('mongo-uri');
101 var mongodbRestore = require('mongodb-restore');
102 var connection_list = req.app.locals.dbConnections;
103 var dropTarget = false;
104 if(req.body.dropTarget === true || req.body.dropTarget === false){
105 dropTarget = req.body.dropTarget;
106 }
107
108 // Check for existance of connection
109 if(connection_list[req.params.conn] === undefined){
110 res.status(400).json({'msg': req.i18n.__('Invalid connection')});
111 }
112
113 // get the URI
114 var conn_uri = MongoURI.parse(connection_list[req.params.conn].connString);
115 var db_name = req.params.db;
116
117 var uri = connection_list['Local'].connString;
118
119 // add DB to URI if not present
120 if(!conn_uri.database){
121 uri = uri + '/' + db_name;
122 }
123
124 // kick off the restore
125 mongodbRestore({uri: uri, root: path.join(__dirname, '../backups', db_name), drop: dropTarget, callback: function(err){
126 if(err){
127 console.error('Restore DB error: ' + err);
128 res.status(400).json({'msg': req.i18n.__('Unable to restore database')});
129 }else{
130 res.status(200).json({'msg': req.i18n.__('Database successfully restored')});
131 }
132 }});
133});
134
135module.exports = router;