User.coffee 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. request = require("./request")
  2. settings = require("settings-sharelatex")
  3. {db, ObjectId} = require("../../../../app/js/infrastructure/mongojs")
  4. count = 0
  5. class User
  6. constructor: (options = {}) ->
  7. @email = "acceptance-test-#{count}@example.com"
  8. @password = "acceptance-test-#{count}-password"
  9. count++
  10. @jar = request.jar()
  11. @request = request.defaults({
  12. jar: @jar
  13. })
  14. login: (callback = (error) ->) ->
  15. @getCsrfToken (error) =>
  16. return callback(error) if error?
  17. @request.post {
  18. url: "/register" # Register will log in, but also ensure user exists
  19. json:
  20. email: @email
  21. password: @password
  22. }, (error, response, body) =>
  23. return callback(error) if error?
  24. db.users.findOne {email: @email}, (error, user) =>
  25. return callback(error) if error?
  26. @id = user?._id?.toString()
  27. callback()
  28. ensure_admin: (callback = (error) ->) ->
  29. db.users.update {_id: ObjectId(@id)}, { $set: { isAdmin: true }}, callback
  30. createProject: (name, callback = (error, project_id) ->) ->
  31. @request.post {
  32. url: "/project/new",
  33. json:
  34. projectName: name
  35. }, (error, response, body) ->
  36. return callback(error) if error?
  37. if !body?.project_id?
  38. console.error "SOMETHING WENT WRONG CREATING PROJECT", response.statusCode, response.headers["location"], body
  39. callback(null, body.project_id)
  40. addUserToProject: (project_id, email, privileges, callback = (error, user) ->) ->
  41. @request.post {
  42. url: "/project/#{project_id}/users",
  43. json: {email, privileges}
  44. }, (error, response, body) ->
  45. return callback(error) if error?
  46. callback(null, body.user)
  47. makePublic: (project_id, level, callback = (error) ->) ->
  48. @request.post {
  49. url: "/project/#{project_id}/settings/admin",
  50. json:
  51. publicAccessLevel: level
  52. }, (error, response, body) ->
  53. return callback(error) if error?
  54. callback(null)
  55. getCsrfToken: (callback = (error) ->) ->
  56. @request.get {
  57. url: "/register"
  58. }, (err, response, body) =>
  59. return callback(error) if error?
  60. csrfMatches = body.match("window.csrfToken = \"(.*?)\";")
  61. if !csrfMatches?
  62. return callback(new Error("no csrf token found"))
  63. @request = @request.defaults({
  64. headers:
  65. "x-csrf-token": csrfMatches[1]
  66. })
  67. callback()
  68. module.exports = User