-
Notifications
You must be signed in to change notification settings - Fork 953
/
document.js
97 lines (77 loc) · 2.57 KB
/
document.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
var config = require('../config');
var utils = require('../utils');
var vm = require('vm');
exports.viewDocument = function(req, res, next) {
var ctx = {
title: 'Viewing Document: ' + req.document._id,
editorTheme: config.options.editorTheme
};
res.render('document', ctx);
};
exports.addDocument = function(req, res, next) {
var doc = req.body.document;
if (doc == undefined || doc.length == 0) {
req.session.error = "You forgot to enter a document!";
return res.redirect('back');
}
var docJSON;
var sandbox = utils.getSandbox();
//JSON.parse doesn't support BSON data types
//Document is evaluated in a vm in order to support BSON data types
//Sandbox contains BSON data type functions from node-mongodb-native
try {
vm.runInNewContext('doc = eval((' + doc + '));', sandbox);
} catch (err) {
req.session.error = "That document is not valid!";
console.error(err);
return res.redirect('back');
}
var docJSON = sandbox.doc;
req.collection.insert(docJSON, {safe: true}, function(err, result) {
if (err) {
req.session.error = "Something went wrong: " + err;
console.error(err);
return res.redirect('back');
}
req.session.success = "Document added!";
res.redirect('/db/' + req.dbName + '/' + req.collectionName);
});
};
exports.updateDocument = function(req, res, next) {
var doc = req.body.document;
if (doc == undefined || doc.length == 0) {
req.session.error = "You forgot to enter a document!";
return res.redirect('back');
}
var sandbox = utils.getSandbox();
try {
vm.runInNewContext('doc = eval((' + doc + '));', sandbox);
} catch (err) {
req.session.error = "That document is not valid!";
console.error(err);
return res.redirect('back');
}
var docJSON = sandbox.doc;
docJSON._id = req.document._id;
req.collection.update(req.document, docJSON, {safe: true}, function(err, result) {
if (err) {
//document was not saved
req.session.error = "Something went wrong: " + err;
console.error(err);
return res.redirect('back');
}
req.session.success = "Document updated!";
res.redirect('/db/' + req.dbName + '/' + req.collectionName);
});
};
exports.deleteDocument = function(req, res, next) {
req.collection.remove(req.document, {safe: true}, function(err, result) {
if (err) {
req.session.error = "Something went wrong! " + err;
console.error(err);
return res.redirect('back');
}
req.session.success = "Document deleted!";
res.redirect('/db/' + req.dbName + '/' + req.collectionName);
});
};