TokenAccessHandler.coffee 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. ProjectGetter = require '../Project/ProjectGetter'
  2. Project = require('../../models/Project').Project
  3. AuthenticationController = require '../Authentication/AuthenticationController'
  4. PublicAccessLevels = require '../Authorization/PublicAccessLevels'
  5. ObjectId = require("mongojs").ObjectId
  6. module.exports = TokenAccessHandler =
  7. findProjectWithReadOnlyToken: (token, callback=(err, project)->) ->
  8. Project.findOne {
  9. 'tokens.readOnly': token,
  10. 'publicAccesLevel': PublicAccessLevels.TOKEN_BASED
  11. }, {_id: 1, publicAccesLevel: 1}, (err, project) ->
  12. return callback(err) if err?
  13. callback(null, project)
  14. findProjectWithReadAndWriteToken: (token, callback=(err, project)->) ->
  15. Project.findOne {
  16. 'tokens.readAndWrite': token,
  17. 'publicAccesLevel': PublicAccessLevels.TOKEN_BASED
  18. }, {_id: 1, publicAccesLevel: 1}, (err, project) ->
  19. return callback(err) if err?
  20. callback(null, project)
  21. addReadOnlyUserToProject: (userId, projectId, callback=(err)->) ->
  22. userId = ObjectId(userId.toString())
  23. projectId = ObjectId(projectId.toString())
  24. Project.update {
  25. _id: projectId
  26. }, {
  27. $addToSet: {tokenAccessReadOnly_refs: userId}
  28. }, (err) ->
  29. callback(err)
  30. addReadAndWriteUserToProject: (userId, projectId, callback=(err)->) ->
  31. userId = ObjectId(userId.toString())
  32. projectId = ObjectId(projectId.toString())
  33. Project.update {
  34. _id: projectId
  35. }, {
  36. $addToSet: {tokenAccessReadAndWrite_refs: userId}
  37. }, (err) ->
  38. callback(err)
  39. grantSessionReadOnlyTokenAccess: (req, projectId, token) ->
  40. if req.session?
  41. if !req.session.anonReadOnlyTokenAccess?
  42. req.session.anonReadOnlyTokenAccess = {}
  43. req.session.anonReadOnlyTokenAccess[projectId.toString()] = token.toString()
  44. requestHasReadOnlyTokenAccess: (req, projectId, callback=(err, allowed)->) ->
  45. token = (
  46. req?.session?.anonReadOnlyTokenAccess?[projectId.toString()] or
  47. req.headers['x-sl-anon-token']
  48. )
  49. if !token
  50. return callback null, false
  51. TokenAccessHandler.findProjectWithReadOnlyToken token, (err, project) ->
  52. return callback(err) if err?
  53. isAllowed = (
  54. project? and
  55. project.publicAccesLevel == PublicAccessLevels.TOKEN_BASED and
  56. project._id.toString() == projectId.toString()
  57. )
  58. callback null, isAllowed