| @ -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(); | |||||
| } | |||||
| }; | |||||