diff --git a/lib/db/mysql.js b/lib/db/mysql.js index 9395b8ee..5d1d686d 100644 --- a/lib/db/mysql.js +++ b/lib/db/mysql.js @@ -448,15 +448,6 @@ module.exports = utils.inherit(Object, { } }); }, - getVisibility: function(bin, fn) { - var sql = templates.getVisibility; - this.connection.query(sql, [bin.url, bin.revision], function(err, result) { - if (err) { - return fn(err); - } - fn(null, result[0] ? result[0].visibility : false); - }); - }, getBinMetadata: function(bin, fn) { var sql = templates.getBinMetadata; this.connection.query(sql, [bin.url, bin.revision], function(err, result) { @@ -469,13 +460,16 @@ module.exports = utils.inherit(Object, { }); }); }, - setBinVisibility: function(bin, value, fn) { + setBinVisibility: function(bin, name, value, fn) { var sql = templates.setBinVisibility, params = [ - value, bin.metadata.name, bin.url + value, name, bin.url ]; + if (!bin.metadata || bin.metadata.name !== name) { + return fn(301); + } this.connection.query(sql, params, function(err, result) { if (err) { - return fn(err); + return fn(500); } fn(err, result); }); diff --git a/lib/db/sql_templates.json b/lib/db/sql_templates.json index 4f11abe5..4ffaa999 100644 --- a/lib/db/sql_templates.json +++ b/lib/db/sql_templates.json @@ -34,7 +34,6 @@ "reportBin": "UPDATE `sandbox` SET `reported`=? WHERE `url`=? AND `revision`=? AND `active`='y'", "isOwnerOf": "SELECT name=? as `owner` FROM `owners` WHERE `url`=? AND `revision`=1", "getUserBinCount": "SELECT COUNT(*) as total FROM `owners` WHERE `name`=?", - "getVisibility": "SELECT * FROM `owners` WHERE `url`=? AND `revision`=?", "setBinVisibility": "UPDATE `owners` SET `visibility`=? WHERE `name`=? AND `url`=?", "getBinMetadata": "SELECT * FROM `owners` AS `o`, `ownership` AS `os` WHERE o.name=os.name AND o.url=? AND o.revision=?", "setProAccount": "UPDATE ownership SET `pro`=?, `updated`=? WHERE `name`=?" diff --git a/lib/db/sqlite.js b/lib/db/sqlite.js index 1cce9165..25032f57 100644 --- a/lib/db/sqlite.js +++ b/lib/db/sqlite.js @@ -520,15 +520,6 @@ module.exports = utils.inherit(Object, { } }); }, - getVisibility: function(bin, fn) { - var sql = templates.getVisibility; - this.connection.get(sql, [bin.url, bin.revision], function(err, result) { - if (err) { - return fn(err); - } - fn(null, result[0] ? result[0].visibility : false); - }); - }, getBinMetadata: function(bin, fn) { var sql = templates.getBinMetadata; this.connection.get(sql, [bin.url, bin.revision], function(err, result) { @@ -541,13 +532,16 @@ module.exports = utils.inherit(Object, { }); }); }, - setBinVisibility: function(bin, value, fn) { + setBinVisibility: function(bin, name, value, fn) { var sql = templates.setBinVisibility, params = [ value, bin.metadata.name, bin.url ]; + if (bin.metadata.name !== name) { + return fn(301) + } this.connection.run(sql, params, function(err, result) { if (err) { - return fn(err); + return fn(500); } fn(err, result); }); diff --git a/lib/handlers/bin.js b/lib/handlers/bin.js index 69e436db..c8cd6f58 100644 --- a/lib/handlers/bin.js +++ b/lib/handlers/bin.js @@ -362,17 +362,20 @@ module.exports = Observable.extend({ if (!req.session.user || !req.session.user.pro) { return res.send(301); } - this.models.bin.setBinVisibility(req.bin, 'private', function(err, bin){ + this.models.bin.setBinVisibility(req.bin, req.session.name, 'private', function(err, bin){ if (err) { - res.send(500); + res.send(err); } res.send(200, 'OK'); }); }, setBinAsPublic: function(req, res, next) { - this.models.bin.setBinVisibility(req.bin, 'public', function(err, bin){ + if (!req.session.user || !req.session.user.pro) { + return res.send(301); + } + this.models.bin.setBinVisibility(req.bin, req.session.name, 'public', function(err, bin){ if (err) { - res.send(500); + res.send(err); } res.send(200, 'OK'); }); diff --git a/lib/models/bin.js b/lib/models/bin.js index b5589f3b..5e377c60 100644 --- a/lib/models/bin.js +++ b/lib/models/bin.js @@ -69,14 +69,11 @@ var model = { report: function (params, fn) { this.store.reportBin(params, fn); }, - getVisibility: function(bin, fn) { - this.store.getVisibility(bin, fn); - }, getBinMetadata: function(bin, fn) { this.store.getBinMetadata(bin, fn); }, - setBinVisibility: function(bin, value, fn) { - this.store.setBinVisibility(bin, value, fn); + setBinVisibility: function(bin, name, value, fn) { + this.store.setBinVisibility(bin, name, value, fn); } }; @@ -104,4 +101,4 @@ Object.keys(model).forEach(function (key) { }; }); -module.exports = Observable.extend(model); \ No newline at end of file +module.exports = Observable.extend(model); diff --git a/lib/store.js b/lib/store.js index 695d5d56..c9ede8c8 100644 --- a/lib/store.js +++ b/lib/store.js @@ -47,7 +47,6 @@ var methods = [ 'getUserBinCount', 'populateOwners', 'getOne', - 'getVisibility', 'getBinMetadata', 'setBinVisibility', 'setProAccount'