mirror of
https://github.com/SillyTavern/SillyTavern.git
synced 2025-06-05 21:59:27 +02:00
check for localhost ip and ignore link-local v6, i think you need to specify an interface
This commit is contained in:
25
server.js
25
server.js
@@ -28,6 +28,7 @@ import multer from 'multer';
|
|||||||
import responseTime from 'response-time';
|
import responseTime from 'response-time';
|
||||||
import helmet from 'helmet';
|
import helmet from 'helmet';
|
||||||
import bodyParser from 'body-parser';
|
import bodyParser from 'body-parser';
|
||||||
|
import { getMatch, IPMatch, IPSubnetwork, IPRange, matches } from 'ip-matching';
|
||||||
|
|
||||||
// net related library imports
|
// net related library imports
|
||||||
import fetch from 'node-fetch';
|
import fetch from 'node-fetch';
|
||||||
@@ -383,26 +384,35 @@ function getSessionCookieAge() {
|
|||||||
|
|
||||||
async function getHasIP() {
|
async function getHasIP() {
|
||||||
let hasIPv6 = false;
|
let hasIPv6 = false;
|
||||||
|
let hasIPv6Local = false;
|
||||||
let hasIPv4 = false;
|
let hasIPv4 = false;
|
||||||
|
let hasIPv4Local = false;
|
||||||
const interfaces = os.networkInterfaces();
|
const interfaces = os.networkInterfaces();
|
||||||
|
const linkLocalV6 = getMatch('fe80::/10');
|
||||||
|
|
||||||
for (const iface of Object.values(interfaces)) {
|
for (const iface of Object.values(interfaces)) {
|
||||||
if (iface === undefined) {
|
if (iface === undefined) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
for (const info of iface) {
|
for (const info of iface) {
|
||||||
if (info.family === 'IPv6') {
|
if (info.family === 'IPv6' && !linkLocalV6.matches(info.address)) {
|
||||||
hasIPv6 = true;
|
hasIPv6 = true;
|
||||||
|
if (info.internal === true) {
|
||||||
|
hasIPv6Local = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (info.family === 'IPv4') {
|
if (info.family === 'IPv4') {
|
||||||
hasIPv4 = true;
|
hasIPv4 = true;
|
||||||
|
if (info.internal === true) {
|
||||||
|
hasIPv4Local = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (hasIPv6 && hasIPv4) break;
|
if (hasIPv6 && hasIPv4 && hasIPv6Local && hasIPv4Local) break;
|
||||||
}
|
}
|
||||||
if (hasIPv6 && hasIPv4) break;
|
if (hasIPv6 && hasIPv4 && hasIPv6Local && hasIPv4Local) break;
|
||||||
}
|
}
|
||||||
return [hasIPv6, hasIPv4];
|
return [hasIPv6, hasIPv4, hasIPv6Local, hasIPv4Local];
|
||||||
}
|
}
|
||||||
|
|
||||||
app.use(cookieSession({
|
app.use(cookieSession({
|
||||||
@@ -930,11 +940,13 @@ async function startHTTPorHTTPS(useIPv6, useIPv4) {
|
|||||||
async function startServer() {
|
async function startServer() {
|
||||||
let useIPv6 = (enableIPv6 === true);
|
let useIPv6 = (enableIPv6 === true);
|
||||||
let useIPv4 = (enableIPv4 === true);
|
let useIPv4 = (enableIPv4 === true);
|
||||||
let hasIPv6, hasIPv4;
|
let hasIPv6, hasIPv4, hasIPv6Local, hasIPv4Local, hasIPv6NonLocal, hasIPv4NonLocal;
|
||||||
|
|
||||||
|
|
||||||
if (enableIPv6 === 'auto' || enableIPv4 === 'auto') {
|
if (enableIPv6 === 'auto' || enableIPv4 === 'auto') {
|
||||||
[hasIPv6, hasIPv4] = await getHasIP();
|
[hasIPv6NonLocal, hasIPv4NonLocal, hasIPv6Local, hasIPv4Local] = await getHasIP();
|
||||||
|
|
||||||
|
hasIPv6 = listen ? hasIPv6NonLocal : hasIPv6Local;
|
||||||
if (enableIPv6 === 'auto') {
|
if (enableIPv6 === 'auto') {
|
||||||
useIPv6 = hasIPv6;
|
useIPv6 = hasIPv6;
|
||||||
}
|
}
|
||||||
@@ -947,6 +959,7 @@ async function startServer() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
hasIPv4 = listen ? hasIPv4NonLocal : hasIPv4Local;
|
||||||
if (enableIPv4 === 'auto') {
|
if (enableIPv4 === 'auto') {
|
||||||
useIPv4 = hasIPv4;
|
useIPv4 = hasIPv4;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user