mirror of https://gitgud.io/fatchan/jschan.git
parent
a9d08b1c28
commit
5c7924f6b7
5 changed files with 117 additions and 1 deletions
@ -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, |
||||
}); |
||||
|
||||
} |
@ -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…
Reference in new issue