KeyBuilder.js 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. const settings = require('@overleaf/settings')
  2. module.exports = {
  3. getConvertedFolderKey,
  4. addCachingToKey,
  5. userFileKeyMiddleware,
  6. userProjectKeyMiddleware,
  7. publicFileKeyMiddleware,
  8. publicProjectKeyMiddleware,
  9. bucketFileKeyMiddleware,
  10. templateFileKeyMiddleware,
  11. }
  12. function getConvertedFolderKey(key) {
  13. return `${key}-converted-cache/`
  14. }
  15. function addCachingToKey(key, opts) {
  16. key = this.getConvertedFolderKey(key)
  17. if (opts.format && !opts.style) {
  18. key = `${key}format-${opts.format}`
  19. }
  20. if (opts.style && !opts.format) {
  21. key = `${key}style-${opts.style}`
  22. }
  23. if (opts.style && opts.format) {
  24. key = `${key}format-${opts.format}-style-${opts.style}`
  25. }
  26. return key
  27. }
  28. function userFileKeyMiddleware(req, res, next) {
  29. const { project_id: projectId, file_id: fileId } = req.params
  30. req.key = `${projectId}/${fileId}`
  31. req.bucket = settings.filestore.stores.user_files
  32. next()
  33. }
  34. function userProjectKeyMiddleware(req, res, next) {
  35. const { project_id: projectId } = req.params
  36. req.key = `${projectId}/`
  37. req.bucket = settings.filestore.stores.user_files
  38. next()
  39. }
  40. function publicFileKeyMiddleware(req, res, next) {
  41. if (settings.filestore.stores.public_files == null) {
  42. return res.status(501).send('public files not available')
  43. }
  44. const { project_id: projectId, public_file_id: publicFileId } = req.params
  45. req.key = `${projectId}/${publicFileId}`
  46. req.bucket = settings.filestore.stores.public_files
  47. next()
  48. }
  49. function bucketFileKeyMiddleware(req, res, next) {
  50. req.bucket = req.params.bucket
  51. req.key = req.params[0]
  52. next()
  53. }
  54. function templateFileKeyMiddleware(req, res, next) {
  55. const {
  56. template_id: templateId,
  57. format,
  58. version,
  59. sub_type: subType,
  60. } = req.params
  61. req.key = `${templateId}/v/${version}/${format}`
  62. if (subType) {
  63. req.key = `${req.key}/${subType}`
  64. }
  65. req.bucket = settings.filestore.stores.template_files
  66. req.version = version
  67. next()
  68. }
  69. function publicProjectKeyMiddleware(req, res, next) {
  70. const { project_id: projectId } = req.params
  71. req.project_id = projectId
  72. req.bucket = settings.filestore.stores.user_files
  73. next()
  74. }