2015-07-20 00:09:47 -07:00
|
|
|
/* jslint node:true */
|
|
|
|
|
|
|
|
|
|
'use strict';
|
|
|
|
|
|
|
|
|
|
exports = module.exports = {
|
2021-04-29 15:46:11 -07:00
|
|
|
get,
|
|
|
|
|
getAll,
|
|
|
|
|
set,
|
|
|
|
|
getBlob,
|
|
|
|
|
setBlob,
|
2015-07-20 00:09:47 -07:00
|
|
|
_clear: clear
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var assert = require('assert'),
|
2019-10-24 11:13:48 -07:00
|
|
|
BoxError = require('./boxerror.js'),
|
|
|
|
|
database = require('./database.js');
|
2015-07-20 00:09:47 -07:00
|
|
|
|
2019-05-06 20:01:35 -07:00
|
|
|
const SETTINGS_FIELDS = [ 'name', 'value' ].join(',');
|
2021-04-29 15:46:11 -07:00
|
|
|
const SETTINGS_BLOB_FIELDS = [ 'name', 'valueBlob' ].join(',');
|
2019-02-22 09:31:09 -08:00
|
|
|
|
2015-07-20 00:09:47 -07:00
|
|
|
function get(key, callback) {
|
|
|
|
|
assert.strictEqual(typeof key, 'string');
|
|
|
|
|
assert.strictEqual(typeof callback, 'function');
|
|
|
|
|
|
2019-02-22 09:31:09 -08:00
|
|
|
database.query(`SELECT ${SETTINGS_FIELDS} FROM settings WHERE name = ?`, [ key ], function (error, result) {
|
2019-10-24 11:13:48 -07:00
|
|
|
if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error));
|
2019-10-24 20:48:38 -07:00
|
|
|
if (result.length === 0) return callback(new BoxError(BoxError.NOT_FOUND, 'Setting not found'));
|
2015-07-20 00:09:47 -07:00
|
|
|
|
|
|
|
|
callback(null, result[0].value);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function getAll(callback) {
|
2019-02-22 09:31:09 -08:00
|
|
|
database.query(`SELECT ${SETTINGS_FIELDS} FROM settings ORDER BY name`, function (error, results) {
|
2019-10-24 11:13:48 -07:00
|
|
|
if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error));
|
2015-07-20 00:09:47 -07:00
|
|
|
|
|
|
|
|
callback(null, results);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function set(key, value, callback) {
|
|
|
|
|
assert.strictEqual(typeof key, 'string');
|
|
|
|
|
assert(value === null || typeof value === 'string');
|
|
|
|
|
assert.strictEqual(typeof callback, 'function');
|
|
|
|
|
|
|
|
|
|
database.query('INSERT INTO settings (name, value) VALUES (?, ?) ON DUPLICATE KEY UPDATE value=VALUES(value)', [ key, value ], function (error) {
|
2019-10-24 11:13:48 -07:00
|
|
|
if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); // don't rely on affectedRows here since it gives 2
|
2015-07-20 00:09:47 -07:00
|
|
|
|
|
|
|
|
callback(null);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
2021-04-29 15:46:11 -07:00
|
|
|
function getBlob(key, callback) {
|
|
|
|
|
assert.strictEqual(typeof key, 'string');
|
|
|
|
|
assert.strictEqual(typeof callback, 'function');
|
|
|
|
|
|
|
|
|
|
database.query(`SELECT ${SETTINGS_BLOB_FIELDS} FROM settings WHERE name = ?`, [ key ], function (error, result) {
|
|
|
|
|
if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error));
|
|
|
|
|
if (result.length === 0) return callback(new BoxError(BoxError.NOT_FOUND, 'Setting not found'));
|
|
|
|
|
|
|
|
|
|
callback(null, result[0].valueBlob);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function setBlob(key, value, callback) {
|
|
|
|
|
assert.strictEqual(typeof key, 'string');
|
|
|
|
|
assert(value === null || Buffer.isBuffer(value));
|
|
|
|
|
assert.strictEqual(typeof callback, 'function');
|
|
|
|
|
|
|
|
|
|
database.query('INSERT INTO settings (name, valueBlob) VALUES (?, ?) ON DUPLICATE KEY UPDATE valueBlob=VALUES(valueBlob)', [ key, value ], function (error) {
|
|
|
|
|
if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error)); // don't rely on affectedRows here since it gives 2
|
|
|
|
|
|
|
|
|
|
callback(null);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2015-07-20 00:09:47 -07:00
|
|
|
function clear(callback) {
|
|
|
|
|
database.query('DELETE FROM settings', function (error) {
|
2019-10-24 11:13:48 -07:00
|
|
|
if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error));
|
2015-07-20 00:09:47 -07:00
|
|
|
|
|
|
|
|
callback(error);
|
|
|
|
|
});
|
|
|
|
|
}
|