mirror of
https://github.com/Chocobozzz/PeerTube.git
synced 2025-10-06 03:50:26 +02:00
Add oembed endpoint
This commit is contained in:
parent
334ddfa471
commit
d8755eed1e
22 changed files with 492 additions and 26 deletions
62
server/controllers/services.ts
Normal file
62
server/controllers/services.ts
Normal file
|
@ -0,0 +1,62 @@
|
|||
import * as express from 'express'
|
||||
|
||||
import { CONFIG, THUMBNAILS_SIZE } from '../initializers'
|
||||
import { oembedValidator } from '../middlewares'
|
||||
import { VideoInstance } from '../models'
|
||||
|
||||
const servicesRouter = express.Router()
|
||||
|
||||
servicesRouter.use('/oembed', oembedValidator, generateOEmbed)
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
export {
|
||||
servicesRouter
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
function generateOEmbed (req: express.Request, res: express.Response, next: express.NextFunction) {
|
||||
const video = res.locals.video as VideoInstance
|
||||
const webserverUrl = CONFIG.WEBSERVER.URL
|
||||
const maxHeight = parseInt(req.query.maxheight, 10)
|
||||
const maxWidth = parseInt(req.query.maxwidth, 10)
|
||||
|
||||
const embedUrl = webserverUrl + video.getEmbedPath()
|
||||
let thumbnailUrl = webserverUrl + video.getThumbnailPath()
|
||||
let embedWidth = 560
|
||||
let embedHeight = 315
|
||||
|
||||
if (maxHeight < embedHeight) embedHeight = maxHeight
|
||||
if (maxWidth < embedWidth) embedWidth = maxWidth
|
||||
|
||||
// Our thumbnail is too big for the consumer
|
||||
if (
|
||||
(maxHeight !== undefined && maxHeight < THUMBNAILS_SIZE.height) ||
|
||||
(maxWidth !== undefined && maxWidth < THUMBNAILS_SIZE.width)
|
||||
) {
|
||||
thumbnailUrl = undefined
|
||||
}
|
||||
|
||||
const html = `<iframe width="${embedWidth}" height="${embedHeight}" src="${embedUrl}" frameborder="0" allowfullscreen></iframe>`
|
||||
|
||||
const json: any = {
|
||||
type: 'video',
|
||||
version: '1.0',
|
||||
html,
|
||||
width: embedWidth,
|
||||
height: embedHeight,
|
||||
title: video.name,
|
||||
author_name: video.Author.name,
|
||||
provider_name: 'PeerTube',
|
||||
provider_url: webserverUrl
|
||||
}
|
||||
|
||||
if (thumbnailUrl !== undefined) {
|
||||
json.thumbnail_url = thumbnailUrl
|
||||
json.thumbnail_width = THUMBNAILS_SIZE.width
|
||||
json.thumbnail_height = THUMBNAILS_SIZE.height
|
||||
}
|
||||
|
||||
return res.json(json)
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue