]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - server/tests/fixtures/peertube-plugin-test/main.js
f62f6a43570bd660b3a6a6d852b5b1bacdbafd52
[github/Chocobozzz/PeerTube.git] / server / tests / fixtures / peertube-plugin-test / main.js
1 async function register ({ registerHook, registerSetting, settingsManager, storageManager, peertubeHelpers }) {
2 const actionHooks = [
3 'action:application.listening',
4
5 'action:api.video.updated',
6 'action:api.video.deleted',
7 'action:api.video.uploaded',
8 'action:api.video.viewed',
9
10 'action:api.live-video.created',
11
12 'action:api.video-thread.created',
13 'action:api.video-comment-reply.created',
14 'action:api.video-comment.deleted',
15
16 'action:api.video-caption.created',
17 'action:api.video-caption.deleted',
18
19 'action:api.user.blocked',
20 'action:api.user.unblocked',
21 'action:api.user.registered',
22 'action:api.user.created',
23 'action:api.user.deleted',
24 'action:api.user.updated',
25 'action:api.user.oauth2-got-token',
26
27 'action:api.video-playlist-element.created'
28 ]
29
30 for (const h of actionHooks) {
31 registerHook({
32 target: h,
33 handler: () => peertubeHelpers.logger.debug('Run hook %s.', h)
34 })
35 }
36
37 registerHook({
38 target: 'filter:api.videos.list.params',
39 handler: obj => addToCount(obj)
40 })
41
42 registerHook({
43 target: 'filter:api.videos.list.result',
44 handler: obj => addToTotal(obj)
45 })
46
47 registerHook({
48 target: 'filter:api.video-playlist.videos.list.params',
49 handler: obj => addToCount(obj)
50 })
51
52 registerHook({
53 target: 'filter:api.video-playlist.videos.list.result',
54 handler: obj => addToTotal(obj)
55 })
56
57 registerHook({
58 target: 'filter:api.accounts.videos.list.params',
59 handler: obj => addToCount(obj)
60 })
61
62 registerHook({
63 target: 'filter:api.accounts.videos.list.result',
64 handler: obj => addToTotal(obj, 2)
65 })
66
67 registerHook({
68 target: 'filter:api.video-channels.videos.list.params',
69 handler: obj => addToCount(obj, 3)
70 })
71
72 registerHook({
73 target: 'filter:api.video-channels.videos.list.result',
74 handler: obj => addToTotal(obj, 3)
75 })
76
77 registerHook({
78 target: 'filter:api.user.me.videos.list.params',
79 handler: obj => addToCount(obj, 4)
80 })
81
82 registerHook({
83 target: 'filter:api.user.me.videos.list.result',
84 handler: obj => addToTotal(obj, 4)
85 })
86
87 registerHook({
88 target: 'filter:api.video.get.result',
89 handler: video => {
90 video.name += ' <3'
91
92 return video
93 }
94 })
95
96 for (const hook of [ 'filter:api.video.upload.accept.result', 'filter:api.live-video.create.accept.result' ]) {
97 registerHook({
98 target: hook,
99 handler: ({ accepted }, { videoBody, liveVideoBody }) => {
100 if (!accepted) return { accepted: false }
101
102 const name = videoBody
103 ? videoBody.name
104 : liveVideoBody.name
105
106 if (name.indexOf('bad word') !== -1) return { accepted: false, errorMessage: 'bad word' }
107
108 return { accepted: true }
109 }
110 })
111 }
112
113 registerHook({
114 target: 'filter:api.video.pre-import-url.accept.result',
115 handler: ({ accepted }, { videoImportBody }) => {
116 if (!accepted) return { accepted: false }
117 if (videoImportBody.targetUrl.includes('bad')) return { accepted: false, errorMessage: 'bad target url' }
118
119 return { accepted: true }
120 }
121 })
122
123 registerHook({
124 target: 'filter:api.video.pre-import-torrent.accept.result',
125 handler: ({ accepted }, { videoImportBody }) => {
126 if (!accepted) return { accepted: false }
127 if (videoImportBody.name.includes('bad torrent')) return { accepted: false, errorMessage: 'bad torrent' }
128
129 return { accepted: true }
130 }
131 })
132
133 registerHook({
134 target: 'filter:api.video.post-import-url.accept.result',
135 handler: ({ accepted }, { video }) => {
136 if (!accepted) return { accepted: false }
137 if (video.name.includes('bad word')) return { accepted: false, errorMessage: 'bad word' }
138
139 return { accepted: true }
140 }
141 })
142
143 registerHook({
144 target: 'filter:api.video.post-import-torrent.accept.result',
145 handler: ({ accepted }, { video }) => {
146 if (!accepted) return { accepted: false }
147 if (video.name.includes('bad word')) return { accepted: false, errorMessage: 'bad word' }
148
149 return { accepted: true }
150 }
151 })
152
153 registerHook({
154 target: 'filter:api.video-thread.create.accept.result',
155 handler: ({ accepted }, { commentBody }) => checkCommentBadWord(accepted, commentBody)
156 })
157
158 registerHook({
159 target: 'filter:api.video-comment-reply.create.accept.result',
160 handler: ({ accepted }, { commentBody }) => checkCommentBadWord(accepted, commentBody)
161 })
162
163 registerHook({
164 target: 'filter:api.video-threads.list.params',
165 handler: obj => addToCount(obj)
166 })
167
168 registerHook({
169 target: 'filter:api.video-threads.list.result',
170 handler: obj => addToTotal(obj)
171 })
172
173 registerHook({
174 target: 'filter:api.video-thread-comments.list.result',
175 handler: obj => {
176 obj.data.forEach(c => c.text += ' <3')
177
178 return obj
179 }
180 })
181
182 registerHook({
183 target: 'filter:video.auto-blacklist.result',
184 handler: (blacklisted, { video }) => {
185 if (blacklisted) return true
186 if (video.name.includes('please blacklist me')) return true
187
188 return false
189 }
190 })
191
192 registerHook({
193 target: 'filter:api.user.signup.allowed.result',
194 handler: (result, params) => {
195 if (params && params.body && params.body.email && params.body.email.includes('jma')) {
196 return { allowed: false, errorMessage: 'No jma' }
197 }
198
199 return result
200 }
201 })
202
203 registerHook({
204 target: 'filter:api.download.torrent.allowed.result',
205 handler: (result, params) => {
206 if (params && params.downloadName.includes('bad torrent')) {
207 return { allowed: false, errorMessage: 'Liu Bei' }
208 }
209
210 return result
211 }
212 })
213
214 registerHook({
215 target: 'filter:api.download.video.allowed.result',
216 handler: (result, params) => {
217 if (params && !params.streamingPlaylist && params.video.name.includes('bad file')) {
218 return { allowed: false, errorMessage: 'Cao Cao' }
219 }
220
221 if (params && params.streamingPlaylist && params.video.name.includes('bad playlist file')) {
222 return { allowed: false, errorMessage: 'Sun Jian' }
223 }
224
225 return result
226 }
227 })
228
229 registerHook({
230 target: 'filter:html.embed.video.allowed.result',
231 handler: (result, params) => {
232 return {
233 allowed: false,
234 html: 'Lu Bu'
235 }
236 }
237 })
238
239 registerHook({
240 target: 'filter:html.embed.video-playlist.allowed.result',
241 handler: (result, params) => {
242 return {
243 allowed: false,
244 html: 'Diao Chan'
245 }
246 }
247 })
248
249 registerHook({
250 target: 'filter:api.server.stats.get.result',
251 handler: (result) => {
252 return { ...result, customStats: 14 }
253 }
254 })
255
256 registerHook({
257 target: 'filter:job-queue.process.params',
258 handler: (object, context) => {
259 peertubeHelpers.logger.debug('TOTO.', { object, context })
260
261 if (context.type !== 'video-studio-edition') return object
262
263 object.data.tasks = [
264 {
265 name: 'cut',
266 options: {
267 start: 0,
268 end: 1
269 }
270 }
271 ]
272
273 return object
274 }
275 })
276
277 // Upload/import/live attributes
278 for (const target of [
279 'filter:api.video.upload.video-attribute.result',
280 'filter:api.video.import-url.video-attribute.result',
281 'filter:api.video.import-torrent.video-attribute.result',
282 'filter:api.video.live.video-attribute.result'
283 ]) {
284 registerHook({
285 target,
286 handler: (result) => {
287 return { ...result, description: result.description + ' - ' + target }
288 }
289 })
290 }
291
292 {
293 const filterHooks = [
294 'filter:api.search.videos.local.list.params',
295 'filter:api.search.videos.local.list.result',
296 'filter:api.search.videos.index.list.params',
297 'filter:api.search.videos.index.list.result',
298 'filter:api.search.video-channels.local.list.params',
299 'filter:api.search.video-channels.local.list.result',
300 'filter:api.search.video-channels.index.list.params',
301 'filter:api.search.video-channels.index.list.result',
302 'filter:api.search.video-playlists.local.list.params',
303 'filter:api.search.video-playlists.local.list.result',
304 'filter:api.search.video-playlists.index.list.params',
305 'filter:api.search.video-playlists.index.list.result',
306
307 'filter:api.overviews.videos.list.params',
308 'filter:api.overviews.videos.list.result',
309
310 'filter:job-queue.process.params',
311 'filter:job-queue.process.result'
312 ]
313
314 for (const h of filterHooks) {
315 registerHook({
316 target: h,
317 handler: (obj) => {
318 peertubeHelpers.logger.debug('Run hook %s.', h)
319
320 return obj
321 }
322 })
323 }
324 }
325 }
326
327 async function unregister () {
328 return
329 }
330
331 module.exports = {
332 register,
333 unregister
334 }
335
336 // ############################################################################
337
338 function addToCount (obj, amount = 1) {
339 return Object.assign({}, obj, { count: obj.count + amount })
340 }
341
342 function addToTotal (result, amount = 1) {
343 return {
344 data: result.data,
345 total: result.total + amount
346 }
347 }
348
349 function checkCommentBadWord (accepted, commentBody) {
350 if (!accepted) return { accepted: false }
351 if (commentBody.text.indexOf('bad word') !== -1) return { accepted: false, errorMessage: 'bad word '}
352
353 return { accepted: true }
354 }