Merge pull request #3706 from overleaf/msm-jlm-configurable-text-extensions

New ADDITIONAL_TEXT_EXTENSIONS env to support extra editable files

GitOrigin-RevId: 03bec0a1a9dbd303754f0b90377d1b7d1ec3f528
This commit is contained in:
Timothée Alby 2021-03-29 11:19:54 +02:00 committed by Copybot
parent d346172819
commit b2b9a05e3c
5 changed files with 66 additions and 60 deletions

View file

@ -2,38 +2,10 @@ const fs = require('fs')
const Path = require('path') const Path = require('path')
const isUtf8 = require('utf-8-validate') const isUtf8 = require('utf-8-validate')
const { promisifyAll } = require('../../util/promises') const { promisifyAll } = require('../../util/promises')
const Settings = require('settings-sharelatex')
const FileTypeManager = { const FileTypeManager = {
TEXT_EXTENSIONS: [ TEXT_EXTENSIONS: Settings.textExtensions.map(ext => `.${ext}`),
'.tex',
'.latex',
'.sty',
'.cls',
'.bst',
'.bib',
'.bibtex',
'.txt',
'.tikz',
'.mtx',
'.rtex',
'.md',
'.asy',
'.latexmkrc',
'.lbx',
'.bbx',
'.cbx',
'.m',
'.lco',
'.dtx',
'.ins',
'.ist',
'.def',
'.clo',
'.ldf',
'.rmd',
'.lua',
'.gv'
],
IGNORE_EXTENSIONS: [ IGNORE_EXTENSIONS: [
'.dvi', '.dvi',

View file

@ -360,6 +360,7 @@ module.exports = function(webRouter, privateApiRouter, publicApiRouter) {
Settings.recaptcha != null ? Settings.recaptcha.siteKeyV3 : undefined, Settings.recaptcha != null ? Settings.recaptcha.siteKeyV3 : undefined,
recaptchaDisabled: recaptchaDisabled:
Settings.recaptcha != null ? Settings.recaptcha.disabled : undefined, Settings.recaptcha != null ? Settings.recaptcha.disabled : undefined,
textExtensions: Settings.textExtensions,
validRootDocExtensions: Settings.validRootDocExtensions, validRootDocExtensions: Settings.validRootDocExtensions,
sentryAllowedOriginRegex: Settings.sentry.allowedOriginRegex, sentryAllowedOriginRegex: Settings.sentry.allowedOriginRegex,
sentryDsn: Settings.sentry.publicDSN, sentryDsn: Settings.sentry.publicDSN,

View file

@ -32,6 +32,43 @@ intFromEnv = (name, defaultValue) ->
throw new Error("Bad default integer value for setting: #{name}, #{defaultValue}") throw new Error("Bad default integer value for setting: #{name}, #{defaultValue}")
parseInt(process.env[name], 10) || defaultValue parseInt(process.env[name], 10) || defaultValue
defaultTextExtensions = [
'tex',
'latex',
'sty',
'cls',
'bst',
'bib',
'bibtex',
'txt',
'tikz',
'mtx',
'rtex',
'md',
'asy',
'latexmkrc',
'lbx',
'bbx',
'cbx',
'm',
'lco',
'dtx',
'ins',
'ist',
'def',
'clo',
'ldf',
'rmd',
'lua',
'gv'
]
parseTextExtensions = (extensions) ->
if extensions
extensions.split(',').map((ext) => ext.trim())
else
[]
module.exports = settings = module.exports = settings =
allowAnonymousReadAndWriteSharing: allowAnonymousReadAndWriteSharing:
@ -641,6 +678,8 @@ module.exports = settings =
compileBodySizeLimitMb: process.env['COMPILE_BODY_SIZE_LIMIT_MB'] or 5 compileBodySizeLimitMb: process.env['COMPILE_BODY_SIZE_LIMIT_MB'] or 5
textExtensions: defaultTextExtensions.concat(parseTextExtensions(process.env["ADDITIONAL_TEXT_EXTENSIONS"]))
validRootDocExtensions: ['tex', 'Rtex', 'ltx'] validRootDocExtensions: ['tex', 'Rtex', 'ltx']
emailConfirmationDisabled: (process.env['EMAIL_CONFIRMATION_DISABLED'] == "true") or false emailConfirmationDisabled: (process.env['EMAIL_CONFIRMATION_DISABLED'] == "true") or false

View file

@ -16,36 +16,7 @@ export default App.controller('BinaryFileController', function(
const TAIL_OF_URL_LENGTH = const TAIL_OF_URL_LENGTH =
MAX_URL_LENGTH - FRONT_OF_URL_LENGTH - FILLER.length MAX_URL_LENGTH - FRONT_OF_URL_LENGTH - FILLER.length
const textExtensions = [ const textExtensions = window.ExposedSettings.textExtensions
'tex',
'latex',
'sty',
'cls',
'bst',
'bib',
'bibtex',
'txt',
'tikz',
'mtx',
'rtex',
'md',
'asy',
'latexmkrc',
'lbx',
'bbx',
'cbx',
'm',
'lco',
'dtx',
'ins',
'ist',
'def',
'clo',
'ldf',
'rmd',
'lua',
'gv'
]
const imageExtensions = ['png', 'jpg', 'jpeg', 'gif'] const imageExtensions = ['png', 'jpg', 'jpeg', 'gif']
const previewableExtensions = [] const previewableExtensions = []

View file

@ -0,0 +1,23 @@
const chai = require('chai')
const { expect } = chai
function clearSettingsCache() {
delete require.cache[
require.resolve('../../../../config/settings.defaults.coffee')
]
const settingsDeps = Object.keys(require.cache).filter(x =>
x.includes('/settings-sharelatex/')
)
settingsDeps.forEach(dep => delete require.cache[dep])
}
describe('settings.defaults', function() {
it('additional text extensions can be added via config', function() {
clearSettingsCache()
process.env.ADDITIONAL_TEXT_EXTENSIONS = 'abc, xyz'
const settings = require('settings-sharelatex')
expect(settings.textExtensions).to.include('tex') // from the default list
expect(settings.textExtensions).to.include('abc')
expect(settings.textExtensions).to.include('xyz')
})
})