X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fcontrollers%2Fstatic.ts;h=0f47723100ef165f9f290553b76dba237e1f6293;hb=d5c8932a601c1854db0a2e399ccaf26e17385f1a;hp=4fd58f70c008b11704042f558fce4d42eaf3354a;hpb=73471b1a52f242e86364ffb077ea6cadb3b07ae2;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/controllers/static.ts b/server/controllers/static.ts index 4fd58f70c..0f4772310 100644 --- a/server/controllers/static.ts +++ b/server/controllers/static.ts @@ -1,18 +1,25 @@ import * as cors from 'cors' import * as express from 'express' -import { CONFIG, ROUTE_CACHE_LIFETIME, STATIC_DOWNLOAD_PATHS, STATIC_MAX_AGE, STATIC_PATHS } from '../initializers' -import { VideosPreviewCache } from '../lib/cache' +import { + HLS_STREAMING_PLAYLIST_DIRECTORY, + PEERTUBE_VERSION, + ROUTE_CACHE_LIFETIME, + STATIC_DOWNLOAD_PATHS, + STATIC_MAX_AGE, + STATIC_PATHS, + WEBSERVER +} from '../initializers/constants' import { cacheRoute } from '../middlewares/cache' import { asyncMiddleware, videosGetValidator } from '../middlewares' import { VideoModel } from '../models/video/video' -import { VideosCaptionCache } from '../lib/cache/videos-caption-cache' import { UserModel } from '../models/account/user' import { VideoCommentModel } from '../models/video/video-comment' import { HttpNodeinfoDiasporaSoftwareNsSchema20 } from '../../shared/models/nodeinfo' import { join } from 'path' import { root } from '../helpers/core-utils' +import { CONFIG } from '../initializers/config' +import { getPreview, getVideoCaption } from './lazy-static' -const packageJSON = require('../../../package.json') const staticRouter = express.Router() staticRouter.use(cors()) @@ -51,26 +58,34 @@ staticRouter.use( asyncMiddleware(downloadVideoFile) ) +// HLS +staticRouter.use( + STATIC_PATHS.STREAMING_PLAYLISTS.HLS, + cors(), + express.static(HLS_STREAMING_PLAYLIST_DIRECTORY, { fallthrough: false }) // 404 if the file does not exist +) + // Thumbnails path for express const thumbnailsPhysicalPath = CONFIG.STORAGE.THUMBNAILS_DIR staticRouter.use( STATIC_PATHS.THUMBNAILS, - express.static(thumbnailsPhysicalPath, { maxAge: STATIC_MAX_AGE, fallthrough: false }) // 404 if the file does not exist + express.static(thumbnailsPhysicalPath, { maxAge: STATIC_MAX_AGE.SERVER, fallthrough: false }) // 404 if the file does not exist ) +// DEPRECATED: use lazy-static route instead const avatarsPhysicalPath = CONFIG.STORAGE.AVATARS_DIR staticRouter.use( STATIC_PATHS.AVATARS, - express.static(avatarsPhysicalPath, { maxAge: STATIC_MAX_AGE, fallthrough: false }) // 404 if the file does not exist + express.static(avatarsPhysicalPath, { maxAge: STATIC_MAX_AGE.SERVER, fallthrough: false }) // 404 if the file does not exist ) -// We don't have video previews, fetch them from the origin instance +// DEPRECATED: use lazy-static route instead staticRouter.use( STATIC_PATHS.PREVIEWS + ':uuid.jpg', asyncMiddleware(getPreview) ) -// We don't have video captions, fetch them from the origin instance +// DEPRECATED: use lazy-static route instead staticRouter.use( STATIC_PATHS.VIDEO_CAPTIONS + ':videoId-:captionLanguage([a-z]+).vtt', asyncMiddleware(getVideoCaption) @@ -108,7 +123,7 @@ staticRouter.use('/.well-known/nodeinfo', links: [ { rel: 'http://nodeinfo.diaspora.software/ns/schema/2.0', - href: CONFIG.WEBSERVER.URL + '/nodeinfo/2.0.json' + href: WEBSERVER.URL + '/nodeinfo/2.0.json' } ] }) @@ -142,6 +157,19 @@ staticRouter.use('/.well-known/change-password', } ) +staticRouter.use('/.well-known/host-meta', + (_, res: express.Response) => { + res.type('application/xml') + + const xml = '\n' + + '\n' + + ` \n` + + '' + + res.send(xml).end() + } +) + // --------------------------------------------------------------------------- export { @@ -150,24 +178,7 @@ export { // --------------------------------------------------------------------------- -async function getPreview (req: express.Request, res: express.Response, next: express.NextFunction) { - const path = await VideosPreviewCache.Instance.getFilePath(req.params.uuid) - if (!path) return res.sendStatus(404) - - return res.sendFile(path, { maxAge: STATIC_MAX_AGE }) -} - -async function getVideoCaption (req: express.Request, res: express.Response) { - const path = await VideosCaptionCache.Instance.getFilePath({ - videoId: req.params.videoId, - language: req.params.captionLanguage - }) - if (!path) return res.sendStatus(404) - - return res.sendFile(path, { maxAge: STATIC_MAX_AGE }) -} - -async function generateNodeinfo (req: express.Request, res: express.Response, next: express.NextFunction) { +async function generateNodeinfo (req: express.Request, res: express.Response) { const { totalVideos } = await VideoModel.getStats() const { totalLocalVideoComments } = await VideoCommentModel.getStats() const { totalUsers } = await UserModel.getStats() @@ -178,7 +189,7 @@ async function generateNodeinfo (req: express.Request, res: express.Response, ne version: '2.0', software: { name: 'peertube', - version: packageJSON.version + version: PEERTUBE_VERSION }, protocols: [ 'activitypub' @@ -215,14 +226,14 @@ async function generateNodeinfo (req: express.Request, res: express.Response, ne return res.send(json).end() } -async function downloadTorrent (req: express.Request, res: express.Response, next: express.NextFunction) { +async function downloadTorrent (req: express.Request, res: express.Response) { const { video, videoFile } = getVideoAndFile(req, res) if (!videoFile) return res.status(404).end() return res.download(video.getTorrentFilePath(videoFile), `${video.name}-${videoFile.resolution}p.torrent`) } -async function downloadVideoFile (req: express.Request, res: express.Response, next: express.NextFunction) { +async function downloadVideoFile (req: express.Request, res: express.Response) { const { video, videoFile } = getVideoAndFile(req, res) if (!videoFile) return res.status(404).end() @@ -231,7 +242,7 @@ async function downloadVideoFile (req: express.Request, res: express.Response, n function getVideoAndFile (req: express.Request, res: express.Response) { const resolution = parseInt(req.params.resolution, 10) - const video: VideoModel = res.locals.video + const video = res.locals.videoAll const videoFile = video.VideoFiles.find(f => f.resolution === resolution)