/** 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 configLoader = require('./configManager.js'); // const recursive = require('./recursiveTraversal'); // // const filepreview = require('filepreview'); const fs = require('fs'); const app = express(); /**Initializes sessions for login */ app.use(session({ secret: configLoader.getConfiguration().sessionSecret, cookie: { maxAge: 6000000 }})); app.use(express.urlencoded()); app.use(express.json()); // if needed const routes = require('./routes'); app.use('/', routes); // const CONFIG_FILE_NAME = "conf.json"; // const config = fileIO.getFileAsJSON(CONFIG_FILE_NAME); // /** Template engine */ // const whiskers = require('whiskers'); // var rootDir = '/home/jeff/work/aaSchool/Algo/online Lectures/'; // var serverURL = "http://localhost:5000"; // 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(checkPrivilege(request) >= PRIVILEGE.MEMBER) // { // templateContext.loggedIn = true; // if(checkPrivilege(request) === PRIVILEGE.ADMIN) // templateContext.admin = true; // if(templateDependencyFunction !== null) // prom.push(templateDependencyFunction(templateContext, request)); // 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(); // }); // } // function getUserInformation(templateContext, request) // { // templateContext.users = configLoader.getConfiguration().users; // templateContext.apiKey = request.session.API; // templateContext.id = request.session.userID; // templateContext.username = request.session.username; // } // function getHomePageInformation(templateContext, request) // { // templateContext.username = request.session.username; // } // app.get('/', (req, res) => renderHTML(req, res, "home.html", getHomePageInformation)); // app.get('/users', (req, res) => renderHTML(req, res, "users.html", getUserInformation)); app.use(express.static('css')); app.use(express.static('js')); app.use(express.static('img')); // var videos = null; // // function getVideosTemplateInformation(templateContext, request) // { // if(videos === null) // { // videos = []; // return new Promise(function(resolve, reject) // { // recursive(rootDir, function (err, files) // { // console.log(files); // files.forEach(file => // { // var splitArray = file.split('/'); // var name = splitArray[splitArray.length -1]; // const icon = 'img/private/' + name + ".png"; // if (!fs.existsSync(icon)) // { // filepreview.generate(file, icon, function(error) { // if (error) { // return console.log(error); // } // console.log('File preview is located ' + icon); // }); // } // videos.push({name: file.replace(rootDir, ''), length: "n/a"}); // }); // templateContext.videos = videos; // resolve(); // }); // }) // } // else // { // templateContext.videos = videos; // } // } // function getVideoTemplateInfo(templateContext, request) // { // templateContext.api = request.session.API; // templateContext.serverURL = serverURL; // templateContext.videoURL = request.query.v.split(" ").join("%20"); // } // app.get('/videos', (req, res) => renderHTML(req, res, "videos.html", getVideosTemplateInformation)); // app.get('/watch', (req, res) => renderHTML(req, res, "watch.html", getVideoTemplateInfo)); // function isPublicVideo(videoURL) // { // return false; // } // // app.get('/icon/', function(request, result) // { // try // { // const videoID = request.query.v; // // const splitArray = videoID.split('/'); // const name = splitArray[splitArray.length -1] + ".png"; // // var file=""; // // if(!isPublicVideo(videoID)) // { // if(checkPrivilege(request) >= PRIVILEGE.MEMBER) // { // file = fs.readFileSync("img/private/" + name); // } // else // { // throw "Not logged in"; // } // } // else // { // file = fs.readFileSync("img/public/" + name); // } // // result.writeHead(200, {'Content-Type': 'image/png', // 'Vary': 'Accept-Encoding'}); // result.write(file); // result.end(); // } // catch(error) // { // result.writeHead(404, {'Content-Type': 'text/html', // 'Vary': 'Accept-Encoding'}); // result.write("Nada"); // result.end(); // } // }); // app.get('/video/', function(request, result) // { // if(checkPrivilege(request) >= PRIVILEGE.MEMBER || userUtils.isValidAPI(request.query.api, config)) // { // var videoID = request.query.v; // 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 // { // console.log("invalid attempt to view video"); // result.status(401); // result.send('None shall pass'); // } // }); app.listen(configLoader.getConfiguration().port, () => console.log(`App listening on port ${configLoader.getConfiguration().port}!`));