X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fhelpers%2Fcustom-validators%2Fplugins.ts;h=63af91a44a7ec5dcef814fb7ef1da4d68c842234;hb=8d5e65349deebd499c0be10fe02d535a77d58ddb;hp=2fcdc581f68957dac55e1b5cc5723f19df80b50a;hpb=f023a19c3eeeea2b014b47fae522a62eab320048;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/helpers/custom-validators/plugins.ts b/server/helpers/custom-validators/plugins.ts index 2fcdc581f..63af91a44 100644 --- a/server/helpers/custom-validators/plugins.ts +++ b/server/helpers/custom-validators/plugins.ts @@ -40,7 +40,15 @@ function isPluginEngineValid (engine: any) { return exists(engine) && exists(engine.peertube) } -function isStaticDirectoriesValid (staticDirs: any) { +function isPluginHomepage (value: string) { + return exists(value) && (!value || isUrlValid(value)) +} + +function isPluginBugs (value: string) { + return exists(value) && (!value || isUrlValid(value)) +} + +function areStaticDirectoriesValid (staticDirs: any) { if (!exists(staticDirs) || typeof staticDirs !== 'object') return false for (const key of Object.keys(staticDirs)) { @@ -50,28 +58,43 @@ function isStaticDirectoriesValid (staticDirs: any) { return true } -function isClientScriptsValid (clientScripts: any[]) { +function areClientScriptsValid (clientScripts: any[]) { return isArray(clientScripts) && clientScripts.every(c => { return isSafePath(c.script) && isArray(c.scopes) }) } -function isCSSPathsValid (css: any[]) { +function areTranslationPathsValid (translations: any) { + if (!exists(translations) || typeof translations !== 'object') return false + + for (const key of Object.keys(translations)) { + if (!isSafePath(translations[key])) return false + } + + return true +} + +function areCSSPathsValid (css: any[]) { return isArray(css) && css.every(c => isSafePath(c)) } +function isThemeNameValid (name: string) { + return isPluginNameValid(name) +} + function isPackageJSONValid (packageJSON: PluginPackageJson, pluginType: PluginType) { return isNpmPluginNameValid(packageJSON.name) && isPluginDescriptionValid(packageJSON.description) && isPluginEngineValid(packageJSON.engine) && - isUrlValid(packageJSON.homepage) && + isPluginHomepage(packageJSON.homepage) && exists(packageJSON.author) && - isUrlValid(packageJSON.bugs) && + isPluginBugs(packageJSON.bugs) && (pluginType === PluginType.THEME || isSafePath(packageJSON.library)) && - isStaticDirectoriesValid(packageJSON.staticDirs) && - isCSSPathsValid(packageJSON.css) && - isClientScriptsValid(packageJSON.clientScripts) + areStaticDirectoriesValid(packageJSON.staticDirs) && + areCSSPathsValid(packageJSON.css) && + areClientScriptsValid(packageJSON.clientScripts) && + areTranslationPathsValid(packageJSON.translations) } function isLibraryCodeValid (library: any) { @@ -82,6 +105,8 @@ function isLibraryCodeValid (library: any) { export { isPluginTypeValid, isPackageJSONValid, + isThemeNameValid, + isPluginHomepage, isPluginVersionValid, isPluginNameValid, isPluginDescriptionValid,