KeyBuilder.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. const settings = require('settings-sharelatex')
  2. module.exports = {
  3. getConvertedFolderKey,
  4. addCachingToKey,
  5. userFileKeyMiddleware,
  6. publicFileKeyMiddleware,
  7. publicProjectKeyMiddleware,
  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 publicFileKeyMiddleware(req, res, next) {
  33. if (settings.filestore.stores.public_files == null) {
  34. return res.status(501).send('public files not available')
  35. }
  36. const { project_id: projectId, public_file_id: publicFileId } = req.params
  37. req.key = `${projectId}/${publicFileId}`
  38. req.bucket = settings.filestore.stores.public_files
  39. next()
  40. }
  41. function templateFileKeyMiddleware(req, res, next) {
  42. const {
  43. template_id: templateId,
  44. format,
  45. version,
  46. sub_type: subType
  47. } = req.params
  48. req.key = `${templateId}/v/${version}/${format}`
  49. if (subType) {
  50. req.key = `${req.key}/${subType}`
  51. }
  52. req.bucket = settings.filestore.stores.template_files
  53. req.version = version
  54. next()
  55. }
  56. function publicProjectKeyMiddleware(req, res, next) {
  57. const { project_id: projectId } = req.params
  58. req.project_id = projectId
  59. req.bucket = settings.filestore.stores.user_files
  60. next()
  61. }