TokenAccessHandler.coffee 1.9 KB

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