1 | var express = require('express');
|
2 | var router = express.Router();
|
3 | var _ = require('lodash');
|
4 | var path = require('path');
|
5 | var common = require('./common');
|
6 |
|
7 |
|
8 | router.all('/db/*', common.checkLogin, function (req, res, next){
|
9 | next();
|
10 | });
|
11 |
|
12 |
|
13 | router.post('/database/:conn/db_create', function (req, res, next){
|
14 | var connection_list = req.app.locals.dbConnections;
|
15 |
|
16 |
|
17 | if(connection_list[req.params.conn] === undefined){
|
18 | res.status(400).json({'msg': req.i18n.__('Invalid connection')});
|
19 | return;
|
20 | }
|
21 |
|
22 |
|
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 |
|
29 | var mongo_db = connection_list[req.params.conn].native.db(req.body.db_name);
|
30 |
|
31 |
|
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 |
|
43 | router.post('/database/:conn/db_delete', function (req, res, next){
|
44 | var connection_list = req.app.locals.dbConnections;
|
45 |
|
46 |
|
47 | if(connection_list[req.params.conn] === undefined){
|
48 | res.status(400).json({'msg': req.i18n.__('Invalid connection')});
|
49 | }
|
50 |
|
51 |
|
52 | var mongo_db = connection_list[req.params.conn].native.db(req.body.db_name);
|
53 |
|
54 |
|
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 |
|
66 | router.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 |
|
72 | if(connection_list[req.params.conn] === undefined){
|
73 | res.status(400).json({'msg': req.i18n.__('Invalid connection')});
|
74 | }
|
75 |
|
76 |
|
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 |
|
83 | if(!conn_uri.database){
|
84 | uri = uri + '/' + db_name;
|
85 | }
|
86 |
|
87 |
|
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 |
|
99 | router.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 |
|
109 | if(connection_list[req.params.conn] === undefined){
|
110 | res.status(400).json({'msg': req.i18n.__('Invalid connection')});
|
111 | }
|
112 |
|
113 |
|
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 |
|
120 | if(!conn_uri.database){
|
121 | uri = uri + '/' + db_name;
|
122 | }
|
123 |
|
124 |
|
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 |
|
135 | module.exports = router;
|