KeyBuilder.js 2.2 KB

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