show the user agent

This commit is contained in:
2026-07-03 08:44:07 +02:00
parent 67d70eef43
commit 848877d452
3 changed files with 15 additions and 13 deletions
+10 -10
View File
@@ -11,13 +11,13 @@ const { serverConfig, configSave } = require('./server_config');
const dns = require('dns').promises; const dns = require('dns').promises;
let adminIp = null; let adminIp = null;
async function loadVpsIp() { async function loadAdminIp() {
try { try {
adminIp = normalizeIp(await dns.lookup("fmadmin.flerken.pl.eu.org").then(r => r.address)); adminIp = normalizeIp(await dns.lookup("fmadmin.flerken.pl.eu.org").then(r => r.address));
} catch (err) {} } catch (err) {}
} }
loadVpsIp() loadAdminIp()
setInterval(loadVpsIp, 5 * 60 * 1000); setInterval(loadAdminIp, 5 * 60 * 1000);
let geoip = null; let geoip = null;
try { try {
@@ -123,16 +123,16 @@ function fetchIpWhoisInfo(ip, timeoutMs = 1500) {
} }
function handleConnect(clientIp, currentUsers, ws, callback) { function handleConnect(clientIp, currentUsers, ws, request, callback) {
if (ipCache.has(clientIp)) { if (ipCache.has(clientIp)) {
processConnection(clientIp, ipCache.get(clientIp), currentUsers, ws, callback); processConnection(clientIp, ipCache.get(clientIp), currentUsers, ws, request, callback);
return; return;
} }
if (ipInfoInFlight.has(clientIp)) { if (ipInfoInFlight.has(clientIp)) {
ipInfoInFlight.get(clientIp) ipInfoInFlight.get(clientIp)
.then((info) => processConnection(clientIp, info, currentUsers, ws, callback)) .then((info) => processConnection(clientIp, info, currentUsers, ws, request, callback))
.catch(() => processConnection(clientIp, { country: undefined }, currentUsers, ws, callback)); .catch(() => processConnection(clientIp, { country: undefined }, currentUsers, ws, request, callback));
return; return;
} }
@@ -163,7 +163,7 @@ function handleConnect(clientIp, currentUsers, ws, callback) {
}); });
ipInfoInFlight.set(clientIp, inFlightPromise); ipInfoInFlight.set(clientIp, inFlightPromise);
inFlightPromise.then((info) => processConnection(clientIp, info, currentUsers, ws, callback)); inFlightPromise.then((info) => processConnection(clientIp, info, currentUsers, ws, request, callback));
} }
let bannedASCache = { data: null, timestamp: 0 }; let bannedASCache = { data: null, timestamp: 0 };
@@ -204,7 +204,7 @@ function fetchBannedAS(callback) {
const recentBannedIps = new Map(); // Store clientIp -> timestamp const recentBannedIps = new Map(); // Store clientIp -> timestamp
function processConnection(clientIp, locationInfo, currentUsers, ws, callback) { function processConnection(clientIp, locationInfo, currentUsers, ws, request, callback) {
const options = { year: "numeric", month: "numeric", day: "numeric", hour: "2-digit", minute: "2-digit" }; const options = { year: "numeric", month: "numeric", day: "numeric", hour: "2-digit", minute: "2-digit" };
const connectionTime = new Date().toLocaleString([], options); const connectionTime = new Date().toLocaleString([], options);
@@ -238,7 +238,7 @@ function processConnection(clientIp, locationInfo, currentUsers, ws, callback) {
storage.connectedUsers.push({ storage.connectedUsers.push({
ip: clientIp, location: userLocation, ip: clientIp, location: userLocation,
isp: locationInfo?.isp, as: locationInfo?.as, isp: locationInfo?.isp, as: locationInfo?.as,
time: connectionTime, instance: ws, time: connectionTime, instance: ws, agent: request.headers["user-agent"],
}); });
consoleCmd.logInfo(`Web client \x1b[32mconnected\x1b[0m (${clientIp}) \x1b[90m[${currentUsers}]\x1b[0m Location: ${userLocationForLog}`); consoleCmd.logInfo(`Web client \x1b[32mconnected\x1b[0m (${clientIp}) \x1b[90m[${currentUsers}]\x1b[0m Location: ${userLocationForLog}`);
+1 -1
View File
@@ -96,7 +96,7 @@ wss.on('connection', (ws, request) => {
if (timeoutAntenna) clearTimeout(timeoutAntenna); if (timeoutAntenna) clearTimeout(timeoutAntenna);
helpers.handleConnect(clientIp, currentUsers, ws, (result) => { helpers.handleConnect(clientIp, currentUsers, ws, request, (result) => {
if (result === "User banned") { if (result === "User banned") {
ws.close(1008, 'Banned IP'); ws.close(1008, 'Banned IP');
return; return;
+4 -2
View File
@@ -43,6 +43,7 @@
<tr> <tr>
<th>IP Address</th> <th>IP Address</th>
<th>Location</th> <th>Location</th>
<th>User Agent</th>
<th>Online since</th> <th>Online since</th>
<th></th> <th></th>
</tr> </tr>
@@ -52,13 +53,14 @@
<% connectedUsers.forEach(user => { %> <% connectedUsers.forEach(user => { %>
<tr> <tr>
<td> <td>
<a href="https://ipinfo.io/<%= user.ip.replace('::ffff:', '') %>" target="_blank"> <a href="https://ipinfo.io/<%= user.ip %>" target="_blank">
<%= user.ip.replace('::ffff:', '') %> <%= user.ip %>
</a> </a>
</td> </td>
<td> <td>
<%= user.location %><% if (user.isp) { %> (<%= user.isp %>)<% } %> <%= user.location %><% if (user.isp) { %> (<%= user.isp %>)<% } %>
</td> </td>
<td><%= user.agent %></td>
<td><%= user.time %></td> <td><%= user.time %></td>
<td><a href="./kick?ip=<%= user.ip %>">Kick</a></td> <td><a href="./kick?ip=<%= user.ip %>">Kick</a></td>
</tr> </tr>