mirror of
https://github.com/SillyTavern/SillyTavern.git
synced 2025-01-22 07:26:23 +01:00
parent
051cdf5548
commit
b9d5c61b2e
22
server.js
22
server.js
@ -76,6 +76,10 @@ const DEFAULT_AVOID_LOCALHOST = false;
|
|||||||
const DEFAULT_AUTORUN_HOSTNAME = 'auto';
|
const DEFAULT_AUTORUN_HOSTNAME = 'auto';
|
||||||
const DEFAULT_AUTORUN_PORT = -1;
|
const DEFAULT_AUTORUN_PORT = -1;
|
||||||
|
|
||||||
|
const DEFAULT_PROXY_ENABLED = false;
|
||||||
|
const DEFAULT_PROXY_URL = '';
|
||||||
|
const DEFAULT_PROXY_BYPASS = [];
|
||||||
|
|
||||||
const cliArguments = yargs(hideBin(process.argv))
|
const cliArguments = yargs(hideBin(process.argv))
|
||||||
.usage('Usage: <your-start-script> <command> [options]')
|
.usage('Usage: <your-start-script> <command> [options]')
|
||||||
.option('enableIPv6', {
|
.option('enableIPv6', {
|
||||||
@ -146,6 +150,18 @@ const cliArguments = yargs(hideBin(process.argv))
|
|||||||
type: 'boolean',
|
type: 'boolean',
|
||||||
default: null,
|
default: null,
|
||||||
describe: 'Enables basic authentication',
|
describe: 'Enables basic authentication',
|
||||||
|
}).option('requestProxyEnabled', {
|
||||||
|
type: 'boolean',
|
||||||
|
default: null,
|
||||||
|
describe: 'Enables request proxy',
|
||||||
|
}).option('requestProxyUrl', {
|
||||||
|
type: 'string',
|
||||||
|
default: null,
|
||||||
|
describe: 'Request proxy URL',
|
||||||
|
}).option('requestProxyBypasss', {
|
||||||
|
type: 'array',
|
||||||
|
default: null,
|
||||||
|
describe: 'Request proxy bypass',
|
||||||
}).parseSync();
|
}).parseSync();
|
||||||
|
|
||||||
// change all relative paths
|
// change all relative paths
|
||||||
@ -182,6 +198,10 @@ const dnsPreferIPv6 = cliArguments.dnsPreferIPv6 ?? getConfigValue('dnsPreferIPv
|
|||||||
|
|
||||||
const avoidLocalhost = cliArguments.avoidLocalhost ?? getConfigValue('avoidLocalhost', DEFAULT_AVOID_LOCALHOST);
|
const avoidLocalhost = cliArguments.avoidLocalhost ?? getConfigValue('avoidLocalhost', DEFAULT_AVOID_LOCALHOST);
|
||||||
|
|
||||||
|
const proxyEnabled = cliArguments.requestProxyEnabled ?? getConfigValue('requestProxy.enabled', DEFAULT_PROXY_ENABLED);
|
||||||
|
const proxyUrl = cliArguments.requestProxyUrl ?? getConfigValue('requestProxy.url', DEFAULT_PROXY_URL);
|
||||||
|
const proxyBypass = cliArguments.requestProxyBypass ?? getConfigValue('requestProxy.bypass', DEFAULT_PROXY_BYPASS);
|
||||||
|
|
||||||
if (dnsPreferIPv6) {
|
if (dnsPreferIPv6) {
|
||||||
// Set default DNS resolution order to IPv6 first
|
// Set default DNS resolution order to IPv6 first
|
||||||
dns.setDefaultResultOrder('ipv6first');
|
dns.setDefaultResultOrder('ipv6first');
|
||||||
@ -665,7 +685,7 @@ const preSetupTasks = async function () {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Add request proxy.
|
// Add request proxy.
|
||||||
initRequestProxy();
|
initRequestProxy({ enabled: proxyEnabled, url: proxyUrl, bypass: proxyBypass });
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,40 +1,44 @@
|
|||||||
const http = require('node:http');
|
const http = require('node:http');
|
||||||
const https = require('node:https');
|
const https = require('node:https');
|
||||||
|
|
||||||
const { getConfigValue, isValidUrl, color } = require('./util.js');
|
const { isValidUrl, color } = require('./util.js');
|
||||||
|
|
||||||
const LOG_HEADER = '[Request Proxy]';
|
const LOG_HEADER = '[Request Proxy]';
|
||||||
|
|
||||||
function initRequestProxy() {
|
/**
|
||||||
|
* Initialize request proxy.
|
||||||
|
* @param {ProxySettings} settings Proxy settings.
|
||||||
|
* @typedef {object} ProxySettings
|
||||||
|
* @property {boolean} enabled Whether proxy is enabled.
|
||||||
|
* @property {string} url Proxy URL.
|
||||||
|
* @property {string[]} bypass List of URLs to bypass proxy.
|
||||||
|
*/
|
||||||
|
function initRequestProxy({ enabled, url, bypass }) {
|
||||||
try {
|
try {
|
||||||
const { ProxyAgent } = require('proxy-agent');
|
const { ProxyAgent } = require('proxy-agent');
|
||||||
const proxyEnabled = getConfigValue('requestProxy.enabled', false);
|
|
||||||
|
|
||||||
// No proxy is enabled, so return
|
// No proxy is enabled, so return
|
||||||
if (!proxyEnabled) {
|
if (!enabled) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const proxyUrl = getConfigValue('requestProxy.url', '');
|
if (!url) {
|
||||||
|
|
||||||
if (!proxyUrl) {
|
|
||||||
console.error(color.red(LOG_HEADER), 'No proxy URL provided');
|
console.error(color.red(LOG_HEADER), 'No proxy URL provided');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!isValidUrl(proxyUrl)) {
|
if (!isValidUrl(url)) {
|
||||||
console.error(color.red(LOG_HEADER), 'Invalid proxy URL provided');
|
console.error(color.red(LOG_HEADER), 'Invalid proxy URL provided');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ProxyAgent uses proxy-from-env under the hood
|
// ProxyAgent uses proxy-from-env under the hood
|
||||||
// Reference: https://github.com/Rob--W/proxy-from-env
|
// Reference: https://github.com/Rob--W/proxy-from-env
|
||||||
process.env.all_proxy = proxyUrl;
|
process.env.all_proxy = url;
|
||||||
|
|
||||||
const proxyBypass = getConfigValue('requestProxy.bypass', []);
|
|
||||||
|
|
||||||
if (Array.isArray(proxyBypass) && proxyBypass.length > 0) {
|
if (Array.isArray(bypass) && bypass.length > 0) {
|
||||||
process.env.no_proxy = proxyBypass.join(',');
|
process.env.no_proxy = bypass.join(',');
|
||||||
}
|
}
|
||||||
|
|
||||||
const proxyAgent = new ProxyAgent();
|
const proxyAgent = new ProxyAgent();
|
||||||
@ -42,7 +46,7 @@ function initRequestProxy() {
|
|||||||
https.globalAgent = proxyAgent;
|
https.globalAgent = proxyAgent;
|
||||||
|
|
||||||
console.log();
|
console.log();
|
||||||
console.log(color.green(LOG_HEADER), 'Proxy URL is used:', color.blue(proxyUrl));
|
console.log(color.green(LOG_HEADER), 'Proxy URL is used:', color.blue(url));
|
||||||
console.log();
|
console.log();
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error(color.red(LOG_HEADER), 'Failed to initialize request proxy:', error);
|
console.error(color.red(LOG_HEADER), 'Failed to initialize request proxy:', error);
|
||||||
|
Loading…
Reference in New Issue
Block a user