User.coffee 4.0 KB

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