| @ -0,0 +1,16 @@ | |||
| const routes = require('express').Router(); | |||
| const utils = require('../utils/utils.js'); | |||
| routes.get('/', (request, result) => | |||
| { | |||
| }); | |||
| routes.get('*', (request, result) => | |||
| { | |||
| utils.print404(result); | |||
| }); | |||
| module.exports = routes; | |||
| @ -0,0 +1,10 @@ | |||
| const routes = require('express').Router(); | |||
| const builder = require('../../utils/pageBuilder'); | |||
| routes.get('/', (request, result) => | |||
| { | |||
| builder.constructAdminPage(request, result, require("../../admin/analytics").main) | |||
| }); | |||
| module.exports = routes; | |||
| @ -0,0 +1,18 @@ | |||
| const routes = require('express').Router(); | |||
| const builder = require('../../utils/pageBuilder'); | |||
| routes.get('/', (request, result) => | |||
| { | |||
| builder.constructAdminPage(request, result, require("../../admin/adminDownloads").main) | |||
| }); | |||
| routes.post('/', (request, result) => | |||
| { | |||
| builder.adminPostRoute(request ,require("../../admin/adminDownloads").processPostData).then(function() | |||
| { | |||
| result.redirect('/admin/downloads'); | |||
| }) | |||
| }); | |||
| module.exports = routes; | |||
| @ -0,0 +1,38 @@ | |||
| const routes = require('express').Router(); | |||
| const analytics = require('./analytics'); | |||
| routes.use('/analytics', analytics); | |||
| const login = require('./login'); | |||
| routes.use('/login', login); | |||
| const posts = require('./posts'); | |||
| routes.use('/posts', posts); | |||
| const downloads = require('./downloads'); | |||
| routes.use('/downloads', downloads); | |||
| const users = require('./users'); | |||
| routes.use('/users', users); | |||
| const builder = require('../../utils/pageBuilder.js'); | |||
| routes.get('/', (request, result) => | |||
| { | |||
| builder.constructAdminPage(request, result, require("../../admin/adminHome").main) | |||
| }); | |||
| routes.post('/', (request, result) => | |||
| { | |||
| builder.adminPostRoute(request, require("../../admin/adminHome").processPostData).then(function() | |||
| { | |||
| result.redirect("/admin"); | |||
| }); | |||
| }); | |||
| routes.get('*', (request, result) => | |||
| { | |||
| builder.print404(result); | |||
| }); | |||
| module.exports = routes; | |||
| @ -0,0 +1,16 @@ | |||
| const routes = require('express').Router(); | |||
| const builder = require('../../utils/pageBuilder.js'); | |||
| routes.get('/', (request, result) => | |||
| { | |||
| builder.constructAdminPage(request, result, require("../../admin/adminHome").main) | |||
| }); | |||
| routes.post('/', (request, result) => | |||
| { | |||
| builder.constructAdminPage(request, result, require("../../admin/login").main) | |||
| }); | |||
| module.exports = routes; | |||
| @ -0,0 +1,15 @@ | |||
| const routes = require('express').Router(); | |||
| const builder = require('../../utils/pageBuilder'); | |||
| routes.get('/', (request, result) => | |||
| { | |||
| builder.constructAdminPage(request, result, require("../../admin/posts").main) | |||
| }); | |||
| routes.post('/', (request, result) => | |||
| { | |||
| builder.adminPostPageWithOutput(request, result ,require("../../admin/posts").processPostData) | |||
| }); | |||
| module.exports = routes; | |||
| @ -0,0 +1,15 @@ | |||
| const routes = require('express').Router(); | |||
| const builder = require('../../utils/pageBuilder.js'); | |||
| routes.get('/', (request, result) => | |||
| { | |||
| builder.constructAdminPage(request, result, require("../../admin/users").main) | |||
| }); | |||
| routes.post('/', (request, result) => | |||
| { | |||
| builder.adminPostPageWithOutput(request, result ,require("../../admin/users").processPostData) | |||
| }); | |||
| module.exports = routes; | |||
| @ -0,0 +1,10 @@ | |||
| const routes = require('express').Router(); | |||
| const pageBuilder = require('../../utils/pageBuilder'); | |||
| routes.get('*', (request, result) => | |||
| { | |||
| pageBuilder.buildBlogPage(request, result, require("../../blog/category").main) | |||
| }); | |||
| module.exports = routes; | |||
| @ -0,0 +1,15 @@ | |||
| const routes = require('express').Router(); | |||
| const utils = require('../utils/utils.js'); | |||
| routes.get('/', (request, result) => | |||
| { | |||
| require("../blog/contact.js").main(request, result); | |||
| }); | |||
| routes.get('*', (request, result) => | |||
| { | |||
| utils.print404(result); | |||
| }); | |||
| module.exports = routes; | |||
| @ -0,0 +1,14 @@ | |||
| const routes = require('express').Router(); | |||
| /** used to parse the request URL */ | |||
| const url = require('url'); | |||
| routes.get('*', (request, result) => | |||
| { | |||
| console.log("ping"); | |||
| const filename = url.parse(request.url, true).pathname; | |||
| require("../../includes/downloads.js").main(result, filename); | |||
| }); | |||
| module.exports = routes; | |||
| @ -0,0 +1,15 @@ | |||
| const routes = require('express').Router(); | |||
| const contentLoader = require('../../includes/staticContentServer.js'); | |||
| routes.get('*', (request, result) => | |||
| { | |||
| if(!contentLoader.serveStaticContent(request, result, request.originalUrl, "")) | |||
| { | |||
| //missing content | |||
| } | |||
| }); | |||
| module.exports = routes; | |||
| @ -0,0 +1,49 @@ | |||
| const routes = require('express').Router(); | |||
| /** about page */ | |||
| const about = require('./about'); | |||
| routes.use('/about', about); | |||
| /** admin page and all of its sub pages */ | |||
| const admin = require('./admin'); | |||
| routes.use('/admin', admin); | |||
| /** Contact page */ | |||
| const contact = require('./contact'); | |||
| routes.use('/contact', contact); | |||
| /** Downloads path for files */ | |||
| const downloads = require('./downloads'); | |||
| routes.use('/downloads', downloads); | |||
| /** static content like css, js, and images */ | |||
| const includes = require('./includes'); | |||
| routes.use('/includes', includes); | |||
| routes.use('/blogContent', includes); | |||
| /** category pages */ | |||
| const category = require('./category'); | |||
| routes.use('/category', category); | |||
| const pageBuilder = require('../utils/pageBuilder'); | |||
| const project = require('./projects'); | |||
| routes.use('/steam', project); | |||
| //blog home page | |||
| routes.get('/', (request, result) => | |||
| { | |||
| pageBuilder.buildBlogPage(request, result, require("../blog/homePage").main) | |||
| }); | |||
| //regular blog posts | |||
| routes.get('*', (request, result) => | |||
| { | |||
| pageBuilder.buildBlogPage(request, result, | |||
| require("../blog/posts").main, request.url); | |||
| }); | |||
| module.exports = routes; | |||
| @ -0,0 +1,30 @@ | |||
| const routes = require('express').Router(); | |||
| const url = require('url'); | |||
| const contentLoader = require('../../includes/staticContentServer.js'); | |||
| routes.get('*', (request, result) => | |||
| { | |||
| var filename = url.parse(request.url, true).pathname; | |||
| var extra = ''; | |||
| if(filename === '/') | |||
| { | |||
| if(request.originalUrl.charAt(request.originalUrl.length -1) !== '/') | |||
| { | |||
| result.redirect(request.originalUrl + "/"); | |||
| } | |||
| else | |||
| { | |||
| extra = "/index.html"; | |||
| } | |||
| } | |||
| if(!contentLoader.serveStaticContent(request, result, | |||
| request.originalUrl + extra, "blogContent/projects")) | |||
| { | |||
| } | |||
| }); | |||
| module.exports = routes; | |||
| @ -1,55 +0,0 @@ | |||
| //sending static content | |||
| const includes = require('../includes/includes.js'); | |||
| //used to append static content to result | |||
| const contentLoader = require('../includes/staticContentServer.js'); | |||
| const whiskers = require('whiskers'); | |||
| /** | |||
| * @author Jeffery Russell 11-3-18 | |||
| * | |||
| * @type {{main: (function(*=, *): Promise)}} | |||
| */ | |||
| module.exports= | |||
| { | |||
| /** | |||
| * Calls blog and sidebar modules to render blog contents in order | |||
| * | |||
| * @param requestURL | |||
| * @returns {Promise|*} | |||
| */ | |||
| main: function(request, result, filename) | |||
| { | |||
| if(contentLoader.serveStaticContent(request, result, filename, "")) | |||
| { | |||
| //do nothing | |||
| } | |||
| else | |||
| { | |||
| const clientAddress = (request.headers['x-forwarded-for'] || '').split(',')[0] | |||
| || request.connection.remoteAddress; | |||
| result.writeHead(200, {'Content-Type': 'text/html'}); | |||
| const file = "../admin/admin.js"; | |||
| var templateContext = Object(); | |||
| Promise.all([includes.fetchTemplate("admin/adminMain.html"), | |||
| includes.printAdminHeader(templateContext), | |||
| require(file).main(request, clientAddress, templateContext, filename), | |||
| includes.printFooter(templateContext), | |||
| ]).then(function(content) | |||
| { | |||
| result.write(whiskers.render(content[0], templateContext)); | |||
| result.end(); | |||
| }).catch(function(err) | |||
| { | |||
| console.log(err); | |||
| throw err; | |||
| }); | |||
| } | |||
| } | |||
| }; | |||
| @ -1,122 +0,0 @@ | |||
| //used to append static content to result | |||
| const includes = require('../includes/includes.js'); | |||
| //used to append static content to result | |||
| const contentLoader = require('../includes/staticContentServer.js'); | |||
| const whiskers = require('whiskers'); | |||
| const TEMPLATE_FILE="blog/blogMain.html"; | |||
| const PAGINATION_TEMPLATE_KEY = "paginationTemplate"; | |||
| const PAGINATION_TEMPLATE_FILE = "blog/paginationBar.html"; | |||
| //caching program to make the application run faster | |||
| const cache = require('memory-cache'); | |||
| //file io | |||
| const utils = require('../utils/utils.js'); | |||
| /** | |||
| * @author Jeffery Russell 11-3-18 | |||
| * | |||
| * @type {{main: (function(*=, *): Promise)}} | |||
| */ | |||
| module.exports= | |||
| { | |||
| /** | |||
| * Calls posts and sidebar modules to render blog contents in order | |||
| * | |||
| * @param requestURL | |||
| * @returns {Promise|*} | |||
| */ | |||
| main: function(request, result, filename) | |||
| { | |||
| if(contentLoader.serveStaticContent(request, result, filename, "")) | |||
| { | |||
| //do nothing | |||
| } | |||
| //downloads | |||
| else if (filename.includes("/downloads/")) | |||
| { | |||
| require("../includes/downloads.js").main(result, filename); | |||
| } | |||
| else if (filename.includes("/contact")) | |||
| { | |||
| require("../blog/contact.js").main(request, result); | |||
| } | |||
| else | |||
| { | |||
| var page = request.query.page; | |||
| if(typeof page == "undefined") | |||
| page = 1; | |||
| page = Number(page); | |||
| const html = cache.get(filename + "?page=" + page); | |||
| result.writeHead(200, {'Content-Type': 'text/html'}); | |||
| if (html == null) | |||
| { | |||
| var file = ""; | |||
| if (filename === '' || filename === '/') | |||
| { | |||
| file = "../blog/homePage.js"; | |||
| } | |||
| else | |||
| { | |||
| var urlSplit = filename.split("/"); | |||
| if (urlSplit.length >= 2 && urlSplit[1] === 'category') //single category page | |||
| file = "../blog/category.js"; | |||
| else | |||
| { | |||
| file = "../blog/posts.js"; | |||
| page = 1; // all blog are single page, everyone must be one to ensure | |||
| // cache is not tricked into storing same blog post a ton of times | |||
| } | |||
| } | |||
| var templateContext = Object(); | |||
| Promise.all([includes.fetchTemplate(TEMPLATE_FILE), | |||
| utils.includeInObject(PAGINATION_TEMPLATE_KEY, templateContext, "templates/" + PAGINATION_TEMPLATE_FILE), | |||
| includes.printHeader(templateContext), | |||
| includes.printFooter(templateContext), | |||
| require(file).main(filename, request, templateContext), | |||
| require("../blog/sidebar.js").main(templateContext)]) | |||
| .then(function (content) | |||
| { | |||
| const html = whiskers.render(content[0], templateContext); | |||
| result.write(html); | |||
| result.end(); | |||
| cache.put(filename + "?page=" + page, html); | |||
| }).catch(function (err) | |||
| { | |||
| console.log(err); | |||
| cache.del(filename + "?page=" + page); | |||
| utils.print404().then(function(content) | |||
| { | |||
| result.write(content); | |||
| result.end(); | |||
| }) | |||
| }); | |||
| } | |||
| else | |||
| { | |||
| result.write(html); | |||
| result.end(); | |||
| } | |||
| } | |||
| }, | |||
| /** | |||
| * Clears the memory cache. | |||
| */ | |||
| clearCache: function() | |||
| { | |||
| console.log("Blog cache cleared"); | |||
| cache.clear(); | |||
| } | |||
| }; | |||
| @ -0,0 +1,184 @@ | |||
| const utils = require('./utils'); | |||
| const whiskers = require('whiskers'); | |||
| const includes = require("../includes/includes"); | |||
| const cache = require('memory-cache'); | |||
| /** used to parse the request URL */ | |||
| const url = require('url'); | |||
| const TEMPLATE_FILE="blog/blogMain.html"; | |||
| const PAGINATION_TEMPLATE_KEY = "paginationTemplate"; | |||
| const PAGINATION_TEMPLATE_FILE = "blog/paginationBar.html"; | |||
| module.exports = | |||
| { | |||
| /** | |||
| * Displays 404 error to user | |||
| * | |||
| * @param result | |||
| * @returns {*} | |||
| */ | |||
| print404: function(result) | |||
| { | |||
| includes.include("includes/html/404.html").then(function(html) | |||
| { | |||
| result.write(html); | |||
| result.end(); | |||
| }) | |||
| }, | |||
| constructAdminPage: function(request, result, templateFiller) | |||
| { | |||
| var templateContext = Object(); | |||
| var promises = []; | |||
| promises.push(includes.fetchTemplate("admin/adminMain.html")); | |||
| promises.push(includes.printAdminHeader(templateContext)); | |||
| promises.push(includes.printFooter(templateContext)); | |||
| if(module.exports.loggedIn(request)) | |||
| { | |||
| templateContext.loggedIn = true; | |||
| promises.push(templateFiller(templateContext)); | |||
| } | |||
| else | |||
| { | |||
| //login | |||
| const clientAddress = (request.headers['x-forwarded-for'] || '').split(',')[0] | |||
| || request.connection.remoteAddress; | |||
| promises.push(require("../admin/login").main(request, clientAddress,templateContext)); | |||
| } | |||
| Promise.all(promises).then(function(content) | |||
| { | |||
| result.write(whiskers.render(content[0], templateContext)); | |||
| result.end(); | |||
| }).catch(function(err) | |||
| { | |||
| console.log(err); | |||
| throw err; | |||
| }); | |||
| }, | |||
| adminPostPageWithOutput: function(request, result, templateFiller) | |||
| { | |||
| utils.getPostData(request).then(function(postData) | |||
| { | |||
| var templateContext = Object(); | |||
| var promises = []; | |||
| promises.push(includes.fetchTemplate("admin/adminMain.html")); | |||
| promises.push(includes.printAdminHeader(templateContext)); | |||
| promises.push(includes.printFooter(templateContext)); | |||
| if (module.exports.loggedIn(request)) | |||
| { | |||
| templateContext.loggedIn = true; | |||
| promises.push(templateFiller(templateContext, postData)); | |||
| } | |||
| else | |||
| { | |||
| //login | |||
| const clientAddress = (request.headers['x-forwarded-for'] || '').split(',')[0] | |||
| || request.connection.remoteAddress; | |||
| promises.push(require("../admin/login").main(request, clientAddress, templateContext)); | |||
| } | |||
| Promise.all(promises).then(function (content) | |||
| { | |||
| result.write(whiskers.render(content[0], templateContext)); | |||
| result.end(); | |||
| }).catch(function (err) { | |||
| console.log(err); | |||
| throw err; | |||
| }); | |||
| }); | |||
| }, | |||
| adminPostRoute: function(request, templateFiller) | |||
| { | |||
| return new Promise(function(resolve, reject) | |||
| { | |||
| utils.getPostData(request).then(function(postData) | |||
| { | |||
| templateFiller(postData).then(function() | |||
| { | |||
| resolve(); | |||
| }) | |||
| }).catch(function(e) | |||
| { | |||
| reject(e); | |||
| }) | |||
| }) | |||
| }, | |||
| loggedIn(request) | |||
| { | |||
| return(request.session && request.session.user); | |||
| }, | |||
| buildBlogPageWithURL: function(request, result, templateFiller, filename) | |||
| { | |||
| var page = request.query.page; | |||
| if(typeof page == "undefined") | |||
| page = 1; | |||
| page = Number(page); | |||
| const html = cache.get(filename + "?page=" + page); | |||
| result.writeHead(200, {'Content-Type': 'text/html'}); | |||
| if (html == null) | |||
| { | |||
| var templateContext = Object(); | |||
| Promise.all([includes.fetchTemplate(TEMPLATE_FILE), | |||
| includes.includeInObject(PAGINATION_TEMPLATE_KEY, templateContext, "templates/" + PAGINATION_TEMPLATE_FILE), | |||
| includes.printHeader(templateContext), | |||
| includes.printFooter(templateContext), | |||
| templateFiller(filename, request, templateContext), | |||
| require("../blog/sidebar.js").main(templateContext)]) | |||
| .then(function (content) | |||
| { | |||
| const html = whiskers.render(content[0], templateContext); | |||
| result.write(html); | |||
| result.end(); | |||
| cache.put(filename + "?page=" + page, html); | |||
| }).catch(function (err) | |||
| { | |||
| cache.del(filename + "?page=" + page); | |||
| module.exports.print404(result) | |||
| }); | |||
| } | |||
| else | |||
| { | |||
| result.write(html); | |||
| result.end(); | |||
| } | |||
| }, | |||
| buildBlogPage: function(request, result, templateFiller) | |||
| { | |||
| var filename = url.parse(request.url, true).pathname; | |||
| module.exports.buildBlogPageWithURL(request, result,templateFiller, filename); | |||
| }, | |||
| /** | |||
| * Clears the memory cache. | |||
| */ | |||
| clearCache: function() | |||
| { | |||
| console.log("Blog cache cleared"); | |||
| cache.clear(); | |||
| } | |||
| }; | |||