From 8799189a04ff867fe8ef8208c44677d3a0faf681 Mon Sep 17 00:00:00 2001 From: Bobby Date: Sat, 4 Jun 2022 04:21:56 +0700 Subject: [PATCH] feat: initiate db connection only once db is now initiated via utilsController, and gets re-used by main lolisafe.js script and the other controllers this should now make sure we only have 1 active db connection pool ever this is a pretty big refactor due to how we used to reference db, but it should functionally be identical --- controllers/albumsController.js | 49 ++++++++++++++++----------------- controllers/authController.js | 35 ++++++++++++----------- controllers/tokenController.js | 8 ++---- controllers/uploadController.js | 25 ++++++++--------- controllers/utilsController.js | 29 +++++++++---------- lolisafe.js | 7 ++--- routes/album.js | 5 ++-- scripts/clean-up.js | 4 +-- scripts/rebuild-hashes.js | 6 ++-- scripts/thumbs.js | 4 +-- 10 files changed, 80 insertions(+), 92 deletions(-) diff --git a/controllers/albumsController.js b/controllers/albumsController.js index 6877fb3..235513f 100644 --- a/controllers/albumsController.js +++ b/controllers/albumsController.js @@ -12,7 +12,6 @@ const ClientError = require('./utils/ClientError') const ServerError = require('./utils/ServerError') const config = require('./../config') const logger = require('./../logger') -const db = require('knex')(config.database) const self = { // Don't forget to update max length of text inputs in @@ -56,7 +55,7 @@ self.getUniqueRandomName = async () => { // Put token on-hold (wait for it to be inserted to DB) self.onHold.add(identifier) - const album = await db.table('albums') + const album = await utils.db.table('albums') .where('identifier', identifier) .select('id') .first() @@ -91,7 +90,7 @@ self.list = async (req, res, next) => { } // Query albums count for pagination - const count = await db.table('albums') + const count = await utils.db.table('albums') .where(filter) .count('id as count') .then(rows => rows[0].count) @@ -101,7 +100,7 @@ self.list = async (req, res, next) => { let albums if (simple) { - albums = await db.table('albums') + albums = await utils.db.table('albums') .where(filter) .select(fields) @@ -114,7 +113,7 @@ self.list = async (req, res, next) => { fields.push('identifier', 'enabled', 'timestamp', 'editedAt', 'zipGeneratedAt', 'download', 'public', 'description') if (all) fields.push('userid') - albums = await db.table('albums') + albums = await utils.db.table('albums') .where(filter) .limit(25) .offset(25 * offset) @@ -149,7 +148,7 @@ self.list = async (req, res, next) => { await Promise.all(albums.map(album => getAlbumZipSize(album))) - const uploads = await db.table('files') + const uploads = await utils.db.table('files') .whereIn('albumid', Object.keys(albumids)) .select('albumid', 'size') @@ -174,7 +173,7 @@ self.list = async (req, res, next) => { if (!userids.length) return res.json({ success: true, albums, count, homeDomain }) // Query usernames of user IDs from currently selected files - const usersTable = await db.table('users') + const usersTable = await utils.db.table('users') .whereIn('id', userids) .select('id', 'username') @@ -199,7 +198,7 @@ self.create = async (req, res, next) => { if (!name) throw new ClientError('No album name specified.') - const album = await db.table('albums') + const album = await utils.db.table('albums') .where({ name, enabled: 1, @@ -211,7 +210,7 @@ self.create = async (req, res, next) => { const identifier = await self.getUniqueRandomName() - const ids = await db.table('albums').insert({ + const ids = await utils.db.table('albums').insert({ name, enabled: 1, userid: user.id, @@ -263,7 +262,7 @@ self.disable = async (req, res, next) => { } } - const album = await db.table('albums') + const album = await utils.db.table('albums') .where(filter) .first() @@ -272,7 +271,7 @@ self.disable = async (req, res, next) => { } if (purge) { - const files = await db.table('files') + const files = await utils.db.table('files') .where({ albumid: id, userid: album.userid @@ -287,12 +286,12 @@ self.disable = async (req, res, next) => { } if (del) { - await db.table('albums') + await utils.db.table('albums') .where(filter) .first() .del() } else { - await db.table('albums') + await utils.db.table('albums') .where(filter) .first() .update('enabled', 0) @@ -338,7 +337,7 @@ self.edit = async (req, res, next) => { } } - const album = await db.table('albums') + const album = await utils.db.table('albums') .where(filter) .first() @@ -350,7 +349,7 @@ self.edit = async (req, res, next) => { ? Boolean(req.body.enabled) : null - const nameInUse = await db.table('albums') + const nameInUse = await utils.db.table('albums') .where({ name, enabled: 1, @@ -385,7 +384,7 @@ self.edit = async (req, res, next) => { update.identifier = await self.getUniqueRandomName() } - await db.table('albums') + await utils.db.table('albums') .where(filter) .update(update) utils.invalidateAlbumsCache([id]) @@ -429,7 +428,7 @@ self.get = async (req, res, next) => { throw new ClientError('No identifier provided.') } - const album = await db.table('albums') + const album = await utils.db.table('albums') .where({ identifier, enabled: 1 @@ -441,7 +440,7 @@ self.get = async (req, res, next) => { } const title = album.name - const files = await db.table('files') + const files = await utils.db.table('files') .select('name') .where('albumid', album.id) .orderBy('id', 'desc') @@ -486,7 +485,7 @@ self.generateZip = async (req, res, next) => { throw new ClientError('ZIP generation disabled.', { statusCode: 403 }) } - const album = await db.table('albums') + const album = await utils.db.table('albums') .where({ identifier, enabled: 1 @@ -530,7 +529,7 @@ self.generateZip = async (req, res, next) => { logger.log(`Starting zip task for album: ${identifier}.`) - const files = await db.table('files') + const files = await utils.db.table('files') .select('name', 'size') .where('albumid', album.id) if (files.length === 0) { @@ -574,7 +573,7 @@ self.generateZip = async (req, res, next) => { logger.log(`Finished zip task for album: ${identifier} (success).`) - await db.table('albums') + await utils.db.table('albums') .where('id', album.id) .update('zipGeneratedAt', Math.floor(Date.now() / 1000)) utils.invalidateStatsCache('albums') @@ -641,7 +640,7 @@ self.addFiles = async (req, res, next) => { failed = [] albumids = [] if (albumid !== null) { - const album = await db.table('albums') + const album = await utils.db.table('albums') .where('id', albumid) .where(function () { if (user.username !== 'root') { @@ -657,13 +656,13 @@ self.addFiles = async (req, res, next) => { albumids.push(albumid) } - const files = await db.table('files') + const files = await utils.db.table('files') .whereIn('id', ids) .where('userid', user.id) failed = ids.filter(id => !files.find(file => file.id === id)) - await db.table('files') + await utils.db.table('files') .whereIn('id', files.map(file => file.id)) .update('albumid', albumid) utils.invalidateStatsCache('albums') @@ -674,7 +673,7 @@ self.addFiles = async (req, res, next) => { } }) - await db.table('albums') + await utils.db.table('albums') .whereIn('id', albumids) .update('editedAt', Math.floor(Date.now() / 1000)) utils.invalidateAlbumsCache(albumids) diff --git a/controllers/authController.js b/controllers/authController.js index 448565a..20eb6d2 100644 --- a/controllers/authController.js +++ b/controllers/authController.js @@ -9,7 +9,6 @@ const apiErrorsHandler = require('./handlers/apiErrorsHandler.js') const ClientError = require('./utils/ClientError') const ServerError = require('./utils/ServerError') const config = require('./../config') -const db = require('knex')(config.database) // Don't forget to update min/max length of text inputs in auth.njk // when changing these values. @@ -44,7 +43,7 @@ self.verify = async (req, res, next) => { : '' if (!password) throw new ClientError('No password provided.') - const user = await db.table('users') + const user = await utils.db.table('users') .where('username', username) .first() @@ -85,7 +84,7 @@ self.register = async (req, res, next) => { throw new ClientError(`Password must have ${self.pass.min}-${self.pass.max} characters.`) } - const user = await db.table('users') + const user = await utils.db.table('users') .where('username', username) .first() @@ -98,7 +97,7 @@ self.register = async (req, res, next) => { throw new ServerError('Failed to allocate a unique token. Try again?') } - await db.table('users') + await utils.db.table('users') .insert({ username, password: hash, @@ -129,7 +128,7 @@ self.changePassword = async (req, res, next) => { const hash = await bcrypt.hash(password, saltRounds) - await db.table('users') + await utils.db.table('users') .where('id', user.id) .update('password', hash) @@ -184,7 +183,7 @@ self.createUser = async (req, res, next) => { } } - const exists = await db.table('users') + const exists = await utils.db.table('users') .where('username', username) .first() @@ -197,7 +196,7 @@ self.createUser = async (req, res, next) => { throw new ServerError('Failed to allocate a unique token. Try again?') } - await db.table('users') + await utils.db.table('users') .insert({ username, password: hash, @@ -225,7 +224,7 @@ self.editUser = async (req, res, next) => { const id = parseInt(req.body.id) if (isNaN(id)) throw new ClientError('No user specified.') - const target = await db.table('users') + const target = await utils.db.table('users') .where('id', id) .first() self.assertPermission(user, target) @@ -256,7 +255,7 @@ self.editUser = async (req, res, next) => { update.password = await bcrypt.hash(password, saltRounds) } - await db.table('users') + await utils.db.table('users') .where('id', id) .update(update) utils.invalidateStatsCache('users') @@ -285,12 +284,12 @@ self.deleteUser = async (req, res, next) => { const purge = req.body.purge if (isNaN(id)) throw new ClientError('No user specified.') - const target = await db.table('users') + const target = await utils.db.table('users') .where('id', id) .first() self.assertPermission(user, target) - const files = await db.table('files') + const files = await utils.db.table('files') .where('userid', id) .select('id') @@ -302,20 +301,20 @@ self.deleteUser = async (req, res, next) => { utils.invalidateStatsCache('uploads') } else { // Clear out userid attribute from the files - await db.table('files') + await utils.db.table('files') .whereIn('id', fileids) .update('userid', null) } } - const albums = await db.table('albums') + const albums = await utils.db.table('albums') .where('userid', id) .where('enabled', 1) .select('id', 'identifier') if (albums.length) { const albumids = albums.map(album => album.id) - await db.table('albums') + await utils.db.table('albums') .whereIn('id', albumids) .del() utils.invalidateAlbumsCache(albumids) @@ -331,7 +330,7 @@ self.deleteUser = async (req, res, next) => { })) } - await db.table('users') + await utils.db.table('users') .where('id', id) .del() utils.invalidateStatsCache('users') @@ -353,7 +352,7 @@ self.listUsers = async (req, res, next) => { const isadmin = perms.is(user, 'admin') if (!isadmin) throw new ClientError('', { statusCode: 403 }) - const count = await db.table('users') + const count = await utils.db.table('users') .count('id as count') .then(rows => rows[0].count) if (!count) return res.json({ success: true, users: [], count }) @@ -362,7 +361,7 @@ self.listUsers = async (req, res, next) => { if (isNaN(offset)) offset = 0 else if (offset < 0) offset = Math.max(0, Math.ceil(count / 25) + offset) - const users = await db.table('users') + const users = await utils.db.table('users') .limit(25) .offset(25 * offset) .select('id', 'username', 'enabled', 'timestamp', 'permission', 'registration') @@ -376,7 +375,7 @@ self.listUsers = async (req, res, next) => { pointers[user.id] = user } - const uploads = await db.table('files') + const uploads = await utils.db.table('files') .whereIn('userid', Object.keys(pointers)) .select('userid', 'size') diff --git a/controllers/tokenController.js b/controllers/tokenController.js index 7f73bdd..635fe2e 100644 --- a/controllers/tokenController.js +++ b/controllers/tokenController.js @@ -4,8 +4,6 @@ const utils = require('./utilsController') const apiErrorsHandler = require('./handlers/apiErrorsHandler') const ClientError = require('./utils/ClientError') const ServerError = require('./utils/ServerError') -const config = require('./../config') -const db = require('knex')(config.database) const self = { tokenLength: 64, @@ -21,7 +19,7 @@ self.generateUniqueToken = async () => { // Put token on-hold (wait for it to be inserted to DB) self.onHold.add(token) - const user = await db.table('users') + const user = await utils.db.table('users') .where('token', token) .select('id') .first() @@ -44,7 +42,7 @@ self.verify = async (req, res, next) => { if (!token) throw new ClientError('No token provided.', { statusCode: 403 }) - const user = await db.table('users') + const user = await utils.db.table('users') .where('token', token) .select('username', 'permission') .first() @@ -96,7 +94,7 @@ self.change = async (req, res, next) => { throw new ServerError('Failed to allocate a unique token. Try again?') } - await db.table('users') + await utils.db.table('users') .where('token', user.token) .update({ token: newToken, diff --git a/controllers/uploadController.js b/controllers/uploadController.js index d91d03f..1799f22 100644 --- a/controllers/uploadController.js +++ b/controllers/uploadController.js @@ -14,7 +14,6 @@ const multerStorage = require('./utils/multerStorage') const ServerError = require('./utils/ServerError') const config = require('./../config') const logger = require('./../logger') -const db = require('knex')(config.database) const self = { onHold: new Set(), @@ -213,7 +212,7 @@ self.getUniqueRandomName = async (length, extension) => { // Put token on-hold (wait for it to be inserted to DB) self.onHold.add(identifier) - const file = await db.table('files') + const file = await utils.db.table('files') .whereRaw('?? like ?', ['name', `${identifier}.%`]) .select('id') .first() @@ -827,7 +826,7 @@ self.storeFilesToDb = async (req, res, user, infoMap) => { await Promise.all(infoMap.map(async info => { // Check if the file exists by checking its hash and size - const dbFile = await db.table('files') + const dbFile = await utils.db.table('files') .where(function () { if (user === undefined) { this.whereNull('userid') @@ -892,7 +891,7 @@ self.storeFilesToDb = async (req, res, user, infoMap) => { if (files.length) { let authorizedIds = [] if (albumids.length) { - authorizedIds = await db.table('albums') + authorizedIds = await utils.db.table('albums') .where({ userid: user.id }) .whereIn('id', albumids) .select('id') @@ -907,7 +906,7 @@ self.storeFilesToDb = async (req, res, user, infoMap) => { } // Insert new files to DB - await db.table('files').insert(files) + await utils.db.table('files').insert(files) utils.invalidateStatsCache('uploads') if (config.uploads.queryDbForFileCollisions) { @@ -920,7 +919,7 @@ self.storeFilesToDb = async (req, res, user, infoMap) => { // Update albums' timestamp if (authorizedIds.length) { - await db.table('albums') + await utils.db.table('albums') .whereIn('id', authorizedIds) .update('editedAt', Math.floor(Date.now() / 1000)) utils.invalidateAlbumsCache(authorizedIds) @@ -1253,7 +1252,7 @@ self.list = async (req, res, next) => { usernames.push(...filterObj.queries.exclude.user) } - const uploaders = await db.table('users') + const uploaders = await utils.db.table('users') .whereIn('username', usernames) .select('id', 'username') @@ -1490,7 +1489,7 @@ self.list = async (req, res, next) => { } // Query uploads count for pagination - const count = await db.table('files') + const count = await utils.db.table('files') .where(filter) .count('id as count') .then(rows => rows[0].count) @@ -1516,16 +1515,16 @@ self.list = async (req, res, next) => { orderByRaw = sortObj.parsed.map(sort => { // Use Knex.raw() to sanitize user inputs if (sort.cast) { - return db.raw(`cast (?? as ${sort.cast}) ${sort.order} ${sort.clause}`.trim(), sort.column) + return utils.db.raw(`cast (?? as ${sort.cast}) ${sort.order} ${sort.clause}`.trim(), sort.column) } else { - return db.raw(`?? ${sort.order} ${sort.clause}`.trim(), sort.column) + return utils.db.raw(`?? ${sort.order} ${sort.clause}`.trim(), sort.column) } }).join(', ') } else { orderByRaw = '`id` desc' } - const files = await db.table('files') + const files = await utils.db.table('files') .where(filter) .orderByRaw(orderByRaw) .limit(25) @@ -1549,7 +1548,7 @@ self.list = async (req, res, next) => { .filter((v, i, a) => { return v !== null && v !== undefined && v !== '' && a.indexOf(v) === i }) - albums = await db.table('albums') + albums = await utils.db.table('albums') .whereIn('id', albumids) .where('enabled', 1) .select('id', 'name') @@ -1579,7 +1578,7 @@ self.list = async (req, res, next) => { if (!userids.length) return res.json({ success: true, files, count, albums, basedomain }) // Query usernames of user IDs from currently selected files - usersTable = await db.table('users') + usersTable = await utils.db.table('users') .whereIn('id', userids) .select('id', 'username') } diff --git a/controllers/utilsController.js b/controllers/utilsController.js index f86f452..43cdeab 100644 --- a/controllers/utilsController.js +++ b/controllers/utilsController.js @@ -2,6 +2,7 @@ const { promisify } = require('util') const fetch = require('node-fetch') const ffmpeg = require('fluent-ffmpeg') const MarkdownIt = require('markdown-it') +const knex = require('knex') const path = require('path') const sharp = require('sharp') const si = require('systeminformation') @@ -12,9 +13,9 @@ const ClientError = require('./utils/ClientError') const ServerError = require('./utils/ServerError') const config = require('./../config') const logger = require('./../logger') -const db = require('knex')(config.database) const self = { + db: knex(config.database), scan: { instance: null, version: null, @@ -296,7 +297,7 @@ self.assertUser = async (token, fields) => { _fields.push(...fields) } - const user = await db.table('users') + const user = await self.db.table('users') .where('token', token) .select(_fields) .first() @@ -539,7 +540,7 @@ self.bulkDeleteFromDb = async (field, values, user) => { const albumids = [] await Promise.all(chunks.map(async chunk => { - const files = await db.table('files') + const files = await self.db.table('files') .whereIn(field, chunk) .where(function () { if (!ismoderator) { @@ -566,7 +567,7 @@ self.bulkDeleteFromDb = async (field, values, user) => { if (!unlinked.length) return // Delete all unlinked files from db - await db.table('files') + await self.db.table('files') .whereIn('id', unlinked.map(file => file.id)) .del() self.invalidateStatsCache('uploads') @@ -593,7 +594,7 @@ self.bulkDeleteFromDb = async (field, values, user) => { if (unlinkeds.length) { // Update albums if necessary, but do not wait if (albumids.length) { - db.table('albums') + self.db.table('albums') .whereIn('id', albumids) .update('editedAt', Math.floor(Date.now() / 1000)) .catch(logger.error) @@ -735,7 +736,7 @@ self.bulkDeleteExpired = async (dryrun, verbose) => { const sudo = { username: 'root' } const result = {} - result.expired = await db.table('files') + result.expired = await self.db.table('files') .where('expirydate', '<=', timestamp) .select(fields) @@ -904,14 +905,14 @@ self.stats = async (req, res, next) => { } const getTotalCountAndSize = async () => { - const uploads = await db.table('files') + const uploads = await self.db.table('files') .select('size') stats[data.title].Total = uploads.length stats[data.title]['Size in DB'].value = uploads.reduce((acc, upload) => acc + parseInt(upload.size), 0) } const getImagesCount = async () => { - stats[data.title].Images = await db.table('files') + stats[data.title].Images = await self.db.table('files') .where(function () { for (const ext of self.imageExts) { this.orWhere('name', 'like', `%${ext}`) @@ -922,7 +923,7 @@ self.stats = async (req, res, next) => { } const getVideosCount = async () => { - stats[data.title].Videos = await db.table('files') + stats[data.title].Videos = await self.db.table('files') .where(function () { for (const ext of self.videoExts) { this.orWhere('name', 'like', `%${ext}`) @@ -933,7 +934,7 @@ self.stats = async (req, res, next) => { } const getAudiosCount = async () => { - stats[data.title].Audios = await db.table('files') + stats[data.title].Audios = await self.db.table('files') .where(function () { for (const ext of self.audioExts) { this.orWhere('name', 'like', `%${ext}`) @@ -944,7 +945,7 @@ self.stats = async (req, res, next) => { } const getOthersCount = async () => { - stats[data.title].Temporary = await db.table('files') + stats[data.title].Temporary = await self.db.table('files') .whereNotNull('expirydate') .count('id as count') .then(rows => rows[0].count) @@ -991,7 +992,7 @@ self.stats = async (req, res, next) => { stats[data.title][p] = 0 }) - const users = await db.table('users') + const users = await self.db.table('users') stats[data.title].Total = users.length for (const user of users) { if (user.enabled === false || user.enabled === 0) { @@ -1033,7 +1034,7 @@ self.stats = async (req, res, next) => { 'ZIP Generated': 0 } - const albums = await db.table('albums') + const albums = await self.db.table('albums') stats[data.title].Total = albums.length const activeAlbums = [] @@ -1051,7 +1052,7 @@ self.stats = async (req, res, next) => { stats[data.title]['ZIP Generated'] = files.length }).catch(() => {}) - stats[data.title]['Files in albums'] = await db.table('files') + stats[data.title]['Files in albums'] = await self.db.table('files') .whereIn('albumid', activeAlbums) .count('id as count') .then(rows => rows[0].count) diff --git a/lolisafe.js b/lolisafe.js index f99aab4..b05aabd 100644 --- a/lolisafe.js +++ b/lolisafe.js @@ -48,7 +48,6 @@ const api = require('./routes/api') const nojs = require('./routes/nojs') const player = require('./routes/player') -const db = require('knex')(config.database) const isDevMode = process.env.NODE_ENV === 'development' // Helmet security headers @@ -144,7 +143,7 @@ const initServeStaticUploads = (opts = {}) => { const relpath = path.replace(paths.uploads, '') if (relpath.indexOf('/', 1) === -1 && req.method === 'GET') { const name = relpath.substring(1) - const file = await db.table('files') + const file = await utils.db.table('files') .where('name', name) .select('original') .first() @@ -250,7 +249,7 @@ safe.use('/api', api) ;(async () => { try { // Init database - await require('./database/db.js')(db) + await require('./database/db.js')(utils.db) // Verify paths, create missing ones, clean up temp ones await paths.init() @@ -335,7 +334,7 @@ safe.use('/api', api) // Cache file identifiers if (config.uploads.cacheFileIdentifiers) { - utils.idSet = await db.table('files') + utils.idSet = await utils.db.table('files') .select('name') .then(rows => { return new Set(rows.map(row => row.name.split('.')[0])) diff --git a/routes/album.js b/routes/album.js index 4493890..c561324 100644 --- a/routes/album.js +++ b/routes/album.js @@ -3,7 +3,6 @@ const path = require('path') const paths = require('./../controllers/pathsController') const utils = require('./../controllers/utilsController') const config = require('./../config') -const db = require('knex')(config.database) routes.get('/a/:identifier', async (req, res, next) => { const identifier = req.params.identifier @@ -11,7 +10,7 @@ routes.get('/a/:identifier', async (req, res, next) => { res.status(404).sendFile(path.join(paths.errorRoot, config.errorPages[404])) } - const album = await db.table('albums') + const album = await utils.db.table('albums') .where({ identifier, enabled: 1 @@ -51,7 +50,7 @@ routes.get('/a/:identifier', async (req, res, next) => { utils.albumsCache[cacheid].generating = true } - const files = await db.table('files') + const files = await utils.db.table('files') .select('name', 'size') .where('albumid', album.id) .orderBy('id', 'desc') diff --git a/scripts/clean-up.js b/scripts/clean-up.js index ef25624..34a7c8e 100644 --- a/scripts/clean-up.js +++ b/scripts/clean-up.js @@ -1,8 +1,6 @@ const path = require('path') const paths = require('../controllers/pathsController') const utils = require('../controllers/utilsController') -const config = require('./../config') -const db = require('knex')(config.database) const self = { getFiles: async directory => { @@ -43,7 +41,7 @@ const self = { const uploads = await self.getFiles(paths.uploads) console.log(`Uploads: ${uploads.length}`) - const uploadsDb = await db.table('files') + const uploadsDb = await utils.db.table('files') .select('name') .then(rows => rows.map(row => row.name)) console.log(`- In DB: ${uploadsDb.length}`) diff --git a/scripts/rebuild-hashes.js b/scripts/rebuild-hashes.js index 2103981..8744aea 100644 --- a/scripts/rebuild-hashes.js +++ b/scripts/rebuild-hashes.js @@ -3,8 +3,6 @@ const fs = require('fs') const path = require('path') const paths = require('../controllers/pathsController') const utils = require('../controllers/utilsController') -const config = require('./../config') -const db = require('knex')(config.database) ;(async () => { const location = process.argv[1].replace(process.cwd() + '/', '') @@ -33,7 +31,7 @@ const db = require('knex')(config.database) console.log('Querying uploads\u2026') const hrstart = process.hrtime() - const uploads = await db.table('files') + const uploads = await utils.db.table('files') .select('id', 'name', 'hash') console.log(`Uploads : ${uploads.length}`) @@ -56,7 +54,7 @@ const db = require('knex')(config.database) const hash = source.toString('hex') if (verbose) console.log(`${upload.name}: ${hash}`) if (!dryrun && upload.hash !== hash) { - await db.table('files') + await utils.db.table('files') .update('hash', hash) .where('id', upload.id) } diff --git a/scripts/thumbs.js b/scripts/thumbs.js index 2e8fa83..dd82b0f 100644 --- a/scripts/thumbs.js +++ b/scripts/thumbs.js @@ -1,8 +1,6 @@ const path = require('path') const paths = require('../controllers/pathsController') const utils = require('../controllers/utilsController') -const config = require('./../config') -const db = require('knex')(config.database) const self = { mode: null, @@ -53,7 +51,7 @@ const self = { console.log('Looking through existing thumbnails\u2026') const hrstart = process.hrtime() - const uploads = await db.table('files') + const uploads = await utils.db.table('files') .select('id', 'name') const thumbs = await self.getFiles(paths.thumbs) .then(thumbs => thumbs.map(thumb => {