const settings = require('@overleaf/settings') module.exports = { getConvertedFolderKey, addCachingToKey, userFileKeyMiddleware, userProjectKeyMiddleware, publicFileKeyMiddleware, publicProjectKeyMiddleware, bucketFileKeyMiddleware, templateFileKeyMiddleware } function getConvertedFolderKey(key) { return `${key}-converted-cache/` } function addCachingToKey(key, opts) { key = this.getConvertedFolderKey(key) if (opts.format && !opts.style) { key = `${key}format-${opts.format}` } if (opts.style && !opts.format) { key = `${key}style-${opts.style}` } if (opts.style && opts.format) { key = `${key}format-${opts.format}-style-${opts.style}` } return key } function userFileKeyMiddleware(req, res, next) { const { project_id: projectId, file_id: fileId } = req.params req.key = `${projectId}/${fileId}` req.bucket = settings.filestore.stores.user_files next() } function userProjectKeyMiddleware(req, res, next) { const { project_id: projectId } = req.params req.key = `${projectId}/` req.bucket = settings.filestore.stores.user_files next() } function publicFileKeyMiddleware(req, res, next) { if (settings.filestore.stores.public_files == null) { return res.status(501).send('public files not available') } const { project_id: projectId, public_file_id: publicFileId } = req.params req.key = `${projectId}/${publicFileId}` req.bucket = settings.filestore.stores.public_files next() } function bucketFileKeyMiddleware(req, res, next) { req.bucket = req.params.bucket req.key = req.params[0] next() } function templateFileKeyMiddleware(req, res, next) { const { template_id: templateId, format, version, sub_type: subType } = req.params req.key = `${templateId}/v/${version}/${format}` if (subType) { req.key = `${req.key}/${subType}` } req.bucket = settings.filestore.stores.template_files req.version = version next() } function publicProjectKeyMiddleware(req, res, next) { const { project_id: projectId } = req.params req.project_id = projectId req.bucket = settings.filestore.stores.user_files next() }