BrandVariationsHandler.js 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. const OError = require('@overleaf/o-error')
  2. const url = require('url')
  3. const settings = require('@overleaf/settings')
  4. const logger = require('logger-sharelatex')
  5. const V1Api = require('../V1/V1Api')
  6. const sanitizeHtml = require('sanitize-html')
  7. module.exports = {
  8. getBrandVariationById,
  9. }
  10. function getBrandVariationById(brandVariationId, callback) {
  11. if (brandVariationId == null || brandVariationId === '') {
  12. return callback(new Error('Branding variation id not provided'))
  13. }
  14. logger.log({ brandVariationId }, 'fetching brand variation details from v1')
  15. V1Api.request(
  16. {
  17. uri: `/api/v2/brand_variations/${brandVariationId}`,
  18. },
  19. function (error, response, brandVariationDetails) {
  20. if (error != null) {
  21. OError.tag(error, 'error getting brand variation details', {
  22. brandVariationId,
  23. })
  24. return callback(error)
  25. }
  26. formatBrandVariationDetails(brandVariationDetails)
  27. sanitizeBrandVariationDetails(brandVariationDetails)
  28. callback(null, brandVariationDetails)
  29. }
  30. )
  31. }
  32. function formatBrandVariationDetails(details) {
  33. if (details.export_url != null) {
  34. details.export_url = setV1AsHostIfRelativeURL(details.export_url)
  35. }
  36. if (details.home_url != null) {
  37. details.home_url = setV1AsHostIfRelativeURL(details.home_url)
  38. }
  39. if (details.logo_url != null) {
  40. details.logo_url = setV1AsHostIfRelativeURL(details.logo_url)
  41. }
  42. if (details.journal_guidelines_url != null) {
  43. details.journal_guidelines_url = setV1AsHostIfRelativeURL(
  44. details.journal_guidelines_url
  45. )
  46. }
  47. if (details.journal_cover_url != null) {
  48. details.journal_cover_url = setV1AsHostIfRelativeURL(
  49. details.journal_cover_url
  50. )
  51. }
  52. if (details.submission_confirmation_page_logo_url != null) {
  53. details.submission_confirmation_page_logo_url = setV1AsHostIfRelativeURL(
  54. details.submission_confirmation_page_logo_url
  55. )
  56. }
  57. if (details.publish_menu_icon != null) {
  58. details.publish_menu_icon = setV1AsHostIfRelativeURL(
  59. details.publish_menu_icon
  60. )
  61. }
  62. }
  63. function sanitizeBrandVariationDetails(details) {
  64. if (details.submit_button_html) {
  65. details.submit_button_html = sanitizeHtml(
  66. details.submit_button_html,
  67. settings.modules.sanitize.options
  68. )
  69. }
  70. }
  71. function setV1AsHostIfRelativeURL(urlString) {
  72. // The first argument is the base URL to resolve against if the second argument is not absolute.
  73. // As it only applies if the second argument is not absolute, we can use it to transform relative URLs into
  74. // absolute ones using v1 as the host. If the URL is absolute (e.g. a filepicker one), then the base
  75. // argument is just ignored
  76. return url.resolve(settings.apis.v1.url, urlString)
  77. }