]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - server/controllers/services.ts
Don't expose constants directly in initializers/
[github/Chocobozzz/PeerTube.git] / server / controllers / services.ts
CommitLineData
d8755eed 1import * as express from 'express'
74dc3bca 2import { EMBED_SIZE, PREVIEWS_SIZE, WEBSERVER } from '../initializers/constants'
3fd3ab2d 3import { asyncMiddleware, oembedValidator } from '../middlewares'
418d092a 4import { accountNameWithHostGetValidator } from '../middlewares/validators'
d8755eed
C
5
6const servicesRouter = express.Router()
7
a2431b7d
C
8servicesRouter.use('/oembed',
9 asyncMiddleware(oembedValidator),
10 generateOEmbed
11)
ad9e39fb 12servicesRouter.use('/redirect/accounts/:accountName',
418d092a 13 asyncMiddleware(accountNameWithHostGetValidator),
e8cb4409
C
14 redirectToAccountUrl
15)
d8755eed
C
16
17// ---------------------------------------------------------------------------
18
19export {
20 servicesRouter
21}
22
23// ---------------------------------------------------------------------------
24
dae86118
C
25function generateOEmbed (req: express.Request, res: express.Response) {
26 const video = res.locals.video
6dd9de95 27 const webserverUrl = WEBSERVER.URL
d8755eed
C
28 const maxHeight = parseInt(req.query.maxheight, 10)
29 const maxWidth = parseInt(req.query.maxwidth, 10)
30
40e87e9e
C
31 const embedUrl = webserverUrl + video.getEmbedStaticPath()
32 let thumbnailUrl = webserverUrl + video.getPreviewStaticPath()
164174a6
C
33 let embedWidth = EMBED_SIZE.width
34 let embedHeight = EMBED_SIZE.height
d8755eed
C
35
36 if (maxHeight < embedHeight) embedHeight = maxHeight
37 if (maxWidth < embedWidth) embedWidth = maxWidth
38
39 // Our thumbnail is too big for the consumer
40 if (
164174a6
C
41 (maxHeight !== undefined && maxHeight < PREVIEWS_SIZE.height) ||
42 (maxWidth !== undefined && maxWidth < PREVIEWS_SIZE.width)
d8755eed
C
43 ) {
44 thumbnailUrl = undefined
45 }
46
6ccdf3a2
C
47 const html = `<iframe width="${embedWidth}" height="${embedHeight}" sandbox="allow-same-origin allow-scripts" ` +
48 `src="${embedUrl}" frameborder="0" allowfullscreen></iframe>`
d8755eed
C
49
50 const json: any = {
51 type: 'video',
52 version: '1.0',
53 html,
54 width: embedWidth,
55 height: embedHeight,
56 title: video.name,
38fa2065 57 author_name: video.VideoChannel.Account.name,
49799b16 58 author_url: video.VideoChannel.Account.Actor.url,
d8755eed
C
59 provider_name: 'PeerTube',
60 provider_url: webserverUrl
61 }
62
63 if (thumbnailUrl !== undefined) {
64 json.thumbnail_url = thumbnailUrl
164174a6
C
65 json.thumbnail_width = PREVIEWS_SIZE.width
66 json.thumbnail_height = PREVIEWS_SIZE.height
d8755eed
C
67 }
68
69 return res.json(json)
70}
e8cb4409
C
71
72function redirectToAccountUrl (req: express.Request, res: express.Response, next: express.NextFunction) {
73 return res.redirect(res.locals.account.Actor.url)
74}