beta ver of per board logs with uncensored usernames for board staff

merge-requests/208/head
fatchan 4 years ago
parent a9d08b1c28
commit 5c7924f6b7
  1. 4
      controllers/pages.js
  2. 1
      models/pages/manage/index.js
  3. 60
      models/pages/manage/logs.js
  4. 2
      views/mixins/managenav.pug
  5. 51
      views/pages/managelogs.pug

@ -13,7 +13,8 @@ const express = require('express')
, csrf = require(__dirname+'/../helpers/checks/csrfmiddleware.js')
, setMinimal = require(__dirname+'/../helpers/setminimal.js')
//page models
, { manageRecent, manageReports, manageBanners, manageSettings, manageBans, manageBoard, manageThread } = require(__dirname+'/../models/pages/manage/')
, { manageRecent, manageReports, manageBanners, manageSettings, manageBans,
manageBoard, manageThread, manageLogs } = require(__dirname+'/../models/pages/manage/')
, { globalManageSettings, globalManageReports, globalManageBans,
globalManageRecent, globalManageAccounts, globalManageNews, globalManageLogs } = require(__dirname+'/../models/pages/globalmanage/')
, { changePassword, blockBypass, home, register, login, logout, create,
@ -43,6 +44,7 @@ router.get('/randombanner', randombanner); //random banner
router.get('/:board/manage/reports.html', sessionRefresh, isLoggedIn, Boards.exists, calcPerms, hasPerms(3), csrf, manageReports);
router.get('/:board/manage/recent.html', sessionRefresh, isLoggedIn, Boards.exists, calcPerms, hasPerms(3), csrf, manageRecent);
router.get('/:board/manage/bans.html', sessionRefresh, isLoggedIn, Boards.exists, calcPerms, hasPerms(3), csrf, manageBans);
router.get('/:board/manage/logs.html', sessionRefresh, isLoggedIn, Boards.exists, calcPerms, hasPerms(3), csrf, manageLogs);
router.get('/:board/manage/settings.html', sessionRefresh, isLoggedIn, Boards.exists, calcPerms, hasPerms(2), csrf, manageSettings);
router.get('/:board/manage/banners.html', sessionRefresh, isLoggedIn, Boards.exists, calcPerms, hasPerms(2), csrf, manageBanners);
// if (mod view enabled) {

@ -5,6 +5,7 @@ module.exports = {
manageRecent: require(__dirname+'/recent.js'),
manageSettings: require(__dirname+'/settings.js'),
manageBans: require(__dirname+'/bans.js'),
manageLogs: require(__dirname+'/logs.js'),
manageBanners: require(__dirname+'/banners.js'),
manageBoard: require(__dirname+'/board.js'),
manageThread: require(__dirname+'/thread.js'),

@ -0,0 +1,60 @@
'use strict';
const { Modlogs } = require(__dirname+'/../../../db/')
, { ipHashPermLevel } = require(__dirname+'/../../../configs/main.js')
, pageQueryConverter = require(__dirname+'/../../../helpers/pagequeryconverter.js')
, decodeQueryIP = require(__dirname+'/../../../helpers/decodequeryip.js')
, hashIp = require(__dirname+'/../../../helpers/haship.js')
, limit = 50;
module.exports = async (req, res, next) => {
const { page, offset, queryString } = pageQueryConverter(req.query, limit);
let filter = {
board: req.params.board
};
const username = req.query.username;
if (username && !Array.isArray(username)) {
filter.user = username;
}
const uri = req.query.uri;
if (uri && !Array.isArray(uri)) {
filter.board = uri;
}
const ipMatch = null;//decodeQueryIP(req.query, res.locals.permLevel);
//todo fetch log entry by id and then get ip and hash
if (ipMatch) {
filter.ip = ipMatch;
}
let logs, maxPage;
try {
[logs, maxPage] = await Promise.all([
Modlogs.find(filter, offset, limit),
Modlogs.count(filter),
]);
maxPage = Math.ceil(maxPage/limit);
} catch (err) {
return next(err)
}
if (res.locals.permLevel > ipHashPermLevel) {
for (let i = 0; i < logs.length; i++) {
logs[i].ip = hashIp(logs[i].ip);
}
}
res
.set('Cache-Control', 'private, max-age=5')
.render('managelogs', {
csrf: req.csrfToken(),
queryString,
username,
uri,
ip: ipMatch ? req.query.ip : null,
logs,
page,
maxPage,
});
}

@ -12,6 +12,8 @@ mixin managenav(selected, upLevel)
|
a(href=`${upLevel ? '../' : ''}bans.html` class=(selected === 'bans' ? 'bold' : '')) [Bans]
|
a(href=`${upLevel ? '../' : ''}logs.html` class=(selected === 'logs' ? 'bold' : '')) [Logs]
|
if permLevel < 3
a(href=`${upLevel ? '../' : ''}settings.html` class=(selected === 'settings' ? 'bold' : '')) [Settings]
|

@ -0,0 +1,51 @@
extends ../layout.pug
include ../mixins/post.pug
include ../mixins/ban.pug
include ../mixins/managenav.pug
include ../mixins/boardheader.pug
block head
title /#{board._id}/ - Manage
block content
+boardheader('Logs')
br
+managenav('logs')
hr(size=1)
.form-wrapper.flexleft
h4.no-m-p Search:
form.form-post.mv-5(action=`/${board._id}/manage/logs.html` method='GET')
input(type='hidden' value=page)
.row
.label Username
input(type='text' name='username' value=username)
input(type='submit', value='Filter')
h4.no-m-p Logs:
if logs && logs.length > 0
.table-container.flex-center.mv-10.text-center
table.fw
tr
th Date
th User
th IP
th Actions
th Post IDs
th Log Message
for log in logs
tr
- const logDate = new Date(log.date);
td: time.reltime(datetime=logDate.toISOString()) #{logDate.toLocaleString(undefined, {hour12:false})}
td
| #{log.user}
|
a(href=`?username=${log.user}`) [+]
td
- const logIp = permLevel > ipHashPermLevel ? log.ip.slice(-10) : log.ip;
| #{logIp}
td #{log.actions}
td #{log.postIds}
td #{log.message || '-'}
.pages.mv-5
include ../includes/pages.pug
else
p No logs.
Loading…
Cancel
Save