separate captcha page so that it can be refreshed

merge-requests/208/head
fatchan 5 years ago
parent 221fdf0a00
commit 4468455b0a
  1. 4
      build.js
  2. 22
      controllers/forms.js
  3. 6
      controllers/pages.js
  4. 1
      gulp/res/css/style.css
  5. 16
      models/pages/captchapage.js
  6. 2
      views/includes/actionfooter.pug
  7. 6
      views/includes/postform.pug
  8. 8
      views/pages/captcha.pug
  9. 2
      views/pages/changepassword.pug
  10. 2
      views/pages/register.pug

@ -143,4 +143,8 @@ module.exports = {
return render('register.html', 'register.pug');
},
buildCaptcha: () => {
return render('captcha.html', 'captcha.pug');
},
}

@ -39,6 +39,7 @@ const express = require('express')
, deleteBanners = require(__dirname+'/../models/forms/deletebanners.js')
, loginAccount = require(__dirname+'/../models/forms/login.js')
, changePassword = require(__dirname+'/../models/forms/changepassword.js')
, changeBoardSettings = require(__dirname+'/../models/forms/changeboardsettings.js')
, registerAccount = require(__dirname+'/../models/forms/register.js')
, checkPermsMiddleware = require(__dirname+'/../helpers/haspermsmiddleware.js')
, checkPerms = require(__dirname+'/../helpers/hasperms.js')
@ -196,15 +197,15 @@ router.post('/board/:board/post', Boards.exists, banCheck, postFiles, paramConve
if (!req.body.message && numFiles === 0) {
errors.push('Must provide a message or file');
}
if (!req.body.thread && (res.locals.board.settings.forceOPFile && res.locals.board.settings.maxFiles === 0)) {
if (!req.body.thread && (res.locals.board.settings.forceOPFile && res.locals.board.settings.maxFiles !== 0) && numFiles === 0) {
errors.push('Threads must include a file');
}
if (!req.body.thread && res.locals.board.settings.forceOPMessage && (!req.body.message || req.body.message.length === 0)) {
errors.push('Threads must include a message');
}
if (req.body.message) {
if (req.body.message.length > 2000) {
errors.push('Message must be 2000 characters or less');
if (req.body.message.length > 4000) {
errors.push('Message must be 4000 characters or less');
} else if (req.body.message.length < res.locals.board.settings.minMessageLength) {
errors.push(`Message must be at least ${res.locals.board.settings.minMessageLength} characters long`);
}
@ -260,6 +261,9 @@ router.post('/board/:board/settings', csrf, Boards.exists, checkPermsMiddleware,
if (typeof req.body.max_files === 'number' && (req.body.max_files < 1 || req.body.max_files > 3)) {
errors.push('Max files must be 1-3');
}
if (typeof req.body.min_message_length === 'number' && (req.body.min_message_length < 0 || req.body.min_message_length > 4000)) {
errors.push('Min message length must be 0-4000. 0 is disabled.');
}
if (errors.length > 0) {
return res.status(400).render('message', {
@ -270,10 +274,7 @@ router.post('/board/:board/settings', csrf, Boards.exists, checkPermsMiddleware,
}
try {
return res.status(501).render('message', {
'title': 'Not implemented',
'redirect': `/${req.params.board}/manage.html`
})
await changeBoardSettings(req, res, next);
} catch (err) {
return next(err);
}
@ -538,5 +539,12 @@ router.post('/global/unban', csrf, checkPermsMiddleware, paramConverter, async(r
});
router.post('/newcaptcha', async(req, res, next) => {
res.clearCookie('captchaid');
return res.redirect('/captcha.html');
});
module.exports = router;

@ -18,6 +18,7 @@ const express = require('express')
, board = require(__dirname+'/../models/pages/board.js')
, catalog = require(__dirname+'/../models/pages/catalog.js')
, banners = require(__dirname+'/../models/pages/banners.js')
, captchaPage = require(__dirname+'/../models/pages/captchapage.js')
, captcha = require(__dirname+'/../models/pages/captcha.js')
, thread = require(__dirname+'/../models/pages/thread.js');
@ -30,6 +31,9 @@ router.get('/login.html', login);
//registration page
router.get('/register.html', register);
//captcha page
router.get('/captcha.html', captchaPage);
//change password page
router.get('/changepassword.html', changePassword);
@ -42,7 +46,7 @@ router.get('/logout', isLoggedIn, (req, res, next) => {
});
// get captcha
// get captcha image and cookie
router.get('/captcha', captcha);
// random board banner

@ -23,6 +23,7 @@ pre {
font-family: inherit;
margin: 1em 2em;
white-space: pre-wrap;
word-break: break-word;
}
.replies {

@ -0,0 +1,16 @@
'use strict';
const { buildCaptcha } = require(__dirname+'/../../build.js')
, uploadDirectory = require(__dirname+'/../../helpers/uploadDirectory.js');
module.exports = async (req, res, next) => {
try {
await buildCaptcha();
} catch (err) {
return next(err);
}
return res.sendFile(`${uploadDirectory}html/captcha.html`);
}

@ -54,6 +54,6 @@ details.toggle-label
input#report(type='text', name='ban_reason', placeholder='ban reason' autocomplete='off')
.actions
h4.no-m-p Captcha:
img.captcha(src='/captcha' width=200 height=80)
iframe.captcha(src='/captcha.html' width=200 height=110 scrolling='no')
input#captcha(type='text', name='captcha', autocomplete='off' placeholder='captcha text' maxlength='6')
input(type='submit', value='submit')

@ -5,7 +5,7 @@ section.form-wrapper.flex-center
unless board.settings.forceAnon
section.postform-row
.postform-label Name
input#name(type='text', name='name', placeholder=board.defaultName autocomplete='off' maxlength='50')
input#name(type='text', name='name', placeholder=board.settings.defaultName autocomplete='off' maxlength='50')
a.close.postform-style.ml-1(href='#!') X
section.postform-row
.postform-label Subject
@ -26,7 +26,7 @@ section.form-wrapper.flex-center
input#title(type='text', name='subject', autocomplete='off' maxlength='50')
section.postform-row
.postform-label Message
textarea#message(name='message', rows='5', autocomplete='off' maxlength='2000')
textarea#message(name='message', rows='5', autocomplete='off' maxlength='4000')
if board.settings.maxFiles !== 0
section.postform-row
.postform-label Files
@ -41,6 +41,6 @@ section.form-wrapper.flex-center
section.postform-row
.postform-label Captcha
.postform-col
img.captcha(src='/captcha' width=200 height=80)
iframe.captcha(src='/captcha.html' width=200 height=110 scrolling='no')
input#captcha(type='text', name='captcha', autocomplete='off' placeholder='captcha text' maxlength='6')
input(type='submit', value=`New ${threads ? 'Thread' : 'Reply'}`)

@ -0,0 +1,8 @@
doctype html
html
head
link(rel='stylesheet', href='/css/style.css')
body(style='margin:0;padding:0;background:white;')
img(src='/captcha', style='width:200px;height:80px;')
form(action='/forms/newcaptcha', method='POST')
input(style='width: 100%;border-width: 1px 0 0 0;', type='submit', value='New Captcha')

@ -22,6 +22,6 @@ block content
section.postform-row
.postform-label Captcha
span.postform-col
img.captcha(src='/captcha' width=200 height=80)
iframe.captcha(src='/captcha.html' width=200 height=110 scrolling='no')
input#captcha(type='text', name='captcha', autocomplete='off' placeholder='captcha text' maxlength='6')
input(type='submit', value='Change Password')

@ -19,7 +19,7 @@ block content
section.postform-row
.postform-label Captcha
span.postform-col
img.captcha(src='/captcha' width=200 height=80)
iframe.captcha(src='/captcha.html' width=200 height=110 scrolling='no')
input#captcha(type='text', name='captcha', autocomplete='off' placeholder='captcha text' maxlength='6')
input(type='submit', value='Register')
p Already have an account? #[a(href='/login.html') Login]

Loading…
Cancel
Save