mirror of
https://github.com/overleaf/overleaf.git
synced 2024-12-27 11:02:08 +00:00
93 lines
3.6 KiB
CoffeeScript
93 lines
3.6 KiB
CoffeeScript
path = require('path')
|
|
ProjectUploadManager = require('../Uploads/ProjectUploadManager')
|
|
ProjectOptionsHandler = require("../Project/ProjectOptionsHandler")
|
|
ProjectDetailsHandler = require('../Project/ProjectDetailsHandler')
|
|
ProjectGetter = require('../Project/ProjectGetter')
|
|
EditorController = require('../Editor/EditorController')
|
|
TemplatesPublisher = require("./TemplatesPublisher")
|
|
settings = require('settings-sharelatex')
|
|
fs = require('fs')
|
|
request = require('request')
|
|
uuid = require('node-uuid')
|
|
logger = require('logger-sharelatex')
|
|
async = require("async")
|
|
|
|
|
|
module.exports =
|
|
|
|
createProjectFromZipTemplate: (req, res)->
|
|
logger.log body:req.session.templateData, "creating project from zip"
|
|
if !req.session.templateData?
|
|
return res.redirect "/project"
|
|
|
|
dumpPath = "#{settings.path.dumpFolder}/#{uuid.v4()}"
|
|
writeStream = fs.createWriteStream(dumpPath)
|
|
zipUrl = req.session.templateData.zipUrl
|
|
if zipUrl.slice(0,12).indexOf("templates") == -1
|
|
zipUrl = "#{settings.apis.web.url}#{zipUrl}"
|
|
else
|
|
zipUrl = "#{settings.apis.templates.url}#{zipUrl}"
|
|
zipReq = request(zipUrl)
|
|
zipReq.on "error", (error) ->
|
|
logger.error err: error, "error getting zip from template API"
|
|
zipReq.pipe(writeStream)
|
|
writeStream.on 'close', ->
|
|
ProjectUploadManager.createProjectFromZipArchive req.session.user._id, req.session.templateData.templateName, dumpPath, (err, project)->
|
|
if err?
|
|
logger.err err:err, zipUrl:zipUrl, "problem building project from zip"
|
|
return res.send 500
|
|
setCompiler project._id, req.session.templateData.compiler, ->
|
|
fs.unlink dumpPath, ->
|
|
delete req.session.templateData
|
|
res.redirect "/project/#{project._id}"
|
|
|
|
publishProject: (req, res, next) ->
|
|
project_id = req.params.Project_id
|
|
ProjectGetter.getProject project_id, {owner_ref: 1}, (error, project) ->
|
|
return callback(error) if error?
|
|
user_id = project.owner_ref.toString()
|
|
logger.log user_id:user_id, project_id:project_id, "receiving request to publish project as template"
|
|
TemplatesPublisher.publish user_id, project_id, (error) ->
|
|
return next(error) if error?
|
|
res.send 204
|
|
|
|
unpublishProject: (req, res, next) ->
|
|
project_id = req.params.Project_id
|
|
ProjectGetter.getProject project_id, {owner_ref: 1}, (error, project) ->
|
|
return callback(error) if error?
|
|
user_id = project.owner_ref.toString()
|
|
logger.log user_id:user_id, project_id:project_id, "receiving request to unpublish project"
|
|
TemplatesPublisher.unpublish user_id, project_id, (error) ->
|
|
return next(error) if error?
|
|
res.send 204
|
|
|
|
updateProjectDescription: (req, res, next) ->
|
|
project_id = req.params.Project_id
|
|
{description} = req.body
|
|
EditorController.updateProjectDescription project_id, description, (error) ->
|
|
return next(error) if error?
|
|
res.send 204
|
|
|
|
getTemplateDetails: (req, res, next)->
|
|
project_id = req.params.Project_id
|
|
ProjectGetter.getProject project_id, {owner_ref: 1}, (error, project) ->
|
|
return next(error) if error?
|
|
user_id = project.owner_ref.toString()
|
|
async.parallel {
|
|
details: (cb)->
|
|
TemplatesPublisher.getTemplateDetails user_id, project_id, cb
|
|
description: (cb)->
|
|
ProjectDetailsHandler.getProjectDescription project_id, cb
|
|
}, (err, results)->
|
|
if err?
|
|
logger.err err:err, user_id:user_id, project_id:project_id, "something went wrong getting template details"
|
|
return next(err)
|
|
details = results.details
|
|
details.description = results.description
|
|
res.json details
|
|
|
|
setCompiler = (project_id, compiler, callback)->
|
|
if compiler?
|
|
ProjectOptionsHandler.setCompiler project_id, compiler, callback
|
|
else
|
|
callback()
|