|
|
- const routes = require('express').Router();
-
- const utils = require("../utils");
-
- const userUtils = require("../user");
-
- const fs = require('fs');
-
- const videoManager = require("../videoManager");
-
- routes.get('/', (request, result) =>
- {
- var videoID = request.query.v;
-
- if(utils.checkPrivilege(request) >= utils.PRIVILEGE.MEMBER ||
- userUtils.isValidAPI(request.query.api) ||
- videoManager.isPublicVideo(videoID))
- {
- const rootDir= (videoManager.isPublicVideo(videoID)) ?
- process.env.PUBLIC_DIR :
- process.env.PRIVATE_DIR;
-
- const path = rootDir + videoID;
- const stat = fs.statSync(path);
- const fileSize = stat.size;
- const range = request.headers.range;
-
- if (range)
- {
- const parts = range.replace(/bytes=/, "").split("-");
- const start = parseInt(parts[0], 10);
- const end = parts[1]
- ? parseInt(parts[1], 10)
- : fileSize-1;
-
- const chunksize = (end-start)+1;
- const file = fs.createReadStream(path, {start, end});
- const head =
- {
- 'Content-Range': `bytes ${start}-${end}/${fileSize}`,
- 'Accept-Ranges': 'bytes',
- 'Content-Length': chunksize,
- 'Content-Type': 'video/mp4',
- };
- result.writeHead(206, head);
- file.pipe(result);
- }
- else
- {
- const head =
- {
- 'Content-Length': fileSize,
- 'Content-Type': 'video/mp4',
- };
-
- result.writeHead(200, head);
- fs.createReadStream(path).pipe(result);
- }
- }
- else
- {
- utils.printError(result, "You need to be logged in");
- }
- });
-
- module.exports = routes;
|