KeyBuilder.js 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. const settings = require('@overleaf/settings')
  2. module.exports = {
  3. getConvertedFolderKey,
  4. addCachingToKey,
  5. userFileKeyMiddleware,
  6. userProjectKeyMiddleware,
  7. bucketFileKeyMiddleware,
  8. templateFileKeyMiddleware,
  9. }
  10. function getConvertedFolderKey(key) {
  11. return `${key}-converted-cache/`
  12. }
  13. function addCachingToKey(key, opts) {
  14. key = this.getConvertedFolderKey(key)
  15. if (opts.format && !opts.style) {
  16. key = `${key}format-${opts.format}`
  17. }
  18. if (opts.style && !opts.format) {
  19. key = `${key}style-${opts.style}`
  20. }
  21. if (opts.style && opts.format) {
  22. key = `${key}format-${opts.format}-style-${opts.style}`
  23. }
  24. return key
  25. }
  26. function userFileKeyMiddleware(req, res, next) {
  27. const { project_id: projectId, file_id: fileId } = req.params
  28. req.key = `${projectId}/${fileId}`
  29. req.bucket = settings.filestore.stores.user_files
  30. next()
  31. }
  32. function userProjectKeyMiddleware(req, res, next) {
  33. const { project_id: projectId } = req.params
  34. req.project_id = projectId
  35. req.key = `${projectId}/`
  36. req.bucket = settings.filestore.stores.user_files
  37. next()
  38. }
  39. function bucketFileKeyMiddleware(req, res, next) {
  40. req.bucket = req.params.bucket
  41. req.key = req.params[0]
  42. next()
  43. }
  44. function templateFileKeyMiddleware(req, res, next) {
  45. const {
  46. template_id: templateId,
  47. format,
  48. version,
  49. sub_type: subType,
  50. } = req.params
  51. req.key = `${templateId}/v/${version}/${format}`
  52. if (subType) {
  53. req.key = `${req.key}/${subType}`
  54. }
  55. req.bucket = settings.filestore.stores.template_files
  56. req.version = version
  57. next()
  58. }