User.coffee 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  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. @_id = user?._id?.toString()
  28. callback()
  29. logout: (callback = (error) ->) ->
  30. @getCsrfToken (error) =>
  31. return callback(error) if error?
  32. @request.get {
  33. url: "/logout"
  34. json:
  35. email: @email
  36. password: @password
  37. }, (error, response, body) =>
  38. return callback(error) if error?
  39. db.users.findOne {email: @email}, (error, user) =>
  40. return callback(error) if error?
  41. @id = user?._id?.toString()
  42. @_id = user?._id?.toString()
  43. callback()
  44. ensure_admin: (callback = (error) ->) ->
  45. db.users.update {_id: ObjectId(@id)}, { $set: { isAdmin: true }}, callback
  46. createProject: (name, callback = (error, project_id) ->) ->
  47. @request.post {
  48. url: "/project/new",
  49. json:
  50. projectName: name
  51. }, (error, response, body) ->
  52. return callback(error) if error?
  53. if !body?.project_id?
  54. console.error "SOMETHING WENT WRONG CREATING PROJECT", response.statusCode, response.headers["location"], body
  55. callback(null, body.project_id)
  56. addUserToProject: (project_id, email, privileges, callback = (error, user) ->) ->
  57. @request.post {
  58. url: "/project/#{project_id}/users",
  59. json: {email, privileges}
  60. }, (error, response, body) ->
  61. return callback(error) if error?
  62. callback(null, body.user)
  63. makePublic: (project_id, level, callback = (error) ->) ->
  64. @request.post {
  65. url: "/project/#{project_id}/settings/admin",
  66. json:
  67. publicAccessLevel: level
  68. }, (error, response, body) ->
  69. return callback(error) if error?
  70. callback(null)
  71. getCsrfToken: (callback = (error) ->) ->
  72. @request.get {
  73. url: "/register"
  74. }, (err, response, body) =>
  75. return callback(error) if error?
  76. csrfMatches = body.match("window.csrfToken = \"(.*?)\";")
  77. if !csrfMatches?
  78. return callback(new Error("no csrf token found"))
  79. @request = @request.defaults({
  80. headers:
  81. "x-csrf-token": csrfMatches[1]
  82. })
  83. callback()
  84. changePassword: (callback = (error) ->) ->
  85. @getCsrfToken (error) =>
  86. return callback(error) if error?
  87. @request.post {
  88. url: "/user/password/update"
  89. json:
  90. currentPassword: @password
  91. newPassword1: @password
  92. newPassword2: @password
  93. }, (error, response, body) =>
  94. return callback(error) if error?
  95. db.users.findOne {email: @email}, (error, user) =>
  96. return callback(error) if error?
  97. callback()
  98. getUserSettingsPage: (callback = (error, statusCode) ->) ->
  99. @getCsrfToken (error) =>
  100. return callback(error) if error?
  101. @request.get {
  102. url: "/user/settings"
  103. }, (error, response, body) =>
  104. return callback(error) if error?
  105. callback(null, response.statusCode)
  106. module.exports = User