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