UserMembershipsHandler.mjs 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. /* eslint-disable
  2. n/handle-callback-err,
  3. max-len,
  4. */
  5. // TODO: This file was created by bulk-decaffeinate.
  6. // Fix any style issues and re-enable lint.
  7. /*
  8. * decaffeinate suggestions:
  9. * DS207: Consider shorter variations of null checks
  10. * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
  11. */
  12. import async from 'async'
  13. import { promisifyAll } from '@overleaf/promise-utils'
  14. import UserMembershipEntityConfigs from './UserMembershipEntityConfigs.mjs'
  15. import InstitutionModel from '../../models/Institution.js'
  16. import SubscriptionModel from '../../models/Subscription.js'
  17. import PublisherModel from '../../models/Publisher.js'
  18. const EntityModels = {
  19. Institution: InstitutionModel.Institution,
  20. Subscription: SubscriptionModel.Subscription,
  21. Publisher: PublisherModel.Publisher,
  22. }
  23. const UserMembershipsHandler = {
  24. removeUserFromAllEntities(userId, callback) {
  25. // get all writable entity types
  26. if (callback == null) {
  27. callback = function () {}
  28. }
  29. const entityConfigs = []
  30. for (const key in UserMembershipEntityConfigs) {
  31. const entityConfig = UserMembershipEntityConfigs[key]
  32. if (entityConfig.fields && entityConfig.fields.write != null) {
  33. entityConfigs.push(entityConfig)
  34. }
  35. }
  36. // remove the user from all entities types
  37. async.map(
  38. entityConfigs,
  39. (entityConfig, innerCallback) =>
  40. UserMembershipsHandler.removeUserFromEntities(
  41. entityConfig,
  42. userId,
  43. innerCallback
  44. ),
  45. callback
  46. )
  47. },
  48. removeUserFromEntities(entityConfig, userId, callback) {
  49. if (callback == null) {
  50. callback = function () {}
  51. }
  52. const removeOperation = { $pull: {} }
  53. removeOperation.$pull[entityConfig.fields.write] = userId
  54. EntityModels[entityConfig.modelName]
  55. .updateMany({}, removeOperation)
  56. .then(result => callback(null, result))
  57. .catch(callback)
  58. },
  59. getEntitiesByUser(entityConfig, userId, callback) {
  60. if (callback == null) {
  61. callback = function () {}
  62. }
  63. const query = Object.assign({}, entityConfig.baseQuery)
  64. query[entityConfig.fields.access] = userId
  65. EntityModels[entityConfig.modelName]
  66. .find(query)
  67. .then(entities => {
  68. if (entities == null) {
  69. entities = []
  70. }
  71. async.mapSeries(
  72. entities,
  73. (entity, cb) => entity.fetchV1Data(cb),
  74. callback
  75. )
  76. })
  77. .catch(callback)
  78. },
  79. }
  80. UserMembershipsHandler.promises = promisifyAll(UserMembershipsHandler)
  81. export default UserMembershipsHandler