UNPKG

@moartube/moartube-node

Version:

A free, open-source, self-hosted, anonymous, decentralized video/live stream platform. Scalable via Cloudflare, works in the cloud or from home WiFi.

172 lines (135 loc) 5.33 kB
const express = require('express'); const { videoIdThumbnail_GET, videoIdPreview_GET, videoIdPoster_GET, videoIdAdaptiveFormatTypeManifestsManifestName_GET, videoIdAdaptiveFormatResolutionSegmentsSegmentName_GET, videoIdProgressiveFormatResolution_GET, externalVideosBaseUrl_GET } = require('../controllers/external-videos'); const { logDebugMessageToConsole } = require('../utils/logger'); const { performAuthenticationCheck } = require('../middleware/authentication'); const router = express.Router(); router.get('/baseUrl', performAuthenticationCheck(true), (req, res) => { try { const externalVideosBaseUrl = externalVideosBaseUrl_GET(); res.send({ isError: false, externalVideosBaseUrl: externalVideosBaseUrl }); } catch (error) { logDebugMessageToConsole(null, error, new Error().stack); res.send({ isError: true, message: 'error communicating with the MoarTube node' }); } }); router.get('/:videoId/images/thumbnail.jpg', performAuthenticationCheck(false), (req, res) => { try { const videoId = req.params.videoId; const fileStream = videoIdThumbnail_GET(videoId); if (fileStream != null) { res.setHeader('Content-Type', 'image/jpeg'); fileStream.pipe(res); } else { res.status(404).send('thumbnail not found'); } } catch (error) { logDebugMessageToConsole(null, error, new Error().stack); res.status(404).send('thumbnail not found'); } }); router.get('/:videoId/images/preview.jpg', performAuthenticationCheck(false), (req, res) => { try { const videoId = req.params.videoId; const fileStream = videoIdPreview_GET(videoId); if (fileStream != null) { res.setHeader('Content-Type', 'image/jpeg'); fileStream.pipe(res); } else { res.status(404).send('preview not found'); } } catch (error) { logDebugMessageToConsole(null, error, new Error().stack); res.status(404).send('preview not found'); } }); router.get('/:videoId/images/poster.jpg', performAuthenticationCheck(false), (req, res) => { try { const videoId = req.params.videoId; const fileStream = videoIdPoster_GET(videoId); if (fileStream != null) { res.setHeader('Content-Type', 'image/jpeg'); fileStream.pipe(res); } else { res.status(404).send('poster not found'); } } catch (error) { logDebugMessageToConsole(null, error, new Error().stack); res.status(404).send('poster not found'); } }); router.get('/:videoId/adaptive/:format/:type/manifests/:manifestName', performAuthenticationCheck(false), (req, res) => { try { const videoId = req.params.videoId; const format = req.params.format; const type = req.params.type; const manifestName = req.params.manifestName; const fileStream = videoIdAdaptiveFormatTypeManifestsManifestName_GET(videoId, format, type, manifestName); if (fileStream != null) { res.setHeader('Content-Type', 'application/vnd.apple.mpegurl'); fileStream.pipe(res); } else { res.status(404).send('video not found'); } } catch (error) { logDebugMessageToConsole(null, error, new Error().stack); res.status(404).send('video not found'); } }); router.get('/:videoId/adaptive/:format/:resolution/segments/:segmentName', performAuthenticationCheck(false), (req, res) => { try { const videoId = req.params.videoId; const format = req.params.format; const resolution = req.params.resolution; const segmentName = req.params.segmentName; const fileStream = videoIdAdaptiveFormatResolutionSegmentsSegmentName_GET(videoId, format, resolution, segmentName); if (fileStream != null) { res.setHeader('Content-Type', 'video/mp2t'); fileStream.pipe(res); } else { res.status(404).send('video not found'); } } catch (error) { logDebugMessageToConsole(null, error, new Error().stack); res.status(404).send('video not found'); } }); router.get('/:videoId/progressive/:format/:progressiveFilename', performAuthenticationCheck(false), (req, res) => { try { const videoId = req.params.videoId; const format = req.params.format; const progressiveFilename = req.params.progressiveFilename; const range = req.headers.range; const data = videoIdProgressiveFormatResolution_GET(videoId, format, progressiveFilename, range); if (data != null) { res.writeHead(data.status, data.responseHeaders); data.fileStream.pipe(res); } else { res.status(404).send('video not found'); } } catch (error) { logDebugMessageToConsole(null, error, new Error().stack); res.status(404).send('video not found'); } }); module.exports = router;