branding: move logo into database

initially, i tried to put this in the current value field but that
is TEXT and has a size limit of 64K. TEXT also stores things with
character encoding, so we have to stash it as base64
This commit is contained in:
Girish Ramakrishnan
2021-04-29 15:46:11 -07:00
parent 3c09416e44
commit af2c096975
6 changed files with 68 additions and 17 deletions

View File

@@ -3,9 +3,11 @@
'use strict';
exports = module.exports = {
get: get,
getAll: getAll,
set: set,
get,
getAll,
set,
getBlob,
setBlob,
_clear: clear
};
@@ -14,6 +16,7 @@ var assert = require('assert'),
database = require('./database.js');
const SETTINGS_FIELDS = [ 'name', 'value' ].join(',');
const SETTINGS_BLOB_FIELDS = [ 'name', 'valueBlob' ].join(',');
function get(key, callback) {
assert.strictEqual(typeof key, 'string');
@@ -47,6 +50,31 @@ function set(key, value, callback) {
});
}
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);
});
}
function clear(callback) {
database.query('DELETE FROM settings', function (error) {
if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error));