ProjectDetailsHandler.coffee 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. ProjectGetter = require("./ProjectGetter")
  2. UserGetter = require("../User/UserGetter")
  3. Project = require('../../models/Project').Project
  4. logger = require("logger-sharelatex")
  5. tpdsUpdateSender = require '../ThirdPartyDataStore/TpdsUpdateSender'
  6. _ = require("underscore")
  7. PublicAccessLevels = require("../Authorization/PublicAccessLevels")
  8. Errors = require("../Errors/Errors")
  9. ProjectTokenGenerator = require('./ProjectTokenGenerator')
  10. module.exports = ProjectDetailsHandler =
  11. getDetails: (project_id, callback)->
  12. ProjectGetter.getProject project_id, {name:true, description:true, compiler:true, features:true, owner_ref:true}, (err, project)->
  13. if err?
  14. logger.err err:err, project_id:project_id, "error getting project"
  15. return callback(err)
  16. return callback(new Errors.NotFoundError("project not found")) if !project?
  17. UserGetter.getUser project.owner_ref, (err, user) ->
  18. return callback(err) if err?
  19. details =
  20. name : project.name
  21. description: project.description
  22. compiler: project.compiler
  23. features: user.features
  24. logger.log project_id:project_id, details:details, "getting project details"
  25. callback(err, details)
  26. getProjectDescription: (project_id, callback)->
  27. Project.findOne _id:project_id, "description", (err, project)->
  28. callback(err, project?.description)
  29. setProjectDescription: (project_id, description, callback)->
  30. conditions = _id:project_id
  31. update = description:description
  32. logger.log conditions:conditions, update:update, project_id:project_id, description:description, "setting project description"
  33. Project.update conditions, update, (err)->
  34. if err?
  35. logger.err err:err, "something went wrong setting project description"
  36. callback(err)
  37. renameProject: (project_id, newName, callback = ->)->
  38. ProjectDetailsHandler.validateProjectName newName, (error) ->
  39. return callback(error) if error?
  40. logger.log project_id: project_id, newName:newName, "renaming project"
  41. ProjectGetter.getProject project_id, {name:true}, (err, project)->
  42. if err? or !project?
  43. logger.err err:err, project_id:project_id, "error getting project or could not find it todo project rename"
  44. return callback(err)
  45. oldProjectName = project.name
  46. Project.update _id:project_id, {name: newName}, (err, project)=>
  47. if err?
  48. return callback(err)
  49. tpdsUpdateSender.moveEntity {project_id:project_id, project_name:oldProjectName, newProjectName:newName}, callback
  50. MAX_PROJECT_NAME_LENGTH: 150
  51. validateProjectName: (name, callback = (error) ->) ->
  52. if name.length == 0
  53. return callback(new Errors.InvalidNameError("Project name cannot be blank"))
  54. else if name.length > @MAX_PROJECT_NAME_LENGTH
  55. return callback(new Errors.InvalidNameError("Project name is too long"))
  56. else if name.indexOf("/") > -1
  57. return callback(new Errors.InvalidNameError("Project name cannot not contain / characters"))
  58. else
  59. return callback()
  60. setPublicAccessLevel : (project_id, newAccessLevel, callback = ->)->
  61. logger.log project_id: project_id, level: newAccessLevel, "set public access level"
  62. # TODO: remove the read-only and read-and-write items from here
  63. if project_id? && newAccessLevel? and _.include [
  64. PublicAccessLevels.READ_ONLY,
  65. PublicAccessLevels.READ_AND_WRITE,
  66. PublicAccessLevels.PRIVATE,
  67. PublicAccessLevels.TOKEN_BASED
  68. ], newAccessLevel
  69. Project.update {_id:project_id},{publicAccesLevel:newAccessLevel}, (err)->
  70. callback()
  71. ensureTokensArePresent: (project_id, callback=(err, tokens)->) ->
  72. ProjectGetter.getProject project_id, {tokens: 1}, (err, project) ->
  73. return callback(err) if err?
  74. if project.tokens? and project.tokens.readOnly? and project.tokens.readAndWrite?
  75. return callback(null, project.tokens)
  76. else
  77. tokens =
  78. readOnly: ProjectTokenGenerator.readOnlyToken()
  79. readAndWrite: ProjectTokenGenerator.readAndWriteToken()
  80. Project.update {_id: project_id}, {$set: {tokens: tokens}}, (err) ->
  81. return callback(err) if err?
  82. callback(null, tokens)