]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - shared/models/server/server-config.model.ts
8c0e21621aa2c9617ba846763ae3251fb2d34152
[github/Chocobozzz/PeerTube.git] / shared / models / server / server-config.model.ts
1 import { VideoPrivacy } from '../videos/video-privacy.enum'
2 import { ClientScriptJSON } from '../plugins/plugin-package-json.model'
3 import { NSFWPolicyType } from '../videos/nsfw-policy.type'
4 import { BroadcastMessageLevel } from './broadcast-message-level.type'
5
6 export interface ServerConfigPlugin {
7 name: string
8 version: string
9 description: string
10 clientScripts: { [name: string]: ClientScriptJSON }
11 }
12
13 export interface ServerConfigTheme extends ServerConfigPlugin {
14 css: string[]
15 }
16
17 export interface RegisteredExternalAuthConfig {
18 npmName: string
19 name: string
20 version: string
21 authName: string
22 authDisplayName: string
23 }
24
25 export interface RegisteredIdAndPassAuthConfig {
26 npmName: string
27 name: string
28 version: string
29 authName: string
30 weight: number
31 }
32
33 export interface ServerConfig {
34 serverVersion: string
35 serverCommit?: string
36
37 client: {
38 videos: {
39 miniature: {
40 preferAuthorDisplayName: boolean
41 }
42 }
43
44 menu: {
45 login: {
46 redirectOnSingleExternalAuth: boolean
47 }
48 }
49 }
50
51 defaults: {
52 publish: {
53 downloadEnabled: boolean
54 commentsEnabled: boolean
55 privacy: VideoPrivacy
56 licence: number
57 }
58
59 p2p: {
60 webapp: {
61 enabled: boolean
62 }
63
64 embed: {
65 enabled: boolean
66 }
67 }
68 }
69
70 webadmin: {
71 configuration: {
72 edition: {
73 allowed: boolean
74 }
75 }
76 }
77
78 instance: {
79 name: string
80 shortDescription: string
81 isNSFW: boolean
82 defaultNSFWPolicy: NSFWPolicyType
83 defaultClientRoute: string
84 customizations: {
85 javascript: string
86 css: string
87 }
88 }
89
90 search: {
91 remoteUri: {
92 users: boolean
93 anonymous: boolean
94 }
95
96 searchIndex: {
97 enabled: boolean
98 url: string
99 disableLocalSearch: boolean
100 isDefaultSearch: boolean
101 }
102 }
103
104 plugin: {
105 registered: ServerConfigPlugin[]
106
107 registeredExternalAuths: RegisteredExternalAuthConfig[]
108
109 registeredIdAndPassAuths: RegisteredIdAndPassAuthConfig[]
110 }
111
112 theme: {
113 registered: ServerConfigTheme[]
114 default: string
115 }
116
117 email: {
118 enabled: boolean
119 }
120
121 contactForm: {
122 enabled: boolean
123 }
124
125 signup: {
126 allowed: boolean
127 allowedForCurrentIP: boolean
128 requiresEmailVerification: boolean
129 minimumAge: number
130 }
131
132 transcoding: {
133 hls: {
134 enabled: boolean
135 }
136
137 webtorrent: {
138 enabled: boolean
139 }
140
141 enabledResolutions: number[]
142
143 profile: string
144 availableProfiles: string[]
145 }
146
147 live: {
148 enabled: boolean
149
150 maxDuration: number
151 maxInstanceLives: number
152 maxUserLives: number
153 allowReplay: boolean
154
155 transcoding: {
156 enabled: boolean
157
158 enabledResolutions: number[]
159
160 profile: string
161 availableProfiles: string[]
162 }
163
164 rtmp: {
165 port: number
166 }
167 }
168
169 import: {
170 videos: {
171 http: {
172 enabled: boolean
173 }
174 torrent: {
175 enabled: boolean
176 }
177 }
178 }
179
180 autoBlacklist: {
181 videos: {
182 ofUsers: {
183 enabled: boolean
184 }
185 }
186 }
187
188 avatar: {
189 file: {
190 size: {
191 max: number
192 }
193 extensions: string[]
194 }
195 }
196
197 banner: {
198 file: {
199 size: {
200 max: number
201 }
202 extensions: string[]
203 }
204 }
205
206 video: {
207 image: {
208 size: {
209 max: number
210 }
211 extensions: string[]
212 }
213 file: {
214 extensions: string[]
215 }
216 }
217
218 videoCaption: {
219 file: {
220 size: {
221 max: number
222 }
223 extensions: string[]
224 }
225 }
226
227 user: {
228 videoQuota: number
229 videoQuotaDaily: number
230 }
231
232 videoChannels: {
233 maxPerUser: number
234 }
235
236 trending: {
237 videos: {
238 intervalDays: number
239 algorithms: {
240 enabled: string[]
241 default: string
242 }
243 }
244 }
245
246 tracker: {
247 enabled: boolean
248 }
249
250 followings: {
251 instance: {
252 autoFollowIndex: {
253 indexUrl: string
254 }
255 }
256 }
257
258 broadcastMessage: {
259 enabled: boolean
260 message: string
261 level: BroadcastMessageLevel
262 dismissable: boolean
263 }
264
265 homepage: {
266 enabled: boolean
267 }
268 }
269
270 export type HTMLServerConfig = Omit<ServerConfig, 'signup'>