mirror of
https://github.com/yu-i-i/overleaf-cep.git
synced 2026-05-24 17:51:51 +02:00
* Create `promiseAuto` util to replace `async.auto` * Promisify `BrandVariationsHandler.getBrandVariationById` * Promisify `updateProjectSettings` * Promisify `updateProjectAdminSettings` * Promisify `newProject` * Promisify `deleteProject` * Promisify `loadEditor` * Fix brandVariation loading in promise auto * Promisify `_refreshFeatures` * Promisify `_injectProjectUsers` * Fix `no-inner-declarations` * Promisify `cloneProject` * Promisify `userProjectsJson` * Promisify `projectEntitiesJson` * Promisify `restoreProject` * Promisify `renameProject` * Additional warning fix * Update unit tests * Fixup `updateProjectSettings`: call jobs inside the Promise.all * Use `expressify(...)` instead of manually call `next(err)` https://github.com/overleaf/internal/pull/18477#discussion_r1613611987 https://github.com/overleaf/internal/pull/18477#discussion_r1613621146 https://github.com/overleaf/internal/pull/18477#discussion_r1613634000 ... * Replace Promise.all by sequencial awaits https://github.com/overleaf/internal/pull/18477#discussion_r1613852746 https://github.com/overleaf/internal/pull/18477#discussion_r1613611987 * Remove manual throws of 500. Let the generic error handler catch them. https://github.com/overleaf/internal/pull/18477#discussion_r1613623446 https://github.com/overleaf/internal/pull/18477#discussion_r1613628955 * Promisify `untrashProject` https://github.com/overleaf/internal/pull/18477#discussion_r1613627783 * Promisify `expireDeletedProjectsAfterDuration` * Promisify `archiveProject` * Promisify `unarchiveProject` * Promisify `trashProject` * Promisify `expireDeletedProject` * Use async `setTimeout` from `timers/promise` https://github.com/overleaf/internal/pull/18477#discussion_r1613843085 * Remove unused `_injectProjectUsers` https://github.com/overleaf/internal/pull/18477#discussion_r1613855766 * Add missing exec in queries (?) Not sure if that makes a real difference but it's more consistent with the rest of the code * Catch floating promises https://github.com/overleaf/internal/pull/18477#discussion_r1613868876 * Replace custom `promiseAuto` by `p-props` from NPM https://github.com/overleaf/internal/pull/18477#discussion_r1613393294 * Downgrade `p-props` to v4. Later versions require ESM * Simplify code around `splitTestAssignments` GitOrigin-RevId: 84d37f7aa9227b5b9acf9eeb5db1b78afc01b6ee
87 lines
2.8 KiB
JavaScript
87 lines
2.8 KiB
JavaScript
const OError = require('@overleaf/o-error')
|
|
const { URL } = require('url')
|
|
const settings = require('@overleaf/settings')
|
|
const logger = require('@overleaf/logger')
|
|
const V1Api = require('../V1/V1Api')
|
|
const sanitizeHtml = require('sanitize-html')
|
|
const { promisify } = require('@overleaf/promise-utils')
|
|
|
|
module.exports = {
|
|
getBrandVariationById,
|
|
promises: {
|
|
getBrandVariationById: promisify(getBrandVariationById),
|
|
},
|
|
}
|
|
|
|
function getBrandVariationById(brandVariationId, callback) {
|
|
if (brandVariationId == null || brandVariationId === '') {
|
|
return callback(new Error('Branding variation id not provided'))
|
|
}
|
|
logger.debug({ brandVariationId }, 'fetching brand variation details from v1')
|
|
V1Api.request(
|
|
{
|
|
uri: `/api/v2/brand_variations/${brandVariationId}`,
|
|
},
|
|
function (error, response, brandVariationDetails) {
|
|
if (error != null) {
|
|
OError.tag(error, 'error getting brand variation details', {
|
|
brandVariationId,
|
|
})
|
|
return callback(error)
|
|
}
|
|
formatBrandVariationDetails(brandVariationDetails)
|
|
sanitizeBrandVariationDetails(brandVariationDetails)
|
|
callback(null, brandVariationDetails)
|
|
}
|
|
)
|
|
}
|
|
|
|
function formatBrandVariationDetails(details) {
|
|
if (details.export_url != null) {
|
|
details.export_url = setV1AsHostIfRelativeURL(details.export_url)
|
|
}
|
|
if (details.home_url != null) {
|
|
details.home_url = setV1AsHostIfRelativeURL(details.home_url)
|
|
}
|
|
if (details.logo_url != null) {
|
|
details.logo_url = setV1AsHostIfRelativeURL(details.logo_url)
|
|
}
|
|
if (details.journal_guidelines_url != null) {
|
|
details.journal_guidelines_url = setV1AsHostIfRelativeURL(
|
|
details.journal_guidelines_url
|
|
)
|
|
}
|
|
if (details.journal_cover_url != null) {
|
|
details.journal_cover_url = setV1AsHostIfRelativeURL(
|
|
details.journal_cover_url
|
|
)
|
|
}
|
|
if (details.submission_confirmation_page_logo_url != null) {
|
|
details.submission_confirmation_page_logo_url = setV1AsHostIfRelativeURL(
|
|
details.submission_confirmation_page_logo_url
|
|
)
|
|
}
|
|
if (details.publish_menu_icon != null) {
|
|
details.publish_menu_icon = setV1AsHostIfRelativeURL(
|
|
details.publish_menu_icon
|
|
)
|
|
}
|
|
}
|
|
|
|
function sanitizeBrandVariationDetails(details) {
|
|
if (details.submit_button_html) {
|
|
details.submit_button_html = sanitizeHtml(
|
|
details.submit_button_html,
|
|
settings.modules.sanitize.options
|
|
)
|
|
}
|
|
}
|
|
|
|
function setV1AsHostIfRelativeURL(urlString) {
|
|
// The first argument is the base URL to resolve against if the second argument is not absolute.
|
|
// As it only applies if the second argument is not absolute, we can use it to transform relative URLs into
|
|
// absolute ones using v1 as the host. If the URL is absolute (e.g. a filepicker one), then the base
|
|
// argument is just ignored
|
|
return new URL(urlString, settings.apis.v1.publicUrl).href
|
|
}
|