]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - shared/models/server/server-config.model.ts
Instance homepage support (#4007)
[github/Chocobozzz/PeerTube.git] / shared / models / server / server-config.model.ts
index c259a849a4b6e82e2b9f084d6c8665cd0f80afed..1667bc0e2add769ce8c8e9473c460ac3f94cb4f9 100644 (file)
@@ -1,13 +1,34 @@
-import { NSFWPolicyType } from '../videos/nsfw-policy.type'
 import { ClientScript } from '../plugins/plugin-package-json.model'
+import { NSFWPolicyType } from '../videos/nsfw-policy.type'
+import { BroadcastMessageLevel } from './broadcast-message-level.type'
 
-export type ServerConfigPlugin = {
+export interface ServerConfigPlugin {
   name: string
   version: string
   description: string
   clientScripts: { [name: string]: ClientScript }
 }
 
+export interface ServerConfigTheme extends ServerConfigPlugin {
+  css: string[]
+}
+
+export interface RegisteredExternalAuthConfig {
+  npmName: string
+  name: string
+  version: string
+  authName: string
+  authDisplayName: string
+}
+
+export interface RegisteredIdAndPassAuthConfig {
+  npmName: string
+  name: string
+  version: string
+  authName: string
+  weight: number
+}
+
 export interface ServerConfig {
   serverVersion: string
   serverCommit?: string
@@ -15,16 +36,41 @@ export interface ServerConfig {
   instance: {
     name: string
     shortDescription: string
-    defaultClientRoute: string
     isNSFW: boolean
     defaultNSFWPolicy: NSFWPolicyType
+    defaultClientRoute: string
     customizations: {
       javascript: string
       css: string
     }
   }
 
-  plugins: ServerConfigPlugin[]
+  search: {
+    remoteUri: {
+      users: boolean
+      anonymous: boolean
+    }
+
+    searchIndex: {
+      enabled: boolean
+      url: string
+      disableLocalSearch: boolean
+      isDefaultSearch: boolean
+    }
+  }
+
+  plugin: {
+    registered: ServerConfigPlugin[]
+
+    registeredExternalAuths: RegisteredExternalAuthConfig[]
+
+    registeredIdAndPassAuths: RegisteredIdAndPassAuthConfig[]
+  }
+
+  theme: {
+    registered: ServerConfigTheme[]
+    default: string
+  }
 
   email: {
     enabled: boolean
@@ -35,7 +81,7 @@ export interface ServerConfig {
   }
 
   signup: {
-    allowed: boolean,
+    allowed: boolean
     allowedForCurrentIP: boolean
     requiresEmailVerification: boolean
   }
@@ -45,7 +91,36 @@ export interface ServerConfig {
       enabled: boolean
     }
 
+    webtorrent: {
+      enabled: boolean
+    }
+
     enabledResolutions: number[]
+
+    profile: string
+    availableProfiles: string[]
+  }
+
+  live: {
+    enabled: boolean
+
+    maxDuration: number
+    maxInstanceLives: number
+    maxUserLives: number
+    allowReplay: boolean
+
+    transcoding: {
+      enabled: boolean
+
+      enabledResolutions: number[]
+
+      profile: string
+      availableProfiles: string[]
+    }
+
+    rtmp: {
+      port: number
+    }
   }
 
   import: {
@@ -76,13 +151,22 @@ export interface ServerConfig {
     }
   }
 
+  banner: {
+    file: {
+      size: {
+        max: number
+      }
+      extensions: string[]
+    }
+  }
+
   video: {
     image: {
       size: {
         max: number
       }
       extensions: string[]
-    },
+    }
     file: {
       extensions: string[]
     }
@@ -92,7 +176,7 @@ export interface ServerConfig {
     file: {
       size: {
         max: number
-      },
+      }
       extensions: string[]
     }
   }
@@ -105,10 +189,35 @@ export interface ServerConfig {
   trending: {
     videos: {
       intervalDays: number
+      algorithms: {
+        enabled: string[]
+        default: string
+      }
     }
   }
 
   tracker: {
     enabled: boolean
   }
+
+  followings: {
+    instance: {
+      autoFollowIndex: {
+        indexUrl: string
+      }
+    }
+  }
+
+  broadcastMessage: {
+    enabled: boolean
+    message: string
+    level: BroadcastMessageLevel
+    dismissable: boolean
+  }
+
+  homepage: {
+    enabled: boolean
+  }
 }
+
+export type HTMLServerConfig = Omit<ServerConfig, 'signup'>