diff options
Diffstat (limited to 'server/controllers/services.ts')
-rw-r--r-- | server/controllers/services.ts | 44 |
1 files changed, 39 insertions, 5 deletions
diff --git a/server/controllers/services.ts b/server/controllers/services.ts index 9151e1b04..70d08ab69 100644 --- a/server/controllers/services.ts +++ b/server/controllers/services.ts | |||
@@ -1,9 +1,9 @@ | |||
1 | import express from 'express' | 1 | import express from 'express' |
2 | import { EMBED_SIZE, PREVIEWS_SIZE, WEBSERVER, THUMBNAILS_SIZE } from '../initializers/constants' | ||
3 | import { asyncMiddleware, oembedValidator } from '../middlewares' | ||
4 | import { accountNameWithHostGetValidator } from '../middlewares/validators' | ||
5 | import { MChannelSummary } from '@server/types/models' | 2 | import { MChannelSummary } from '@server/types/models' |
6 | import { escapeHTML } from '@shared/core-utils/renderer' | 3 | import { escapeHTML } from '@shared/core-utils/renderer' |
4 | import { EMBED_SIZE, PREVIEWS_SIZE, THUMBNAILS_SIZE, WEBSERVER } from '../initializers/constants' | ||
5 | import { asyncMiddleware, oembedValidator } from '../middlewares' | ||
6 | import { accountNameWithHostGetValidator } from '../middlewares/validators' | ||
7 | 7 | ||
8 | const servicesRouter = express.Router() | 8 | const servicesRouter = express.Router() |
9 | 9 | ||
@@ -36,7 +36,7 @@ function generatePlaylistOEmbed (req: express.Request, res: express.Response) { | |||
36 | const json = buildOEmbed({ | 36 | const json = buildOEmbed({ |
37 | channel: playlist.VideoChannel, | 37 | channel: playlist.VideoChannel, |
38 | title: playlist.name, | 38 | title: playlist.name, |
39 | embedPath: playlist.getEmbedStaticPath(), | 39 | embedPath: playlist.getEmbedStaticPath() + buildPlayerURLQuery(req.query.url), |
40 | previewPath: playlist.getThumbnailStaticPath(), | 40 | previewPath: playlist.getThumbnailStaticPath(), |
41 | previewSize: THUMBNAILS_SIZE, | 41 | previewSize: THUMBNAILS_SIZE, |
42 | req | 42 | req |
@@ -51,7 +51,7 @@ function generateVideoOEmbed (req: express.Request, res: express.Response) { | |||
51 | const json = buildOEmbed({ | 51 | const json = buildOEmbed({ |
52 | channel: video.VideoChannel, | 52 | channel: video.VideoChannel, |
53 | title: video.name, | 53 | title: video.name, |
54 | embedPath: video.getEmbedStaticPath(), | 54 | embedPath: video.getEmbedStaticPath() + buildPlayerURLQuery(req.query.url), |
55 | previewPath: video.getPreviewStaticPath(), | 55 | previewPath: video.getPreviewStaticPath(), |
56 | previewSize: PREVIEWS_SIZE, | 56 | previewSize: PREVIEWS_SIZE, |
57 | req | 57 | req |
@@ -60,6 +60,40 @@ function generateVideoOEmbed (req: express.Request, res: express.Response) { | |||
60 | return res.json(json) | 60 | return res.json(json) |
61 | } | 61 | } |
62 | 62 | ||
63 | function buildPlayerURLQuery (inputQueryUrl: string) { | ||
64 | const allowedParameters = new Set([ | ||
65 | 'start', | ||
66 | 'stop', | ||
67 | 'loop', | ||
68 | 'autoplay', | ||
69 | 'muted', | ||
70 | 'controls', | ||
71 | 'controlBar', | ||
72 | 'title', | ||
73 | 'api', | ||
74 | 'warningTitle', | ||
75 | 'peertubeLink', | ||
76 | 'p2p', | ||
77 | 'subtitle', | ||
78 | 'bigPlayBackgroundColor', | ||
79 | 'mode', | ||
80 | 'foregroundColor' | ||
81 | ]) | ||
82 | |||
83 | const params = new URLSearchParams() | ||
84 | |||
85 | new URL(inputQueryUrl).searchParams.forEach((v, k) => { | ||
86 | if (allowedParameters.has(k)) { | ||
87 | params.append(k, v) | ||
88 | } | ||
89 | }) | ||
90 | |||
91 | const stringQuery = params.toString() | ||
92 | if (!stringQuery) return '' | ||
93 | |||
94 | return '?' + stringQuery | ||
95 | } | ||
96 | |||
63 | function buildOEmbed (options: { | 97 | function buildOEmbed (options: { |
64 | req: express.Request | 98 | req: express.Request |
65 | title: string | 99 | title: string |