mirror of
https://github.com/KubaPro010/fm-dx-webserver.git
synced 2026-07-30 16:59:15 +02:00
show the user agent
This commit is contained in:
+10
-10
@@ -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
@@ -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
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user