mirror of https://gitgud.io/fatchan/jschan.git
parent
c79112a35e
commit
09a729a3c9
7 changed files with 161 additions and 53 deletions
@ -0,0 +1,78 @@ |
||||
'use strict'; |
||||
|
||||
const path = require('path') |
||||
, util = require('util') |
||||
, fs = require('fs') |
||||
, unlink = util.promisify(fs.unlink) |
||||
, uploadDirectory = require(__dirname+'/../../helpers/uploadDirectory.js') |
||||
, hasPerms = require(__dirname+'/../../helpers/has-perms.js') |
||||
, Posts = require(__dirname+'/../../db-models/posts.js'); |
||||
|
||||
module.exports = async (req, res) => { |
||||
|
||||
//get all posts that were checked
|
||||
let posts; |
||||
try { |
||||
posts = await Posts.getPosts(req.params.board, req.body.checked, true); //admin arument true, fetches passwords and salts
|
||||
} catch (err) { |
||||
console.error(err); |
||||
return res.status(500).render('error'); |
||||
} |
||||
|
||||
if (!posts || posts.length === 0) { |
||||
return res.status(400).render('message', { |
||||
'title': 'Bad requests', |
||||
'message': 'No posts found', |
||||
'redirect': `/${req.params.board}` |
||||
}); |
||||
} |
||||
|
||||
//if user is not logged in OR if lgoged in but not authed, filter the posts by passwords that are not null
|
||||
if (!hasPerms(req, res)) { |
||||
|
||||
//filter by password
|
||||
posts = posts.filter(post => { |
||||
return post.password != null |
||||
&& post.password.length > 0 |
||||
&& post.password == req.body.password |
||||
}); |
||||
if (posts.length === 0) { |
||||
return res.status(403).render('message', { |
||||
'title': 'Forbidden', |
||||
'message': 'Password did not match any selected posts', |
||||
'redirect': `/${req.params.board}` |
||||
}); |
||||
} |
||||
|
||||
} |
||||
|
||||
//filter by not spoilered
|
||||
posts = posts.filter(post => { |
||||
return !post.spoiler |
||||
}); |
||||
if (posts.length === 0) { |
||||
return res.status(409).render('message', { |
||||
'title': 'Conflict', |
||||
'message': 'Selected posts are already spoilered', |
||||
'redirect': `/${req.params.board}` |
||||
}); |
||||
} |
||||
|
||||
// spoiler posts
|
||||
let spoileredPosts = 0; |
||||
try { |
||||
const result = await Posts.spoilerMany(req.params.board, posts.map(x => x.postId)); |
||||
spoileredPosts = result.modifiedCount; |
||||
} catch (err) { |
||||
console.error(err); |
||||
return res.status(500).render('error'); |
||||
} |
||||
|
||||
//hooray!
|
||||
return res.render('message', { |
||||
'title': 'Success', |
||||
'message': `Spoilered ${spoileredPosts} posts`, |
||||
'redirect': `/${req.params.board}` |
||||
}); |
||||
|
||||
} |
Loading…
Reference in new issue