74 lines
2.3 KiB
JavaScript
74 lines
2.3 KiB
JavaScript
const marked = require('marked')
|
|
const querystring = require('querystring')
|
|
|
|
const { translate } = require('./i18n/i18n')
|
|
|
|
// Parse markdown text
|
|
module.exports.markdown = (content = '') => {
|
|
if (!content.trim()) {
|
|
return ''
|
|
}
|
|
return marked(removeInvalidDataURL(content), {sanitize: true})
|
|
}
|
|
|
|
// A handy debugging function we can use to sort of "console.log" our data
|
|
module.exports.dump = (obj) => JSON.stringify(obj, null, 2)
|
|
|
|
module.exports.formatMetaTitle = (title, localeCode = 'en-US') => {
|
|
if (!title) {
|
|
return translate('defaultTitle', localeCode)
|
|
}
|
|
return `${title.charAt(0).toUpperCase()}${title.slice(1)} — ${translate('defaultTitle', localeCode)}`
|
|
}
|
|
|
|
function isCustomCredentials (settings) {
|
|
const spaceId = process.env.CONTENTFUL_SPACE_ID
|
|
const deliveryToken = process.env.CONTENTFUL_DELIVERY_TOKEN
|
|
const previewToken = process.env.CONTENTFUL_PREVIEW_TOKEN
|
|
|
|
return settings.spaceId !== spaceId ||
|
|
settings.deliveryToken !== deliveryToken ||
|
|
settings.previewToken !== previewToken
|
|
}
|
|
|
|
function cleanupQueryParameters (query) {
|
|
const cleanQuery = Object.assign({}, query)
|
|
delete cleanQuery.space_id
|
|
delete cleanQuery.delivery_token
|
|
delete cleanQuery.preview_token
|
|
delete cleanQuery.reset
|
|
return cleanQuery
|
|
}
|
|
|
|
function updateSettingsQuery (request, response, settings) {
|
|
const cleanQuery = cleanupQueryParameters(request.query)
|
|
|
|
let settingsQuery = Object.assign({}, cleanQuery, {
|
|
editorial_features: settings.editorialFeatures ? 'enabled' : 'disabled'
|
|
})
|
|
|
|
if (isCustomCredentials(settings)) {
|
|
settingsQuery = Object.assign(settingsQuery, {
|
|
space_id: settings.spaceId,
|
|
delivery_token: settings.deliveryToken,
|
|
preview_token: settings.previewToken
|
|
})
|
|
}
|
|
|
|
const settingsQs = querystring.stringify(settingsQuery)
|
|
response.locals.queryStringSettings = settingsQs ? `?${settingsQs}` : ''
|
|
}
|
|
|
|
module.exports.isCustomCredentials = isCustomCredentials
|
|
module.exports.cleanupQueryParameters = cleanupQueryParameters
|
|
module.exports.updateSettingsQuery = updateSettingsQuery
|
|
|
|
/**
|
|
* Evil users might try to add base64 url data to execute js code
|
|
* so we should purge any potentially harmful data to mitigate risk
|
|
*/
|
|
function removeInvalidDataURL (content) {
|
|
let regex = /data:\S+;base64\S*/gm
|
|
return content.replace(regex, '#')
|
|
}
|