diff --git a/controllers/pages.js b/controllers/pages.js index a6955b50..d3d021de 100644 --- a/controllers/pages.js +++ b/controllers/pages.js @@ -21,7 +21,7 @@ const express = require('express') , thread = require(__dirname+'/../models/pages/thread.js'); //homepage with board list -router.get('/', home); +router.get('/index', home); //login page router.get('/login', csrf, login); @@ -54,7 +54,7 @@ router.get('/:board/manage', Boards.exists, isLoggedIn, hasPerms, csrf, manage); router.get('/globalmanage', isLoggedIn, hasPerms, csrf, globalManage); // board page/recents -router.get('/:board', Boards.exists, paramConverter, board); +router.get('/:board/(:page([2-9]*|index))?', Boards.exists, paramConverter, board); // thread view page router.get('/:board/thread/:id(\\d+)', Boards.exists, paramConverter, thread); diff --git a/db/posts.js b/db/posts.js index 805462a2..c12f2493 100644 --- a/db/posts.js +++ b/db/posts.js @@ -10,7 +10,6 @@ module.exports = { db, getRecent: async (board, page) => { - // get all thread posts (posts with null thread id) const threads = await db.find({ 'thread': null, diff --git a/helpers/paramconverter.js b/helpers/paramconverter.js index 531b9835..c2315623 100644 --- a/helpers/paramconverter.js +++ b/helpers/paramconverter.js @@ -69,6 +69,11 @@ module.exports = (req, res, next) => { req.body.thread_limit = null; } } + + if (req.params.page) { + req.params.page = req.params.page === 'index' ? 'index' : +req.params.page; + } + next(); } diff --git a/helpers/writepagehtml.js b/helpers/writepagehtml.js index 0ca1bc46..9fe0433e 100644 --- a/helpers/writepagehtml.js +++ b/helpers/writepagehtml.js @@ -10,5 +10,5 @@ const util = require('util') module.exports = async (htmlName, pugName, pugVars) => { const html = pug.renderFile(`${pugDirectory}/${pugName}`, pugVars); - return writeFile(`${uploadDirectory}/htmlName`, html); + return writeFile(`${uploadDirectory}html/${htmlName}`, html); }; diff --git a/models/pages/board.js b/models/pages/board.js index 4473f954..efdce077 100644 --- a/models/pages/board.js +++ b/models/pages/board.js @@ -1,15 +1,15 @@ 'use strict'; -const Posts = require(__dirname+'/../../db/posts.js'); +const Posts = require(__dirname+'/../../db/posts.js')l module.exports = async (req, res, next) => { - //get the recently bumped thread & preview posts - const page = req.query.p || 1; + + const page = req.params.page === 'index' ? 1 : (req.params.page || 1); let threads; let pages; try { - pages = Math.ceil((await Posts.getPages(req.params.board)) / 10) || 1; - if (page > pages) { + pages = Math.ceil((await Posts.getPages(req.params.board)) / 10) + if (page > pages && pages > 0) { return next(); } threads = await Posts.getRecent(req.params.board, page); @@ -17,10 +17,10 @@ module.exports = async (req, res, next) => { return next(err); } - //render the page - res.render('board', { + return res.render('board', { threads: threads || [], pages, page, }); + } diff --git a/server.js b/server.js index 7c1bd385..85860e4d 100644 --- a/server.js +++ b/server.js @@ -9,7 +9,6 @@ const express = require('express') , path = require('path') , app = express() , helmet = require('helmet') -// , csrf = require('csurf') , bodyParser = require('body-parser') , cookieParser = require('cookie-parser') , configs = require(__dirname+'/configs/main.json') @@ -48,7 +47,6 @@ const express = require('express') // csurf and helmet app.use(helmet()); -// app.use(csrf()); //referer header check app.use((req, res, next) => { diff --git a/views/includes/boardheader.pug b/views/includes/boardheader.pug index b310a1ec..b49231b9 100644 --- a/views/includes/boardheader.pug +++ b/views/includes/boardheader.pug @@ -1,6 +1,6 @@ section.board-header if board.banners.length > 0 object.board-banner(data=`/banners?board=${board._id}` width='300' height='100') - a.no-decoration(href=`/${board._id}/`) + a.no-decoration(href=`/${board._id}/index`) h1.board-title /#{board._id}/ - #{board.name} h4.board-description #{board.description} diff --git a/views/includes/navbar.pug b/views/includes/navbar.pug index 29ab857b..bd6bfef8 100644 --- a/views/includes/navbar.pug +++ b/views/includes/navbar.pug @@ -2,7 +2,7 @@ nav.navbar a.nav-item(href='/') Home a.nav-item.right(href='/logout') Logout if board - a.nav-item.right(href=`/login?redirect=/${board._id}/`) Login + a.nav-item.right(href=`/login?redirect=/${board._id}/index`) Login a.nav-item.right(href=`/${board._id}/manage`) Manage else a.nav-item.right(href='/login') Login diff --git a/views/includes/pages.pug b/views/includes/pages.pug index b9b503b8..d8382215 100644 --- a/views/includes/pages.pug +++ b/views/includes/pages.pug @@ -1,12 +1,15 @@ | Page: -- for(let i = 1; i <= pages; i++) +span + a(href=`/${board._id}/index`) [#{1}] + | +- for(let i = 2; i <= pages; i++) if i === page span - a(href=`/${board._id}?p=${i}`) [#{i}] + a(href=`/${board._id}/${i}`) [#{i}] | else span - a(href=`/${board._id}?p=${i}`) #{i} + a(href=`/${board._id}/${i}`) #{i} | | | diff --git a/views/pages/catalog.pug b/views/pages/catalog.pug index 69ff69e0..fbfa6a2b 100644 --- a/views/pages/catalog.pug +++ b/views/pages/catalog.pug @@ -9,7 +9,7 @@ block content nav.pages#top a(href='#bottom') [Bottom] | - a(href=`/${board._id}/`) [Return] + a(href=`/${board._id}/index`) [Return] hr(size=1) if threads.length === 0 p No posts. @@ -20,4 +20,4 @@ block content nav.pages#bottom a(href='#top') [Top] | - a(href=`/${board._id}/`) [Return] + a(href=`/${board._id}/index`) [Return] diff --git a/views/pages/home.pug b/views/pages/home.pug index c8611d9b..c82599ba 100644 --- a/views/pages/home.pug +++ b/views/pages/home.pug @@ -14,6 +14,6 @@ block content th Description each board in boards tr.table-row - td: a(href='/'+board._id) /#{board._id}/ + td: a(href=`/${board._id}/`) /#{board._id}/ td #{board.name} td #{board.description} diff --git a/views/pages/thread.pug b/views/pages/thread.pug index c726b4e3..71b8d363 100644 --- a/views/pages/thread.pug +++ b/views/pages/thread.pug @@ -16,7 +16,7 @@ block content nav.pages#top a(href='#bottom') [Bottom] | - a(href=`/${board._id}/`) [Return] + a(href=`/${board._id}/index`) [Return] | a(href=`/${board._id}/catalog`) [Catalog] hr(size=1) @@ -30,7 +30,7 @@ block content nav.pages#bottom a(href='#top') [Top] | - a(href=`/${board._id}/`) [Return] + a(href=`/${board._id}/index`) [Return] | a(href=`/${board._id}/catalog`) [Catalog] include ../includes/actionfooter.pug diff --git a/wipe.js b/wipe.js index 74687cdb..0446e250 100644 --- a/wipe.js +++ b/wipe.js @@ -99,19 +99,24 @@ const Mongo = require(__dirname+'/db/db.js') } } }); - await readdir('uploads/img/').then(async files => { + await readdir('static/img/').then(async files => { await Promise.all(files.map(async file => { - unlink(path.join('uploads/img/', file)); + unlink(path.join('static/img/', file)); })) }); - await readdir('uploads/captcha/').then(async files => { + await readdir('static/captcha/').then(async files => { await Promise.all(files.map(async file => { - unlink(path.join('uploads/captcha/', file)); + unlink(path.join('static/captcha/', file)); })) }); - await readdir('uploads/banner/').then(async files => { + await readdir('static/banner/').then(async files => { await Promise.all(files.map(async file => { - unlink(path.join('uploads/banner/', file)); + unlink(path.join('static/banner/', file)); + })) + }); + await readdir('static/html/').then(async files => { + await Promise.all(files.map(async file => { + unlink(path.join('static/html/', file)); })) }); console.log('creating admin account: admin:changeme');