UserMembershipsHandler.mjs 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import { callbackifyAll } from '@overleaf/promise-utils'
  2. import UserMembershipEntityConfigs from './UserMembershipEntityConfigs.mjs'
  3. import * as InstitutionModel from '../../models/Institution.mjs'
  4. import * as SubscriptionModel from '../../models/Subscription.mjs'
  5. import * as PublisherModel from '../../models/Publisher.mjs'
  6. import Features from '../../infrastructure/Features.mjs'
  7. const EntityModels = {
  8. Institution: InstitutionModel.Institution,
  9. Subscription: SubscriptionModel.Subscription,
  10. Publisher: PublisherModel.Publisher,
  11. }
  12. const UserMembershipsHandler = {
  13. async getEntitiesByUser(entityConfig, userId) {
  14. if (!Features.hasFeature('saas')) {
  15. return []
  16. }
  17. const query = entityConfig.baseQuery || {}
  18. query[entityConfig.fields.access] = userId
  19. const entities =
  20. (await EntityModels[entityConfig.modelName].find(query)) || []
  21. const filledEntities = []
  22. for (const entity of entities) {
  23. const filled = await entity.fetchV1DataPromise()
  24. filledEntities.push(filled)
  25. }
  26. return filledEntities
  27. },
  28. async removeUserFromAllEntities(userId) {
  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. for (const entityConfig of entityConfigs) {
  38. await UserMembershipsHandler.removeUserFromEntities(entityConfig, userId)
  39. }
  40. },
  41. async removeUserFromEntities(entityConfig, userId) {
  42. const removeOperation = { $pull: {} }
  43. removeOperation.$pull[entityConfig.fields.write] = userId
  44. await EntityModels[entityConfig.modelName].updateMany({}, removeOperation)
  45. },
  46. }
  47. export default {
  48. ...callbackifyAll(UserMembershipsHandler),
  49. promises: UserMembershipsHandler,
  50. }