DropboxHandler.coffee 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. request = require('request')
  2. settings = require('settings-sharelatex')
  3. logger = require('logger-sharelatex')
  4. Project = require('../../models/Project').Project
  5. projectEntityHandler = require '../Project/ProjectEntityHandler'
  6. _ = require('underscore')
  7. async = require('async')
  8. module.exports =
  9. getUserRegistrationStatus: (user_id, callback)->
  10. logger.log user_id:user_id, "getting dropbox registration status from tpds"
  11. opts =
  12. url : "#{settings.apis.thirdPartyDataStore.url}/user/#{user_id}/dropbox/status"
  13. timeout: 5000
  14. request.get opts, (err, response, body)->
  15. safelyGetResponse err, response, body, (err, body)->
  16. if err?
  17. logger.err err:err, response:response, "getUserRegistrationStatus problem"
  18. return callback err
  19. logger.log status:body, "getting dropbox registration status for user #{user_id}"
  20. callback err, body
  21. getDropboxRegisterUrl: (user_id, callback)->
  22. opts =
  23. url: "#{settings.apis.thirdPartyDataStore.url}/user/#{user_id}/dropbox/register"
  24. timeout: 5000
  25. request.get opts, (err, response, body)->
  26. safelyGetResponse err, response, body, (err, body)->
  27. if err?
  28. logger.err err:err, response:response, "getUserRegistrationStatus problem"
  29. return callback err
  30. url = "#{body.authorize_url}&oauth_callback=#{settings.siteUrl}/dropbox/completeRegistration"
  31. logger.log user_id:user_id, url:url, "starting dropbox register"
  32. callback err, url
  33. completeRegistration: (user_id, callback)->
  34. opts =
  35. url: "#{settings.apis.thirdPartyDataStore.url}/user/#{user_id}/dropbox/getaccesstoken"
  36. timeout: 5000
  37. request.get opts, (err, response, body)=>
  38. safelyGetResponse err, response, body, (err, body)=>
  39. if err?
  40. logger.err err:err, response:response, "getUserRegistrationStatus problem"
  41. return callback err
  42. success = body.success
  43. logger.log user_id:user_id, success:body.success, "completing dropbox register"
  44. if success
  45. @flushUsersProjectToDropbox user_id
  46. callback err, body.success
  47. unlinkAccount: (user_id, callback)->
  48. opts =
  49. url: "#{settings.apis.thirdPartyDataStore.url}/user/#{user_id}/dropbox"
  50. timeout: 5000
  51. request.del opts, (err, response, body)=>
  52. callback(err)
  53. flushUsersProjectToDropbox: (user_id, callback)->
  54. Project.findAllUsersProjects user_id, '_id', (projects = [], collabertions = [], readOnlyProjects = [])->
  55. projectList = []
  56. projectList = projectList.concat(projects)
  57. projectList = projectList.concat(collabertions)
  58. projectList = projectList.concat(readOnlyProjects)
  59. projectIds = _.pluck(projectList, "_id")
  60. logger.log projectIds:projectIds, user_id:user_id, "flushing all a users projects to tpds"
  61. jobs = projectIds.map (project_id)->
  62. return (cb)->
  63. projectEntityHandler.flushProjectToThirdPartyDataStore project_id, cb
  64. async.series jobs, callback
  65. safelyGetResponse = (err, res, body, callback)->
  66. statusCode = if res? then res.statusCode else 500
  67. if err? or statusCode != 200
  68. e = new Error("something went wrong getting response from dropbox, #{err}, #{statusCode}")
  69. logger.err err:err
  70. callback(e, [])
  71. else
  72. body = JSON.parse body
  73. callback(null, body)