OutputController.js 986 B

12345678910111213141516171819202122232425262728293031323334353637
  1. const logger = require('@overleaf/logger')
  2. const OutputFileArchiveManager = require('./OutputFileArchiveManager')
  3. const { expressify } = require('@overleaf/promise-utils')
  4. function cleanFiles(files) {
  5. if (!Array.isArray(files)) {
  6. return []
  7. }
  8. return files.filter(file => /^output\./g.test(file))
  9. }
  10. async function createOutputZip(req, res) {
  11. const {
  12. project_id: projectId,
  13. user_id: userId,
  14. build_id: buildId,
  15. } = req.params
  16. const files = cleanFiles(req.query.files)
  17. logger.debug({ projectId, userId, buildId, files }, 'Will create zip file')
  18. const archive = await OutputFileArchiveManager.archiveFilesForBuild(
  19. projectId,
  20. userId,
  21. buildId,
  22. files
  23. )
  24. archive.on('error', err => {
  25. logger.warn({ err }, 'error emitted when creating output files archive')
  26. })
  27. res.attachment('output.zip')
  28. res.setHeader('X-Content-Type-Options', 'nosniff')
  29. archive.pipe(res)
  30. }
  31. module.exports = { createOutputZip: expressify(createOutputZip) }