diff --git a/services/web/app/coffee/Features/Project/ProjectController.coffee b/services/web/app/coffee/Features/Project/ProjectController.coffee index 7a8d2c3960..36f4d273cb 100644 --- a/services/web/app/coffee/Features/Project/ProjectController.coffee +++ b/services/web/app/coffee/Features/Project/ProjectController.coffee @@ -1,7 +1,9 @@ logger = require("logger-sharelatex") projectDeleter = require("./ProjectDeleter") projectDuplicator = require("./ProjectDuplicator") +projectCreationHandler = require("./ProjectCreationHandler") metrics = require('../../infrastructure/Metrics') +sanitize = require('sanitizer') @@ -27,4 +29,27 @@ module.exports = if err? logger.error err:err, project_id: project_id, user_id: req.session.user._id, "error cloning project" return next(err) - res.send(project_id:project._id) \ No newline at end of file + res.send(project_id:project._id) + + + newProject: (req, res)-> + user = req.session.user + projectName = sanitize.escape(req.body.projectName) + template = sanitize.escape(req.body.template) + logger.log user: user, type: template, name: projectName, "creating project" + if template == 'example' + projectCreationHandler.createExampleProject user._id, projectName, (err, project)-> + if err? + logger.error err: err, project: project, user: user, name: projectName, type: "example", "error creating project" + res.send 500 + else + logger.log project: project, user: user, name: projectName, type: "example", "created project" + res.send {project_id:project._id} + else + projectCreationHandler.createBasicProject user._id, projectName, (err, project)-> + if err? + logger.error err: err, project: project, user: user, name: projectName, type: "basic", "error creating project" + res.send 500 + else + logger.log project: project, user: user, name: projectName, type: "basic", "created project" + res.send {project_id:project._id} \ No newline at end of file diff --git a/services/web/app/coffee/router.coffee b/services/web/app/coffee/router.coffee index af846bf268..4f008d207f 100644 --- a/services/web/app/coffee/router.coffee +++ b/services/web/app/coffee/router.coffee @@ -93,7 +93,7 @@ module.exports = class Router app.get '/user/:user_id/personal_info', httpAuth, PersonalInfoController.getPersonalInfo app.get '/project', AuthenticationController.requireLogin(), Project.list - app.post '/project/new', AuthenticationController.requireLogin(), Project.apiNewProject + app.post '/project/new', AuthenticationController.requireLogin(), ProjectController.NewProject app.get '/project/new/template', TemplatesMiddlewear.saveTemplateDataInSession, AuthenticationController.requireLogin(), TemplatesController.createProjectFromZipTemplate app.get '/Project/:Project_id', SecurityManager.requestCanAccessProject, Project.loadEditor diff --git a/services/web/test/UnitTests/coffee/Project/ProjectControllerTests.coffee b/services/web/test/UnitTests/coffee/Project/ProjectControllerTests.coffee index 09ca362829..bab6fba90a 100644 --- a/services/web/test/UnitTests/coffee/Project/ProjectControllerTests.coffee +++ b/services/web/test/UnitTests/coffee/Project/ProjectControllerTests.coffee @@ -17,11 +17,15 @@ describe "ProjectController", -> deleteProject: sinon.stub().callsArgWith(1) @ProjectDuplicator = duplicate: sinon.stub().callsArgWith(3, null, {_id:@project_id}) + @ProjectCreationHandler = + createExampleProject: sinon.stub().callsArgWith(2, null, {_id:@project_id}) + createBasicProject: sinon.stub().callsArgWith(2, null, {_id:@project_id}) @ProjectController = SandboxedModule.require modulePath, requires: "settings-sharelatex":@settings "logger-sharelatex": log:-> "./ProjectDeleter": @ProjectDeleter "./ProjectDuplicator": @ProjectDuplicator + "./ProjectCreationHandler": @ProjectCreationHandler @user = @@ -56,3 +60,29 @@ describe "ProjectController", -> json.project_id.should.equal @project_id done() @ProjectController.cloneProject @req, @res + + + + describe "newProject", -> + + it "should call the projectCreationHandler with createExampleProject", (done)-> + @req.body.template = "example" + @res.send = (json)=> + @ProjectCreationHandler.createExampleProject.calledWith(@user._id, @projectName).should.equal true + @ProjectCreationHandler.createBasicProject.called.should.equal false + done() + @ProjectController.newProject @req, @res + + + it "should call the projectCreationHandler with createBasicProject", (done)-> + @req.body.template = "basic" + @res.send = (json)=> + @ProjectCreationHandler.createExampleProject.called.should.equal false + @ProjectCreationHandler.createBasicProject.calledWith(@user._id, @projectName).should.equal true + done() + @ProjectController.newProject @req, @res + + + + +