KeyBuilder.js 1.9 KB

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