mirror of https://gitgud.io/fatchan/jschan.git
parent
2786704849
commit
7c0561d2ec
24 changed files with 359 additions and 241 deletions
@ -1,24 +1,9 @@ |
|||||||
'use strict'; |
'use strict'; |
||||||
|
|
||||||
const Posts = require(__dirname+'/../../db/posts.js') |
|
||||||
, Bans = require(__dirname+'/../../db/bans.js') |
|
||||||
|
|
||||||
module.exports = async (req, res, next) => { |
module.exports = async (req, res, next) => { |
||||||
|
|
||||||
let reports; |
|
||||||
let bans; |
|
||||||
try { |
|
||||||
reports = await Posts.getReports(req.params.board); |
|
||||||
bans = await Bans.getBoardBans(req.params.board); |
|
||||||
} catch (err) { |
|
||||||
return next(err) |
|
||||||
} |
|
||||||
|
|
||||||
//render the page
|
|
||||||
res.render('manage', { |
res.render('manage', { |
||||||
csrf: req.csrfToken(), |
//csrf: req.csrfToken(),
|
||||||
reports, |
|
||||||
bans, |
|
||||||
}); |
}); |
||||||
|
|
||||||
} |
} |
||||||
|
@ -0,0 +1,9 @@ |
|||||||
|
'use strict'; |
||||||
|
|
||||||
|
module.exports = async (req, res, next) => { |
||||||
|
|
||||||
|
res.render('managebanners', { |
||||||
|
csrf: req.csrfToken(), |
||||||
|
}); |
||||||
|
|
||||||
|
} |
@ -0,0 +1,19 @@ |
|||||||
|
'use strict'; |
||||||
|
|
||||||
|
const Bans = require(__dirname+'/../../../db/bans.js'); |
||||||
|
|
||||||
|
module.exports = async (req, res, next) => { |
||||||
|
|
||||||
|
let bans; |
||||||
|
try { |
||||||
|
bans = await Bans.getBoardBans(req.params.board); |
||||||
|
} catch (err) { |
||||||
|
return next(err) |
||||||
|
} |
||||||
|
|
||||||
|
res.render('managebans', { |
||||||
|
csrf: req.csrfToken(), |
||||||
|
bans, |
||||||
|
}); |
||||||
|
|
||||||
|
} |
@ -0,0 +1,8 @@ |
|||||||
|
'use strict'; |
||||||
|
|
||||||
|
module.exports = { |
||||||
|
managereports: require(__dirname+'/reports.js'), |
||||||
|
managesettings: require(__dirname+'/settings.js'), |
||||||
|
managebans: require(__dirname+'/bans.js'), |
||||||
|
managebanners: require(__dirname+'/banners.js'), |
||||||
|
} |
@ -0,0 +1,19 @@ |
|||||||
|
'use strict'; |
||||||
|
|
||||||
|
const Posts = require(__dirname+'/../../../db/posts.js'); |
||||||
|
|
||||||
|
module.exports = async (req, res, next) => { |
||||||
|
|
||||||
|
let reports; |
||||||
|
try { |
||||||
|
reports = await Posts.getReports(req.params.board); |
||||||
|
} catch (err) { |
||||||
|
return next(err) |
||||||
|
} |
||||||
|
|
||||||
|
res.render('managereports', { |
||||||
|
csrf: req.csrfToken(), |
||||||
|
reports, |
||||||
|
}); |
||||||
|
|
||||||
|
} |
@ -0,0 +1,9 @@ |
|||||||
|
'use strict'; |
||||||
|
|
||||||
|
module.exports = async (req, res, next) => { |
||||||
|
|
||||||
|
res.render('managesettings', { |
||||||
|
csrf: req.csrfToken(), |
||||||
|
}); |
||||||
|
|
||||||
|
} |
@ -1,6 +1,6 @@ |
|||||||
nav.navbar#top |
nav.navbar#top |
||||||
a.nav-item(href='/') Home |
a.nav-item(href='/') Home |
||||||
a.nav-item(href='/news.html') News |
a.nav-item(href='/news.html') News |
||||||
a.nav-item(href=`/${board ? board._id+'/' : 'global'}manage.html`) Manage |
a.nav-item(href=`/${board ? board._id+'/manage/settings' : 'globalmanage'}.html`) Manage |
||||||
a.nav-item(href='/create.html') Create |
a.nav-item(href='/create.html') Create |
||||||
a.nav-item.right(href='/logout') Logout |
a.nav-item.right(href='/logout') Logout |
||||||
|
@ -0,0 +1,11 @@ |
|||||||
|
mixin managenav(selected) |
||||||
|
nav.pages |
||||||
|
a(href=`/${board._id}/index.html`) [Index] |
||||||
|
| |
||||||
|
a(href=`/${board._id}/manage/reports.html` class=(selected === 'reports' ? 'bold' : '')) [Reports] |
||||||
|
| |
||||||
|
a(href=`/${board._id}/manage/bans.html` class=(selected === 'bans' ? 'bold' : '')) [Bans] |
||||||
|
| |
||||||
|
a(href=`/${board._id}/manage/settings.html` class=(selected === 'settings' ? 'bold' : '')) [Settings] |
||||||
|
| |
||||||
|
a(href=`/${board._id}/manage/banners.html` class=(selected === 'banners' ? 'bold' : '')) [Banners] |
@ -0,0 +1,32 @@ |
|||||||
|
extends ../layout.pug |
||||||
|
include ../mixins/managenav.pug |
||||||
|
|
||||||
|
block head |
||||||
|
script(src='/js/theme.js') |
||||||
|
title /#{board._id}/ - Manage Banners |
||||||
|
|
||||||
|
block content |
||||||
|
include ../includes/boardheader.pug |
||||||
|
br |
||||||
|
+managenav('banners') |
||||||
|
hr(size=1) |
||||||
|
h4.no-m-p Add Banners: |
||||||
|
section.form-wrapper.flexleft.mt-10 |
||||||
|
form.form-post(action=`/forms/board/${board._id}/addbanners`, enctype='multipart/form-data', method='POST') |
||||||
|
input(type='hidden' name='_csrf' value=csrf) |
||||||
|
section.row |
||||||
|
.label Upload |
||||||
|
.required * |
||||||
|
input#file(type='file', name='file' multiple required) |
||||||
|
input(type='submit', value='submit') |
||||||
|
if board.banners.length > 0 |
||||||
|
hr(size=1) |
||||||
|
h4.no-m-p Delete Banners: |
||||||
|
section.form-wrapper.flexleft.mt-10 |
||||||
|
form.form-post(action=`/forms/board/${board._id}/deletebanners`, enctype='application/x-www-form-urlencoded', method='POST') |
||||||
|
input(type='hidden' name='_csrf' value=csrf) |
||||||
|
each banner in board.banners |
||||||
|
label.banner-check |
||||||
|
input(type='checkbox' name='checkedbanners[]' value=banner) |
||||||
|
img.board-banner(src=`/banner/${board._id}/${banner}` width='300' height='100') |
||||||
|
input(type='submit', value='delete') |
@ -0,0 +1,28 @@ |
|||||||
|
extends ../layout.pug |
||||||
|
include ../mixins/ban.pug |
||||||
|
include ../mixins/managenav.pug |
||||||
|
|
||||||
|
block head |
||||||
|
script(src='/js/theme.js') |
||||||
|
script(src='/js/expand.js') |
||||||
|
script(src='/js/hover.js') |
||||||
|
title /#{board._id}/ - Manage Bans & Appeals |
||||||
|
|
||||||
|
block content |
||||||
|
include ../includes/boardheader.pug |
||||||
|
br |
||||||
|
+managenav('bans') |
||||||
|
hr(size=1) |
||||||
|
h4.no-m-p Bans & Appeals: |
||||||
|
form(action=`/forms/board/${board._id}/unban` method='POST' enctype='application/x-www-form-urlencoded') |
||||||
|
input(type='hidden' name='_csrf' value=csrf) |
||||||
|
if bans.length === 0 |
||||||
|
p No bans. |
||||||
|
else |
||||||
|
for ban in bans |
||||||
|
section.thread |
||||||
|
+ban(ban) |
||||||
|
hr(size=1) |
||||||
|
section.action-wrapper |
||||||
|
input(type='submit', value='unban') |
||||||
|
|
@ -0,0 +1,25 @@ |
|||||||
|
extends ../layout.pug |
||||||
|
include ../mixins/post.pug |
||||||
|
include ../mixins/ban.pug |
||||||
|
include ../mixins/managenav.pug |
||||||
|
|
||||||
|
block head |
||||||
|
script(src='/js/all.js') |
||||||
|
title /#{board._id}/ - Manage |
||||||
|
|
||||||
|
block content |
||||||
|
include ../includes/boardheader.pug |
||||||
|
br |
||||||
|
+managenav('reports') |
||||||
|
hr(size=1) |
||||||
|
h4.no-m-p Reports: |
||||||
|
form(action=`/forms/board/${board._id}/modactions` method='POST' enctype='application/x-www-form-urlencoded') |
||||||
|
input(type='hidden' name='_csrf' value=csrf) |
||||||
|
if reports.length === 0 |
||||||
|
p No reports. |
||||||
|
else |
||||||
|
for report in reports |
||||||
|
section.thread |
||||||
|
+post(report, false, true) |
||||||
|
hr(size=1) |
||||||
|
include ../includes/actionfooter_manage.pug |
@ -0,0 +1,175 @@ |
|||||||
|
extends ../layout.pug |
||||||
|
include ../mixins/post.pug |
||||||
|
include ../mixins/ban.pug |
||||||
|
include ../mixins/managenav.pug |
||||||
|
|
||||||
|
block head |
||||||
|
script(src='/js/all.js') |
||||||
|
title /#{board._id}/ - Manage |
||||||
|
|
||||||
|
block content |
||||||
|
include ../includes/boardheader.pug |
||||||
|
br |
||||||
|
+managenav('settings') |
||||||
|
hr(size=1) |
||||||
|
h4.no-m-p Transfer ownership: |
||||||
|
section.form-wrapper.flexleft.mt-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' placeholder=board.owner required) |
||||||
|
input(type='submit', value='submit') |
||||||
|
hr(size=1) |
||||||
|
h4.no-m-p Delete board: |
||||||
|
section.form-wrapper.flexleft.mt-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.mt-10 |
||||||
|
form.form-post(action=`/forms/board/${board._id}/settings` method='POST' enctype='application/x-www-form-urlencoded') |
||||||
|
input(type='hidden' name='_csrf' value=csrf) |
||||||
|
section.row |
||||||
|
.label Board name |
||||||
|
input(type='text' name='name' value=board.settings.name) |
||||||
|
section.row |
||||||
|
.label Board Description |
||||||
|
input(type='text' name='description' value=board.settings.description) |
||||||
|
section.row |
||||||
|
.label Tags |
||||||
|
textarea(name='tags' placeholder='newline separated, max 10') #{board.settings.tags.join('\n')} |
||||||
|
section.row |
||||||
|
.label Announcement |
||||||
|
textarea(name='announcement' placeholder='supports post styling') #{board.settings.announcement.raw} |
||||||
|
section.row |
||||||
|
.label Anon Name |
||||||
|
input(type='text' name='default_name' value=board.settings.defaultName) |
||||||
|
section.row |
||||||
|
.label Max Files |
||||||
|
input(type='number' name='max_files' value=board.settings.maxFiles max=globalLimits.postFiles.max) |
||||||
|
section.row |
||||||
|
.label Allow Video Files |
||||||
|
label.postform-style.ph-5 |
||||||
|
input(type='checkbox', name='files_allow_video', value='true' checked=board.settings.allowedFileTypes.video) |
||||||
|
section.row |
||||||
|
.label Allow Image Files |
||||||
|
label.postform-style.ph-5 |
||||||
|
input(type='checkbox', name='files_allow_image', value='true' checked=board.settings.allowedFileTypes.image) |
||||||
|
section.row |
||||||
|
.label Allow Animated Image Files |
||||||
|
label.postform-style.ph-5 |
||||||
|
input(type='checkbox', name='files_allow_animated_image', value='true' checked=board.settings.allowedFileTypes.animatedImage) |
||||||
|
section.row |
||||||
|
.label Early 404 |
||||||
|
label.postform-style.ph-5 |
||||||
|
input(type='checkbox', name='early404', value='true' checked=board.settings.early404) |
||||||
|
section.row |
||||||
|
.label IDs |
||||||
|
label.postform-style.ph-5 |
||||||
|
input(type='checkbox', name='ids', value='true' checked=board.settings.ids) |
||||||
|
section.row |
||||||
|
.label Geo Flags |
||||||
|
label.postform-style.ph-5 |
||||||
|
input(type='checkbox', name='flags', value='true' checked=board.settings.flags) |
||||||
|
section.row |
||||||
|
.label User Post Deletion |
||||||
|
label.postform-style.ph-5 |
||||||
|
input(type='checkbox', name='user_post_delete', value='true' checked=board.settings.userPostDelete) |
||||||
|
section.row |
||||||
|
.label User File Spoilering |
||||||
|
label.postform-style.ph-5 |
||||||
|
input(type='checkbox', name='user_post_spoiler', value='true' checked=board.settings.userPostSpoiler) |
||||||
|
section.row |
||||||
|
.label User File Unlinking |
||||||
|
label.postform-style.ph-5 |
||||||
|
input(type='checkbox', name='user_post_unlink', value='true' checked=board.settings.userPostUnlink) |
||||||
|
section.row |
||||||
|
.label Force Anon |
||||||
|
label.postform-style.ph-5 |
||||||
|
input(type='checkbox', name='force_anon', value='true' checked=board.settings.forceAnon) |
||||||
|
section.row |
||||||
|
.label Force Thread Subject |
||||||
|
label.postform-style.ph-5 |
||||||
|
input(type='checkbox', name='force_thread_subject', value='true' checked=board.settings.forceThreadSubject) |
||||||
|
section.row |
||||||
|
.label Force Thread Message |
||||||
|
label.postform-style.ph-5 |
||||||
|
input(type='checkbox', name='force_thread_message', value='true' checked=board.settings.forceThreadMessage) |
||||||
|
section.row |
||||||
|
.label Force Thread File |
||||||
|
label.postform-style.ph-5 |
||||||
|
input(type='checkbox', name='force_thread_file', value='true' checked=board.settings.forceThreadFile) |
||||||
|
section.row |
||||||
|
.label Force Reply Message |
||||||
|
label.postform-style.ph-5 |
||||||
|
input(type='checkbox', name='force_reply_message', value='true' checked=board.settings.forceReplyMessage) |
||||||
|
section.row |
||||||
|
.label Force Reply File |
||||||
|
label.postform-style.ph-5 |
||||||
|
input(type='checkbox', name='force_reply_file', value='true' checked=board.settings.forceReplyFile) |
||||||
|
section.row |
||||||
|
.label Min Thread Message Length |
||||||
|
input(type='number' name='min_thread_message_length' value=board.settings.minThreadMessageLength max=globalLimits.messageLength.max) |
||||||
|
section.row |
||||||
|
.label Min Reply Message Length |
||||||
|
input(type='number' name='min_reply_message_length' value=board.settings.minReplyMessageLength max=globalLimits.messageLength.max) |
||||||
|
section.row |
||||||
|
.label Thread Limit |
||||||
|
input(type='number' name='thread_limit' value=board.settings.threadLimit min=globalLimits.threadLimit.min max=globalLimits.threadLimit.max) |
||||||
|
section.row |
||||||
|
.label Reply Limit |
||||||
|
input(type='number' name='reply_limit' value=board.settings.replyLimit min=globalLimits.replyLimit.min max=globalLimits.replyLimit.max) |
||||||
|
section.row |
||||||
|
.label Moderators |
||||||
|
textarea(name='moderators' placeholder='newline separated, max 10') #{board.settings.moderators.join('\n')} |
||||||
|
section.row |
||||||
|
.label Board Locked |
||||||
|
label.postform-style.ph-5 |
||||||
|
input(type='checkbox', name='locked', value='true' checked=board.settings.locked) |
||||||
|
section.row |
||||||
|
.label Unlisted |
||||||
|
label.postform-style.ph-5 |
||||||
|
input(type='checkbox', name='unlisted', value='true' checked=board.settings.unlisted) |
||||||
|
section.row |
||||||
|
.label Theme |
||||||
|
select(name='theme') |
||||||
|
each theme in themes |
||||||
|
option(value=theme selected=board.settings.theme === theme) #{theme} |
||||||
|
section.row |
||||||
|
.label Captcha Mode |
||||||
|
select(name='captcha_mode') |
||||||
|
option(value='0', selected=board.settings.captchaMode === 0) No Captcha |
||||||
|
option(value='1', selected=board.settings.captchaMode === 1) Captcha for new thread |
||||||
|
option(value='2', selected=board.settings.captchaMode === 2) Captcha for all posts |
||||||
|
section.row |
||||||
|
.label TPH Trigger Threshold |
||||||
|
input(type='number', name='tph_trigger', value=board.settings.tphTrigger) |
||||||
|
section.row |
||||||
|
.label TPH Trigger Action |
||||||
|
select(name='tph_trigger_action') |
||||||
|
option(value='0', selected=board.settings.tphTriggerAction === 0) Do nothing |
||||||
|
option(value='1', selected=board.settings.tphTriggerAction === 1) Enable captcha for new thread |
||||||
|
option(value='2', selected=board.settings.tphTriggerAction === 2) Enable captcha for all posts |
||||||
|
option(value='3', selected=board.settings.tphTriggerAction === 3) Lock Board |
||||||
|
section.row |
||||||
|
.label Filters |
||||||
|
textarea(name='filters' placeholder='newline separated, max 50') #{board.settings.filters.join('\n')} |
||||||
|
section.row |
||||||
|
.label Filter Mode |
||||||
|
select(name='filter_mode') |
||||||
|
option(value='0', selected=board.settings.filterMode === 0) Do nothing |
||||||
|
option(value='1', selected=board.settings.filterMode === 1) Block post |
||||||
|
option(value='2', selected=board.settings.filterMode === 2) Auto ban |
||||||
|
section.row |
||||||
|
.label Filter Auto Ban Duration |
||||||
|
input(type='text' name='ban_duration' placeholder='e.g. 1w' value=board.settings.filterBanDuration) |
||||||
|
input(type='submit', value='save settings') |
Loading…
Reference in new issue