From 378dbf0dc8ac032e89b35bbd7939914e71398ee4 Mon Sep 17 00:00:00 2001 From: yu-i-i Date: Sun, 14 Sep 2025 19:42:45 +0200 Subject: [PATCH] Bring back `deleteFile` removed upstream --- services/filestore/app/js/FileController.js | 17 +++++++++++++++++ services/filestore/app/js/FileHandler.js | 21 +++++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/services/filestore/app/js/FileController.js b/services/filestore/app/js/FileController.js index c2dffe76cb..02467d5ec0 100644 --- a/services/filestore/app/js/FileController.js +++ b/services/filestore/app/js/FileController.js @@ -10,6 +10,7 @@ export default { getFile, getFileHead, insertFile, + deleteFile, } function getFile(req, res, next) { @@ -93,6 +94,22 @@ function getFile(req, res, next) { }) } +function deleteFile(req, res, next) { + metrics.inc('deleteFile') + const { key, bucket } = req + + req.requestLogger.addFields({ key, bucket }) + req.requestLogger.setMessage('deleting file') + + FileHandler.deleteFile(bucket, key, function (err) { + if (err) { + next(err) + } else { + res.sendStatus(204) + } + }) +} + function getFileHead(req, res, next) { const { key, bucket } = req diff --git a/services/filestore/app/js/FileHandler.js b/services/filestore/app/js/FileHandler.js index 44c8f03caf..693ba97f58 100644 --- a/services/filestore/app/js/FileHandler.js +++ b/services/filestore/app/js/FileHandler.js @@ -13,6 +13,7 @@ const { ConversionError, InvalidParametersError } = Errors const FileHandler = { insertFile: callbackify(insertFile), + deleteFile: callbackify(deleteFile), getFile: callbackify(getFile), getRedirectUrl: callbackify(getRedirectUrl), getFileSize: callbackify(getFileSize), @@ -20,6 +21,7 @@ const FileHandler = { getFile, getRedirectUrl, insertFile, + deleteFile, getFileSize, }, } @@ -46,6 +48,25 @@ async function insertFile(bucket, key, stream) { await PersistorManager.sendStream(bucket, key, stream) } +async function deleteFile(bucket, key) { + const convertedKey = KeyBuilder.getConvertedFolderKey(key) + if (!convertedKey.match(/^[0-9a-f]{24}\/([0-9a-f]{24}|v\/[0-9]+\/[a-z]+)/i)) { + throw new InvalidParametersError('key does not match validation regex', { + bucket, + key, + convertedKey, + }) + } + const jobs = [PersistorManager.deleteObject(bucket, key)] + if ( + Settings.enableConversions && + bucket === Settings.filestore.stores.template_files + ) { + jobs.push(PersistorManager.deleteDirectory(bucket, convertedKey)) + } + await Promise.all(jobs) +} + async function getFile(bucket, key, opts) { opts = opts || {} if (!opts.format && !opts.style) {