TemplatesController.coffee 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. path = require('path')
  2. ProjectUploadManager = require('../Uploads/ProjectUploadManager')
  3. ProjectOptionsHandler = require("../Project/ProjectOptionsHandler")
  4. ProjectDetailsHandler = require('../Project/ProjectDetailsHandler')
  5. ProjectGetter = require('../Project/ProjectGetter')
  6. EditorController = require('../Editor/EditorController')
  7. TemplatesPublisher = require("./TemplatesPublisher")
  8. settings = require('settings-sharelatex')
  9. fs = require('fs')
  10. request = require('request')
  11. uuid = require('node-uuid')
  12. logger = require('logger-sharelatex')
  13. async = require("async")
  14. module.exports =
  15. createProjectFromZipTemplate: (req, res)->
  16. logger.log body:req.session.templateData, "creating project from zip"
  17. if !req.session.templateData?
  18. return res.redirect "/project"
  19. dumpPath = "#{settings.path.dumpFolder}/#{uuid.v4()}"
  20. writeStream = fs.createWriteStream(dumpPath)
  21. zipUrl = req.session.templateData.zipUrl
  22. if zipUrl.slice(0,12).indexOf("templates") == -1
  23. zipUrl = "#{settings.apis.web.url}#{zipUrl}"
  24. else
  25. zipUrl = "#{settings.apis.templates.url}#{zipUrl}"
  26. zipReq = request(zipUrl)
  27. zipReq.on "error", (error) ->
  28. logger.error err: error, "error getting zip from template API"
  29. zipReq.pipe(writeStream)
  30. writeStream.on 'close', ->
  31. ProjectUploadManager.createProjectFromZipArchive req.session.user._id, req.session.templateData.templateName, dumpPath, (err, project)->
  32. if err?
  33. logger.err err:err, zipUrl:zipUrl, "problem building project from zip"
  34. return res.send 500
  35. setCompiler project._id, req.session.templateData.compiler, ->
  36. fs.unlink dumpPath, ->
  37. delete req.session.templateData
  38. res.redirect "/project/#{project._id}"
  39. publishProject: (req, res, next) ->
  40. project_id = req.params.Project_id
  41. ProjectGetter.getProject project_id, {owner_ref: 1}, (error, project) ->
  42. return callback(error) if error?
  43. user_id = project.owner_ref.toString()
  44. logger.log user_id:user_id, project_id:project_id, "receiving request to publish project as template"
  45. TemplatesPublisher.publish user_id, project_id, (error) ->
  46. return next(error) if error?
  47. res.send 204
  48. unpublishProject: (req, res, next) ->
  49. project_id = req.params.Project_id
  50. ProjectGetter.getProject project_id, {owner_ref: 1}, (error, project) ->
  51. return callback(error) if error?
  52. user_id = project.owner_ref.toString()
  53. logger.log user_id:user_id, project_id:project_id, "receiving request to unpublish project"
  54. TemplatesPublisher.unpublish user_id, project_id, (error) ->
  55. return next(error) if error?
  56. res.send 204
  57. updateProjectDescription: (req, res, next) ->
  58. project_id = req.params.Project_id
  59. {description} = req.body
  60. EditorController.updateProjectDescription project_id, description, (error) ->
  61. return next(error) if error?
  62. res.send 204
  63. getTemplateDetails: (req, res, next)->
  64. project_id = req.params.Project_id
  65. ProjectGetter.getProject project_id, {owner_ref: 1}, (error, project) ->
  66. return next(error) if error?
  67. user_id = project.owner_ref.toString()
  68. async.parallel {
  69. details: (cb)->
  70. TemplatesPublisher.getTemplateDetails user_id, project_id, cb
  71. description: (cb)->
  72. ProjectDetailsHandler.getProjectDescription project_id, cb
  73. }, (err, results)->
  74. if err?
  75. logger.err err:err, user_id:user_id, project_id:project_id, "something went wrong getting template details"
  76. return next(err)
  77. details = results.details
  78. details.description = results.description
  79. res.json details
  80. setCompiler = (project_id, compiler, callback)->
  81. if compiler?
  82. ProjectOptionsHandler.setCompiler project_id, compiler, callback
  83. else
  84. callback()