|
|
- /** express app for routing */
- const express = require("express");
-
- /**session data for login and storing preferences*/
- const session = require('express-session');
-
- const fileIO = require('./fileIO');
-
- const userUtils = require('./user.js');
-
- const path = require('path');
-
-
- const fs = require('fs');
-
- const app = express();
-
- app.use(express.urlencoded());
- app.use(express.json()); // if needed
-
-
- const CONFIG_FILE_NAME = "conf.json";
- const config = fileIO.getFileAsJSON(CONFIG_FILE_NAME);
-
- /**Initializes sessions for login */
- app.use(session({ secret: config.sessionSecret, cookie: { maxAge: 6000000 }}));
-
- /** Template engine */
- const whiskers = require('whiskers');
-
-
-
-
- function fetchInTemplate(templateContext, templateKey, filename)
- {
- templateContext[templateKey] = fileIO.getFile(filename);
- }
-
- function renderHTML(request, result, templateFile, templateDependencyFunction)
- {
- var templateContext = Object();
- var prom = [];
-
-
- prom.push(fileIO.getFile("./html/mainTemplate.html"));
- prom.push(fetchInTemplate(templateContext, "header", "./html/header.html"));
- prom.push(fetchInTemplate(templateContext, "footer", "./html/footer.html"));
- if(request.session.login === true)
- {
- templateContext.loggedIn = true;
- prom.push(fetchInTemplate(templateContext, "main","./html/" + templateFile));
- }
- else
- {
- prom.push(fetchInTemplate(templateContext, "login","./html/login.html"));
- }
-
- Promise.all(prom).then(function(content)
- {
- result.write(whiskers.render(content[0], templateContext));
- result.end();
- });
- }
-
- app.get('/', (req, res) => renderHTML(req, res, "home.html", null));
-
- app.use(express.static('css'));
- app.use(express.static('js'));
-
-
- app.post('/login', function(request, result)
- {
- if(userUtils.checkLogin(request.body.username, request.body.password, config))
- {
- request.session.login = true;
- request.session.username = request.body.username;
- }
- result.redirect('/');
- });
-
-
- app.get('/videos', (req, res) => renderHTML(req, res, "videos.html", null));
- app.get('/watch', (req, res) => renderHTML(req, res, "watch.html", null));
-
-
- app.get('/video', function(request, result)
- {
- if(request.session.login === true)
- {
- const path = '/home/jeff/public/CheckerMoves.mp4';
- 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
- {
- result.status(401);
- result.send('None shall pass');
- }
- });
-
- app.listen(config.port, () => console.log(`App listening on port ${config.port}!`));
|