* board tags, and limits to tags, moderators and filters

* increase max filters

* change page to match

* add board ownership transfers (#50)
merge-requests/208/head
Tom 5 years ago committed by GitHub
parent ab27114f71
commit f0795a959f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      controllers/forms.js
  2. 4
      controllers/forms/create.js
  3. 4
      controllers/forms/deleteboard.js
  4. 3
      controllers/forms/register.js
  5. 37
      controllers/forms/transfer.js
  6. 10
      db/boards.js
  7. 0
      helpers/checks/alphanumregex.js
  8. 27
      models/forms/transferboard.js
  9. 35
      views/pages/manage.pug

@ -38,6 +38,7 @@ const express = require('express')
, uploadBannersController = require(__dirname+'/forms/uploadbanners.js')
, deleteBannersController = require(__dirname+'/forms/deletebanners.js')
, boardSettingsController = require(__dirname+'/forms/boardsettings.js')
, transferController = require(__dirname+'/forms/transfer.js')
, loginController = require(__dirname+'/forms/login.js')
, registerController = require(__dirname+'/forms/register.js')
, changePasswordController = require(__dirname+'/forms/changepassword.js')
@ -69,6 +70,7 @@ router.post('/board/:board/modactions', csrf, Boards.exists, calcPerms, banCheck
router.post('/global/actions', csrf, calcPerms, isLoggedIn, hasPerms(1), paramConverter, globalActionController); //global manage page version (muilti-board, uses mongoids
// board settings
router.post('/board/:board/transfer', csrf, Boards.exists, calcPerms, banCheck, isLoggedIn, hasPerms(2), paramConverter, transferController);
router.post('/board/:board/settings', csrf, Boards.exists, calcPerms, banCheck, isLoggedIn, hasPerms(2), paramConverter, boardSettingsController);
//add/remove banners

@ -2,7 +2,7 @@
const createBoard = require(__dirname+'/../../models/forms/create.js')
, { enableUserBoards } = require(__dirname+'/../../configs/main.json')
, boardUriRegex = require(__dirname+'/../../helpers/checks/boarduriregex.js')
, alphaNumericRegex = require(__dirname+'/../../helpers/checks/alphanumregex.js')
module.exports = async (req, res, next) => {
@ -33,7 +33,7 @@ module.exports = async (req, res, next) => {
if (req.body.uri.length > 50) {
errors.push('URI must be 50 characters or less');
}
if (boardUriRegex.test(req.body.uri) !== true) {
if (alphaNumericRegex.test(req.body.uri) !== true) {
errors.push('URI must contain a-z 0-9 only');
}
}

@ -2,7 +2,7 @@
const { Boards } = require(__dirname+'/../../db/')
, deleteBoard = require(__dirname+'/../../models/forms/deleteboard.js')
, boardUriRegex = require(__dirname+'/../../helpers/checks/boarduriregex.js')
, alphaNumericRegex = require(__dirname+'/../../helpers/checks/alphanumregex.js')
module.exports = async (req, res, next) => {
@ -14,7 +14,7 @@ module.exports = async (req, res, next) => {
if (!req.body.uri) {
errors.push('Missing URI');
}
if (boardUriRegex.test(req.body.uri) !== true) {
if (alphaNumericRegex.test(req.body.uri) !== true) {
errors.push('URI must contain a-z 0-9 only');
} else {
//no need to check these if the board name is completely invalid

@ -1,5 +1,8 @@
'use strict';
const alphaNumericRegex = require(__dirname+'/../../helpers/checks/alphanumregex.js')
, registerAccount = require(__dirname+'/../../models/forms/register.js');
module.exports = async (req, res, next) => {
const errors = [];

@ -0,0 +1,37 @@
'use strict';
const transferBoard = require(__dirname+'/../../models/forms/transferboard.js')
, alphaNumericRegex = require(__dirname+'/../../helpers/checks/alphanumregex.js');
module.exports = async (req, res, next) => {
const errors = [];
if (!req.body.username || req.body.username.length === 0) {
errors.push('Missing transfer username');
}
if (req.body.username && req.body.username.length > 50) {
errors.push('Transfer username must be at less than 50 characters');
}
if (req.body.username === res.locals.board.owner) {
errors.push('You are already board owner...');
}
if (alphaNumericRegex.test(req.body.username) !== true) {
errors.push('URI must contain a-z 0-9 only');
}
if (errors.length > 0) {
return res.status(400).render('message', {
'title': 'Bad request',
'errors': errors,
'redirect': `/${req.params.board}/manage.html`
})
}
try {
await transferBoard(req, res, next);
} catch (err) {
return next(err);
}
}

@ -11,6 +11,16 @@ module.exports = {
return db.findOne({ '_id': name });
},
setOwner: (board, username) => {
return db.updateOne({
'_id': board
}, {
'$set': {
'owner': username
}
});
},
find: () => {
return db.find({}).toArray();
},

@ -0,0 +1,27 @@
'use strict';
const { Boards, Accounts } = require(__dirname+'/../../db/');
module.exports = async (req, res, next) => {
const newOwner = await Accounts.findOne(req.body.username);
if (!newOwner) {
return res.status(400).render('message', {
'title': 'Bad request',
'message': 'Cannot transfer to account that does not exist',
'redirect': redirect
});
}
//set owner in memory and in db
res.locals.board.owner = newOwner._id;
await Boards.setOwner(req.params.board, res.locals.board.owner);
return res.render('message', {
'title': 'Success',
'message': 'Transferred ownership',
'redirect': `/${req.params.board}/index.html`
});
}

@ -8,6 +8,28 @@ block head
block content
include ../includes/boardheader.pug
br
h4.no-m-p Transfer ownership#{board.owner ? ' (Current owner: '+board.owner+')' : ''}:
section.form-wrapper.flexleft.mv-10
form.form-post(action=`/forms/board/${board._id}/transfer`, enctype='application/x-www-form-urlencoded', method='POST')
input(type='hidden' name='_csrf' value=csrf)
section.row
.label New owner username
input(type='text' name='username' required)
input(type='submit', value='submit')
hr(size=1)
h4.no-m-p Delete board:
section.form-wrapper.flexleft.mv-10
form.form-post(action=`/forms/board/${board._id}/deleteboard`, enctype='application/x-www-form-urlencoded', method='POST')
input(type='hidden' name='_csrf' value=csrf)
section.row
.label I'm sure
label.postform-style.ph-5
input(type='checkbox', name='confirm', value='true' required)
section.row
.label Board URI
input(type='text' name='uri' required)
input(type='submit', value='submit')
hr(size=1)
h4.no-m-p Settings:
section.form-wrapper.flexleft.mv-10
form.form-post(action=`/forms/board/${board._id}/settings` method='POST' enctype='application/x-www-form-urlencoded')
@ -132,19 +154,6 @@ block content
input(type='text' name='ban_duration' placeholder='e.g. 1w' value=board.settings.filterBanDuration)
input(type='submit', value='save settings')
hr(size=1)
h4.no-m-p Delete board:
section.form-wrapper.flexleft.mv-10
form.form-post(action=`/forms/board/${board._id}/deleteboard`, enctype='application/x-www-form-urlencoded', method='POST')
input(type='hidden' name='_csrf' value=csrf)
section.row
.label I'm sure
label.postform-style.ph-5
input(type='checkbox', name='confirm', value='true' required)
section.row
.label Board URI
input(type='text' name='uri' required)
input(type='submit', value='submit')
hr(size=1)
h4.no-m-p Add Banners:
section.form-wrapper.flexleft.mv-10
form.form-post(action=`/forms/board/${board._id}/addbanners`, enctype='multipart/form-data', method='POST')

Loading…
Cancel
Save