X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fcontrollers%2Fservices.ts;h=cabcbc00b440efb8a2f0d18156561f3c3dbccc22;hb=42b40636991b97fe818007fab19091764fc5db73;hp=189e1651bae8d8e03d9851714afb5df7912fc8f6;hpb=dc48fdbe68e9dd3a3a6028181e61d8595d98e654;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/controllers/services.ts b/server/controllers/services.ts index 189e1651b..cabcbc00b 100644 --- a/server/controllers/services.ts +++ b/server/controllers/services.ts @@ -1,9 +1,9 @@ -import * as 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 express from 'express' 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 @@ -78,17 +112,18 @@ function buildOEmbed (options: { const maxWidth = parseInt(req.query.maxwidth, 10) const embedUrl = webserverUrl + embedPath - let embedWidth = EMBED_SIZE.width - let embedHeight = EMBED_SIZE.height const embedTitle = escapeHTML(title) let thumbnailUrl = previewPath ? webserverUrl + previewPath : undefined - if (maxHeight < embedHeight) embedHeight = maxHeight + let embedWidth = EMBED_SIZE.width if (maxWidth < embedWidth) embedWidth = maxWidth + let embedHeight = EMBED_SIZE.height + if (maxHeight < embedHeight) embedHeight = maxHeight + // Our thumbnail is too big for the consumer if ( (maxHeight !== undefined && maxHeight < previewSize.height) || @@ -97,7 +132,7 @@ function buildOEmbed (options: { thumbnailUrl = undefined } - const html = `` const json: any = { @@ -106,7 +141,7 @@ function buildOEmbed (options: { html, width: embedWidth, height: embedHeight, - title: title, + title, author_name: channel.name, author_url: channel.Actor.url, provider_name: 'PeerTube',