jsbin/lib/db/file.js
2014-03-21 16:02:36 +00:00

209 lines
5.1 KiB
JavaScript

'use strict';
var fdb = require('file-db'),
utils = require('../utils'),
_ = require('underscore');
module.exports = utils.inherit(Object, {
defaults: null,
constructor: function FileDB(options) {
this.options = options;
if (!this.options.location) { throw new Error('No database location set.'); }
this.connection = null;
},
connect: function (cb) {
// Open up a database in a temporary directory and save the connection
fdb.open(this.options.location, function (err, connection) {
if (err) { throw err; }
this.connection = connection;
cb();
}.bind(this));
},
disconnect: function (cb) {},
getBin: function (params, cb) {
this.connection
.use('bins')
.findById(params.id)
.exec(function (err, bin) {
if (err) { return cb(err); }
// Get the requested revision
var revision = bin[params.revision];
// Apply bin defaults
revision = _.defaults(revision, {
url: params.id,
revision: params.revision,
id: params.id + params.revision,
html: '',
css: '',
javascript: '',
active: true,
settings: {}
});
if (revision.active === 'false') { revision.active = false; }
else { revision.active = true; }
cb(null, revision);
});
},
setBin: function (params, cb) {
var data = {
_id: params.url
};
data[params.revision] = {
javascript: params.javascript || '',
css: params.css || '',
html: params.html || '',
active: true,
settings: {}
};
this.connection
.use('bins')
.save(data)
.exec(function (err, bin) {
if (err) { return cb(err); }
cb(null, params.revision);
});
},
setBinOwner: function (params, cb) {
cb(null, null);
},
setBinPanel: function (panel, params, cb) {
cb(null, null);
},
getLatestBin: function (params, cb) {
this.connection
.use('bins')
.findById(params.id)
.exec(function (err, bin) {
if (err) { return cb(err); }
// Get the latest revision
var revisions = Object.keys(bin).map(function (revision) {
return parseInt(revision, 10);
}).filter(function (val) { return !!val; });
var revision = bin[''+Math.max.apply(Math, revisions)];
// Apply bin defaults
revision = _.defaults(revision, {
url: params.id,
revision: params.revision,
id: params.id + params.revision,
html: '',
css: '',
javascript: '',
active: true,
settings: {}
});
if (revision.active === 'false') { revision.active = false; }
else { revision.active = true; }
cb(null, revision);
});
},
getLatestBinForUser: function (id, n, cb) {
cb(null, null);
},
getBinsByUser: function (id, cb) {
cb(null, null);
},
getAllOwners: function (cb) {
cb(null, null);
},
getOwnersBlock: function (start, size, cb) {
cb(null, null);
},
generateBinId: function (length, attempts, cb) {
var id = utils.shortcode(length);
cb(null, id);
},
archiveBin: function (bin, cb) {
cb(null, null);
},
getUser: function (id, cb) {
cb(null, null);
},
getUserByApiKey: function (email, cb) {
cb(null, null);
},
getUserByEmail: function (email, cb) {
cb(null, null);
},
setUser: function (params, cb) {
cb(null, null);
},
touchOwners: function (params, cb) {
cb(null, null);
},
updateOwners: function (params, cb) {
cb(null, null);
},
populateOwners: function (params, cb) {
cb(null, null);
},
touchLogin: function (id, cb) {
cb(null, null);
},
updateUserEmail: function (id, email, cb) {
cb(null, null);
},
updateUserGithubData: function (id, token, cb) {
cb(null, null);
},
updateUserKey: function (id, key, cb) {
cb(null, null);
},
// Different to updateUserKey() in that it also sets the created timestamp
// which is required to differentiate between a JSBin 2 user and a new
// one.
upgradeUserKey: function (id, key, cb) {
cb(null, null);
},
getUserByForgotToken: function (token, cb) {
cb(null, null);
},
setForgotToken: function (user, token, cb) {
cb(null, null);
},
expireForgotToken: function (token, cb) {
cb(null, null);
},
expireForgotTokenByUser: function (user, cb) {
cb(null, null);
},
expireDate: function () {
},
applyBinDefaults: function () {
},
reportBin: function (params, cb) {
cb(null, null);
},
isOwnerOf: function (params, cb) {
cb(null, {
isowner: true
});
},
getUserBinCount: function (id, cb) {
cb(null, { total: 0 }); // TODO read directory for count
},
setProAccount: function(id, pro, fn) {
fn(null, null);
},
updateBinData: function (bin, params, fn) {
fn(null, null);
},
updateOwnersData: function (bin, params, fn) {
fn(null, null);
},
setCustomer: noop,
setCustomerActive: noop,
getCustomerByStripeId: noop,
getCustomerByUser: noop,
});
var noop = function () {};