]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - server/helpers/custom-validators/plugins.ts
Add welcome modal
[github/Chocobozzz/PeerTube.git] / server / helpers / custom-validators / plugins.ts
index 2fcdc581f68957dac55e1b5cc5723f19df80b50a..63af91a44a7ec5dcef814fb7ef1da4d68c842234 100644 (file)
@@ -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,