]>
Commit | Line | Data |
---|---|---|
22820226 C |
1 | import { isSignupAllowed, isSignupAllowedForCurrentIP } from '@server/helpers/signup' |
2 | import { getServerCommit } from '@server/helpers/utils' | |
3 | import { CONFIG, isEmailEnabled } from '@server/initializers/config' | |
4 | import { CONSTRAINTS_FIELDS, DEFAULT_THEME_NAME, PEERTUBE_VERSION } from '@server/initializers/constants' | |
5 | import { RegisteredExternalAuthConfig, RegisteredIdAndPassAuthConfig, ServerConfig } from '@shared/models' | |
6 | import { Hooks } from './plugins/hooks' | |
7 | import { PluginManager } from './plugins/plugin-manager' | |
8 | import { getThemeOrDefault } from './plugins/theme-utils' | |
c07902b9 | 9 | import { VideoTranscodingProfilesManager } from './transcoding/video-transcoding-profiles' |
22820226 C |
10 | |
11 | let serverCommit: string | |
12 | ||
13 | async function getServerConfig (ip?: string): Promise<ServerConfig> { | |
14 | if (serverCommit === undefined) serverCommit = await getServerCommit() | |
15 | ||
16 | const { allowed } = await Hooks.wrapPromiseFun( | |
17 | isSignupAllowed, | |
18 | { | |
19 | ip | |
20 | }, | |
21 | 'filter:api.user.signup.allowed.result' | |
22 | ) | |
23 | ||
24 | const allowedForCurrentIP = isSignupAllowedForCurrentIP(ip) | |
25 | const defaultTheme = getThemeOrDefault(CONFIG.THEME.DEFAULT, DEFAULT_THEME_NAME) | |
26 | ||
27 | return { | |
28 | instance: { | |
29 | name: CONFIG.INSTANCE.NAME, | |
30 | shortDescription: CONFIG.INSTANCE.SHORT_DESCRIPTION, | |
31 | isNSFW: CONFIG.INSTANCE.IS_NSFW, | |
32 | defaultNSFWPolicy: CONFIG.INSTANCE.DEFAULT_NSFW_POLICY, | |
33 | defaultClientRoute: CONFIG.INSTANCE.DEFAULT_CLIENT_ROUTE, | |
34 | customizations: { | |
35 | javascript: CONFIG.INSTANCE.CUSTOMIZATIONS.JAVASCRIPT, | |
36 | css: CONFIG.INSTANCE.CUSTOMIZATIONS.CSS | |
37 | } | |
38 | }, | |
39 | search: { | |
40 | remoteUri: { | |
41 | users: CONFIG.SEARCH.REMOTE_URI.USERS, | |
42 | anonymous: CONFIG.SEARCH.REMOTE_URI.ANONYMOUS | |
43 | }, | |
44 | searchIndex: { | |
45 | enabled: CONFIG.SEARCH.SEARCH_INDEX.ENABLED, | |
46 | url: CONFIG.SEARCH.SEARCH_INDEX.URL, | |
47 | disableLocalSearch: CONFIG.SEARCH.SEARCH_INDEX.DISABLE_LOCAL_SEARCH, | |
48 | isDefaultSearch: CONFIG.SEARCH.SEARCH_INDEX.IS_DEFAULT_SEARCH | |
49 | } | |
50 | }, | |
51 | plugin: { | |
52 | registered: getRegisteredPlugins(), | |
53 | registeredExternalAuths: getExternalAuthsPlugins(), | |
54 | registeredIdAndPassAuths: getIdAndPassAuthPlugins() | |
55 | }, | |
56 | theme: { | |
57 | registered: getRegisteredThemes(), | |
58 | default: defaultTheme | |
59 | }, | |
60 | email: { | |
61 | enabled: isEmailEnabled() | |
62 | }, | |
63 | contactForm: { | |
64 | enabled: CONFIG.CONTACT_FORM.ENABLED | |
65 | }, | |
66 | serverVersion: PEERTUBE_VERSION, | |
67 | serverCommit, | |
68 | signup: { | |
69 | allowed, | |
70 | allowedForCurrentIP, | |
71 | requiresEmailVerification: CONFIG.SIGNUP.REQUIRES_EMAIL_VERIFICATION | |
72 | }, | |
73 | transcoding: { | |
74 | hls: { | |
75 | enabled: CONFIG.TRANSCODING.HLS.ENABLED | |
76 | }, | |
77 | webtorrent: { | |
78 | enabled: CONFIG.TRANSCODING.WEBTORRENT.ENABLED | |
79 | }, | |
80 | enabledResolutions: getEnabledResolutions('vod'), | |
81 | profile: CONFIG.TRANSCODING.PROFILE, | |
82 | availableProfiles: VideoTranscodingProfilesManager.Instance.getAvailableProfiles('vod') | |
83 | }, | |
84 | live: { | |
85 | enabled: CONFIG.LIVE.ENABLED, | |
86 | ||
87 | allowReplay: CONFIG.LIVE.ALLOW_REPLAY, | |
88 | maxDuration: CONFIG.LIVE.MAX_DURATION, | |
89 | maxInstanceLives: CONFIG.LIVE.MAX_INSTANCE_LIVES, | |
90 | maxUserLives: CONFIG.LIVE.MAX_USER_LIVES, | |
91 | ||
92 | transcoding: { | |
93 | enabled: CONFIG.LIVE.TRANSCODING.ENABLED, | |
94 | enabledResolutions: getEnabledResolutions('live'), | |
95 | profile: CONFIG.LIVE.TRANSCODING.PROFILE, | |
96 | availableProfiles: VideoTranscodingProfilesManager.Instance.getAvailableProfiles('live') | |
97 | }, | |
98 | ||
99 | rtmp: { | |
100 | port: CONFIG.LIVE.RTMP.PORT | |
101 | } | |
102 | }, | |
103 | import: { | |
104 | videos: { | |
105 | http: { | |
106 | enabled: CONFIG.IMPORT.VIDEOS.HTTP.ENABLED | |
107 | }, | |
108 | torrent: { | |
109 | enabled: CONFIG.IMPORT.VIDEOS.TORRENT.ENABLED | |
110 | } | |
111 | } | |
112 | }, | |
113 | autoBlacklist: { | |
114 | videos: { | |
115 | ofUsers: { | |
116 | enabled: CONFIG.AUTO_BLACKLIST.VIDEOS.OF_USERS.ENABLED | |
117 | } | |
118 | } | |
119 | }, | |
120 | avatar: { | |
121 | file: { | |
122 | size: { | |
123 | max: CONSTRAINTS_FIELDS.ACTORS.IMAGE.FILE_SIZE.max | |
124 | }, | |
125 | extensions: CONSTRAINTS_FIELDS.ACTORS.IMAGE.EXTNAME | |
126 | } | |
127 | }, | |
128 | banner: { | |
129 | file: { | |
130 | size: { | |
131 | max: CONSTRAINTS_FIELDS.ACTORS.IMAGE.FILE_SIZE.max | |
132 | }, | |
133 | extensions: CONSTRAINTS_FIELDS.ACTORS.IMAGE.EXTNAME | |
134 | } | |
135 | }, | |
136 | video: { | |
137 | image: { | |
138 | extensions: CONSTRAINTS_FIELDS.VIDEOS.IMAGE.EXTNAME, | |
139 | size: { | |
140 | max: CONSTRAINTS_FIELDS.VIDEOS.IMAGE.FILE_SIZE.max | |
141 | } | |
142 | }, | |
143 | file: { | |
144 | extensions: CONSTRAINTS_FIELDS.VIDEOS.EXTNAME | |
145 | } | |
146 | }, | |
147 | videoCaption: { | |
148 | file: { | |
149 | size: { | |
150 | max: CONSTRAINTS_FIELDS.VIDEO_CAPTIONS.CAPTION_FILE.FILE_SIZE.max | |
151 | }, | |
152 | extensions: CONSTRAINTS_FIELDS.VIDEO_CAPTIONS.CAPTION_FILE.EXTNAME | |
153 | } | |
154 | }, | |
155 | user: { | |
156 | videoQuota: CONFIG.USER.VIDEO_QUOTA, | |
157 | videoQuotaDaily: CONFIG.USER.VIDEO_QUOTA_DAILY | |
158 | }, | |
159 | trending: { | |
160 | videos: { | |
161 | intervalDays: CONFIG.TRENDING.VIDEOS.INTERVAL_DAYS, | |
162 | algorithms: { | |
163 | enabled: CONFIG.TRENDING.VIDEOS.ALGORITHMS.ENABLED, | |
164 | default: CONFIG.TRENDING.VIDEOS.ALGORITHMS.DEFAULT | |
165 | } | |
166 | } | |
167 | }, | |
168 | tracker: { | |
169 | enabled: CONFIG.TRACKER.ENABLED | |
170 | }, | |
171 | ||
172 | followings: { | |
173 | instance: { | |
174 | autoFollowIndex: { | |
175 | indexUrl: CONFIG.FOLLOWINGS.INSTANCE.AUTO_FOLLOW_INDEX.INDEX_URL | |
176 | } | |
177 | } | |
178 | }, | |
179 | ||
180 | broadcastMessage: { | |
181 | enabled: CONFIG.BROADCAST_MESSAGE.ENABLED, | |
182 | message: CONFIG.BROADCAST_MESSAGE.MESSAGE, | |
183 | level: CONFIG.BROADCAST_MESSAGE.LEVEL, | |
184 | dismissable: CONFIG.BROADCAST_MESSAGE.DISMISSABLE | |
185 | } | |
186 | } | |
187 | } | |
188 | ||
189 | function getRegisteredThemes () { | |
190 | return PluginManager.Instance.getRegisteredThemes() | |
191 | .map(t => ({ | |
192 | name: t.name, | |
193 | version: t.version, | |
194 | description: t.description, | |
195 | css: t.css, | |
196 | clientScripts: t.clientScripts | |
197 | })) | |
198 | } | |
199 | ||
200 | function getRegisteredPlugins () { | |
201 | return PluginManager.Instance.getRegisteredPlugins() | |
202 | .map(p => ({ | |
203 | name: p.name, | |
204 | version: p.version, | |
205 | description: p.description, | |
206 | clientScripts: p.clientScripts | |
207 | })) | |
208 | } | |
209 | ||
1bcb03a1 C |
210 | function getEnabledResolutions (type: 'vod' | 'live') { |
211 | const transcoding = type === 'vod' | |
212 | ? CONFIG.TRANSCODING | |
213 | : CONFIG.LIVE.TRANSCODING | |
214 | ||
215 | return Object.keys(transcoding.RESOLUTIONS) | |
216 | .filter(key => transcoding.ENABLED && transcoding.RESOLUTIONS[key] === true) | |
217 | .map(r => parseInt(r, 10)) | |
218 | } | |
219 | ||
22820226 C |
220 | // --------------------------------------------------------------------------- |
221 | ||
222 | export { | |
223 | getServerConfig, | |
224 | getRegisteredThemes, | |
1bcb03a1 | 225 | getEnabledResolutions, |
22820226 C |
226 | getRegisteredPlugins |
227 | } | |
228 | ||
229 | // --------------------------------------------------------------------------- | |
230 | ||
231 | function getIdAndPassAuthPlugins () { | |
232 | const result: RegisteredIdAndPassAuthConfig[] = [] | |
233 | ||
234 | for (const p of PluginManager.Instance.getIdAndPassAuths()) { | |
235 | for (const auth of p.idAndPassAuths) { | |
236 | result.push({ | |
237 | npmName: p.npmName, | |
238 | name: p.name, | |
239 | version: p.version, | |
240 | authName: auth.authName, | |
241 | weight: auth.getWeight() | |
242 | }) | |
243 | } | |
244 | } | |
245 | ||
246 | return result | |
247 | } | |
248 | ||
249 | function getExternalAuthsPlugins () { | |
250 | const result: RegisteredExternalAuthConfig[] = [] | |
251 | ||
252 | for (const p of PluginManager.Instance.getExternalAuths()) { | |
253 | for (const auth of p.externalAuths) { | |
254 | result.push({ | |
255 | npmName: p.npmName, | |
256 | name: p.name, | |
257 | version: p.version, | |
258 | authName: auth.authName, | |
259 | authDisplayName: auth.authDisplayName() | |
260 | }) | |
261 | } | |
262 | } | |
263 | ||
264 | return result | |
265 | } |