Publisher.js 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. const mongoose = require('../infrastructure/Mongoose')
  2. const { Schema } = mongoose
  3. const { ObjectId } = Schema
  4. const settings = require('@overleaf/settings')
  5. const logger = require('@overleaf/logger')
  6. const request = require('request')
  7. const PublisherSchema = new Schema(
  8. {
  9. slug: { type: String, required: true },
  10. managerIds: [{ type: ObjectId, ref: 'User' }],
  11. },
  12. { minimize: false }
  13. )
  14. // fetch publisher's (brand on v1) data from v1 API. Errors are ignored
  15. PublisherSchema.method('fetchV1Data', function (callback) {
  16. request(
  17. {
  18. baseUrl: settings.apis.v1.url,
  19. url: `/api/v2/brands/${this.slug}`,
  20. method: 'GET',
  21. auth: {
  22. user: settings.apis.v1.user,
  23. pass: settings.apis.v1.pass,
  24. sendImmediately: true,
  25. },
  26. timeout: settings.apis.v1.timeout,
  27. },
  28. (error, response, body) => {
  29. let parsedBody
  30. try {
  31. parsedBody = JSON.parse(body)
  32. } catch (error1) {
  33. // log error and carry on without v1 data
  34. error = error1
  35. logger.err(
  36. { model: 'Publisher', slug: this.slug, error },
  37. '[fetchV1DataError]'
  38. )
  39. }
  40. this.name = parsedBody != null ? parsedBody.name : undefined
  41. this.partner = parsedBody != null ? parsedBody.partner : undefined
  42. callback(null, this)
  43. }
  44. )
  45. })
  46. exports.Publisher = mongoose.model('Publisher', PublisherSchema)
  47. exports.PublisherSchema = PublisherSchema