From c8bac5396c4ed9ee82e0ef97b9051e9065d6a147 Mon Sep 17 00:00:00 2001 From: Durgaraj Karki Date: Tue, 21 Jun 2022 18:23:15 +0545 Subject: fixes video not played from defined parameters in embed service (#5023) * fixes video not played from defined parameters in embed service * adds parameters to the oembed services * Styling Co-authored-by: Chocobozzz --- server/controllers/services.ts | 44 +++++++++++++++++++++++++++++++++++++----- 1 file changed, 39 insertions(+), 5 deletions(-) (limited to 'server/controllers') 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 @@ import express from 'express' -import { EMBED_SIZE, PREVIEWS_SIZE, WEBSERVER, THUMBNAILS_SIZE } from '../initializers/constants' -import { asyncMiddleware, oembedValidator } from '../middlewares' -import { accountNameWithHostGetValidator } from '../middlewares/validators' import { MChannelSummary } from '@server/types/models' import { escapeHTML } from '@shared/core-utils/renderer' +import { EMBED_SIZE, PREVIEWS_SIZE, THUMBNAILS_SIZE, WEBSERVER } from '../initializers/constants' +import { asyncMiddleware, oembedValidator } from '../middlewares' +import { accountNameWithHostGetValidator } from '../middlewares/validators' const servicesRouter = express.Router() @@ -36,7 +36,7 @@ function generatePlaylistOEmbed (req: express.Request, res: express.Response) { const json = buildOEmbed({ channel: playlist.VideoChannel, title: playlist.name, - embedPath: playlist.getEmbedStaticPath(), + embedPath: playlist.getEmbedStaticPath() + buildPlayerURLQuery(req.query.url), previewPath: playlist.getThumbnailStaticPath(), previewSize: THUMBNAILS_SIZE, req @@ -51,7 +51,7 @@ function generateVideoOEmbed (req: express.Request, res: express.Response) { const json = buildOEmbed({ channel: video.VideoChannel, title: video.name, - embedPath: video.getEmbedStaticPath(), + embedPath: video.getEmbedStaticPath() + buildPlayerURLQuery(req.query.url), previewPath: video.getPreviewStaticPath(), previewSize: PREVIEWS_SIZE, req @@ -60,6 +60,40 @@ function generateVideoOEmbed (req: express.Request, res: express.Response) { return res.json(json) } +function buildPlayerURLQuery (inputQueryUrl: string) { + const allowedParameters = new Set([ + 'start', + 'stop', + 'loop', + 'autoplay', + 'muted', + 'controls', + 'controlBar', + 'title', + 'api', + 'warningTitle', + 'peertubeLink', + 'p2p', + 'subtitle', + 'bigPlayBackgroundColor', + 'mode', + 'foregroundColor' + ]) + + const params = new URLSearchParams() + + new URL(inputQueryUrl).searchParams.forEach((v, k) => { + if (allowedParameters.has(k)) { + params.append(k, v) + } + }) + + const stringQuery = params.toString() + if (!stringQuery) return '' + + return '?' + stringQuery +} + function buildOEmbed (options: { req: express.Request title: string -- cgit v1.2.3