mirror of
https://github.com/yu-i-i/overleaf-cep.git
synced 2026-06-06 15:49:01 +02:00
81f0807fc6
* [web] prepare filestore migration for Server Pro/CE * [history-v1] remove unused USER_FILES_BUCKET_NAME env var from script * [server-ce] tests: write default docker-compose.override.yml on startup * [server-ce] tests: extend access logging of host-admin for response * [server-ce] tests: test text and binary file upload * [server-ce] tests: add tests for filestore migration * [web] simplify feature gate for filestore/project-history-blobs logic Co-authored-by: Brian Gough <brian.gough@overleaf.com> * [server-ce] test: fix flaky test helper --------- Co-authored-by: Brian Gough <brian.gough@overleaf.com> GitOrigin-RevId: f89bdab2749e2b7a49d609e2eac6bf621c727966
115 lines
3.7 KiB
JavaScript
115 lines
3.7 KiB
JavaScript
const _ = require('lodash')
|
|
const Settings = require('@overleaf/settings')
|
|
|
|
const supportModuleAvailable = Settings.moduleImportSequence.includes('support')
|
|
|
|
const symbolPaletteModuleAvailable =
|
|
Settings.moduleImportSequence.includes('symbol-palette')
|
|
|
|
const trackChangesModuleAvailable =
|
|
Settings.moduleImportSequence.includes('track-changes')
|
|
|
|
/**
|
|
* @typedef {Object} Settings
|
|
* @property {Object | undefined} apis
|
|
* @property {Object | undefined} apis.linkedUrlProxy
|
|
* @property {string | undefined} apis.linkedUrlProxy.url
|
|
* @property {Object | undefined} apis.references
|
|
* @property {string | undefined} apis.references.url
|
|
* @property {boolean | undefined} enableGithubSync
|
|
* @property {boolean | undefined} enableGitBridge
|
|
* @property {boolean | undefined} enableHomepage
|
|
* @property {number} filestoreMigrationLevel
|
|
* @property {boolean | undefined} enableSaml
|
|
* @property {boolean | undefined} ldap
|
|
* @property {boolean | undefined} oauth
|
|
* @property {Object | undefined} overleaf
|
|
* @property {Object | undefined} overleaf.oauth
|
|
* @property {boolean | undefined} saml
|
|
*/
|
|
|
|
const Features = {
|
|
validateSettings() {
|
|
if (![0, 1, 2].includes(Settings.filestoreMigrationLevel)) {
|
|
throw new Error(
|
|
`invalid OVERLEAF_FILESTORE_MIGRATION_LEVEL=${Settings.filestoreMigrationLevel}, expected 0, 1 or 2`
|
|
)
|
|
}
|
|
},
|
|
|
|
/**
|
|
* @returns {boolean}
|
|
*/
|
|
externalAuthenticationSystemUsed() {
|
|
return (
|
|
(Boolean(Settings.ldap) && Boolean(Settings.ldap.enable)) ||
|
|
(Boolean(Settings.saml) && Boolean(Settings.saml.enable)) ||
|
|
Boolean(Settings.overleaf)
|
|
)
|
|
},
|
|
|
|
/**
|
|
* Whether a feature is enabled in the appliation's configuration
|
|
*
|
|
* @param {string} feature
|
|
* @returns {boolean}
|
|
*/
|
|
hasFeature(feature) {
|
|
switch (feature) {
|
|
case 'saas':
|
|
return Boolean(Settings.overleaf)
|
|
case 'homepage':
|
|
return Boolean(Settings.enableHomepage)
|
|
case 'registration-page':
|
|
return (
|
|
!Features.externalAuthenticationSystemUsed() ||
|
|
Boolean(Settings.overleaf)
|
|
)
|
|
case 'registration':
|
|
return Boolean(Settings.overleaf)
|
|
case 'chat':
|
|
return Boolean(Settings.disableChat) === false
|
|
case 'github-sync':
|
|
return Boolean(Settings.enableGithubSync)
|
|
case 'git-bridge':
|
|
return Boolean(Settings.enableGitBridge)
|
|
case 'oauth':
|
|
return Boolean(Settings.oauth)
|
|
case 'templates-server-pro':
|
|
return Boolean(Settings.templates?.user_id)
|
|
case 'affiliations':
|
|
case 'analytics':
|
|
return Boolean(_.get(Settings, ['apis', 'v1', 'url']))
|
|
case 'references':
|
|
return Boolean(_.get(Settings, ['apis', 'references', 'url']))
|
|
case 'saml':
|
|
return Boolean(Settings.enableSaml)
|
|
case 'linked-project-file':
|
|
return Boolean(Settings.enabledLinkedFileTypes.includes('project_file'))
|
|
case 'linked-project-output-file':
|
|
return Boolean(
|
|
Settings.enabledLinkedFileTypes.includes('project_output_file')
|
|
)
|
|
case 'link-url':
|
|
return Boolean(
|
|
_.get(Settings, ['apis', 'linkedUrlProxy', 'url']) &&
|
|
Settings.enabledLinkedFileTypes.includes('url')
|
|
)
|
|
case 'project-history-blobs':
|
|
return Settings.filestoreMigrationLevel > 0
|
|
case 'filestore':
|
|
return Settings.filestoreMigrationLevel < 2
|
|
case 'support':
|
|
return supportModuleAvailable
|
|
case 'symbol-palette':
|
|
return symbolPaletteModuleAvailable
|
|
case 'track-changes':
|
|
return trackChangesModuleAvailable
|
|
default:
|
|
throw new Error(`unknown feature: ${feature}`)
|
|
}
|
|
},
|
|
}
|
|
|
|
module.exports = Features
|