From e2a309fb98cb2749b317d5f14025b048f8f8b800 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E8=89=AF?= <841369634@qq.com> Date: Sat, 28 Sep 2024 01:22:22 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=AD=E5=9B=BD=E4=BF=AE=E6=94=B9=E4=B8=BA?= =?UTF-8?q?=E5=9B=BD=E5=86=85=EF=BC=8C=E5=9B=A0=E4=B8=BA=E8=AF=A5=E8=BD=AF?= =?UTF-8?q?=E4=BB=B6=E5=8F=AF=E8=83=BD=E5=85=B6=E4=BB=96=E5=9B=BD=E5=AE=B6?= =?UTF-8?q?=E7=9A=84=E4=BA=BA=E4=B9=9F=E6=9C=89=E5=9C=A8=E7=94=A8=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/core/src/modules/proxy/index.js | 12 +-- .../shell/scripts/set-system-proxy/index.js | 82 +++++++++---------- packages/gui/src/view/pages/proxy.vue | 22 +++-- 3 files changed, 60 insertions(+), 56 deletions(-) diff --git a/packages/core/src/modules/proxy/index.js b/packages/core/src/modules/proxy/index.js index 6ce4519..eb9ac29 100644 --- a/packages/core/src/modules/proxy/index.js +++ b/packages/core/src/modules/proxy/index.js @@ -57,12 +57,12 @@ module.exports = { proxyHttp: false, // false=只代理HTTPS请求 true=同时代理HTTP和HTTPS请求 setEnv: false, - // 排除中国域名 所需配置 - excludeChinaDomainAllowList: true, // 是否排除中国域名,默认:需要排除 - autoUpdateChinaDomainAllowList: true, // 是否自动更新中国域名 - remoteChinaDomainAllowListFileUrl: 'https://raw.githubusercontent.com/pluwen/china-domain-allowlist/refs/heads/main/allow-list.sorl', - chinaDomainAllowListFileAbsolutePath: null, // 自定义 china-domain-allowlist.txt 文件位置,可以是本地文件路径 - chinaDomainAllowListFilePath: './extra/proxy/china-domain-allowlist.txt', // 内置中国域名文件 + // 排除国内域名 所需配置 + excludeDomesticDomainAllowList: true, // 是否排除国内域名,默认:需要排除 + autoUpdateDomesticDomainAllowList: true, // 是否自动更新国内域名 + remoteDomesticDomainAllowListFileUrl: 'https://raw.githubusercontent.com/pluwen/china-domain-allowlist/refs/heads/main/allow-list.sorl', + domesticDomainAllowListFileAbsolutePath: null, // 自定义 domestic-domain-allowlist.txt 文件位置,可以是本地文件路径 + domesticDomainAllowListFilePath: './extra/proxy/domestic-domain-allowlist.txt', // 内置国内域名文件 // 自定义系统代理排除列表 excludeIpList: { diff --git a/packages/core/src/shell/scripts/set-system-proxy/index.js b/packages/core/src/shell/scripts/set-system-proxy/index.js index ae88efd..c24bd18 100644 --- a/packages/core/src/shell/scripts/set-system-proxy/index.js +++ b/packages/core/src/shell/scripts/set-system-proxy/index.js @@ -50,45 +50,45 @@ async function _winUnsetProxy (exec, setEnv) { } } -function getChinaDomainAllowListTmpFilePath () { - return path.join(config.get().server.setting.userBasePath, '/china-domain-allowlist.txt') +function getDomesticDomainAllowListTmpFilePath () { + return path.join(config.get().server.setting.userBasePath, '/domestic-domain-allowlist.txt') } -async function downloadChinaDomainAllowListAsync () { +async function downloadDomesticDomainAllowListAsync () { loadConfig() - const remoteFileUrl = config.get().proxy.remoteChinaDomainAllowListFileUrl - log.info('开始下载远程 china-domain-allowlist.txt 文件:', remoteFileUrl) + const remoteFileUrl = config.get().proxy.remoteDomesticDomainAllowListFileUrl + log.info('开始下载远程 domestic-domain-allowlist.txt 文件:', remoteFileUrl) request(remoteFileUrl, (error, response, body) => { if (error) { - log.error('下载远程 china-domain-allowlist.txt 文件失败, error:', error, ', response:', response, ', body:', body) + log.error('下载远程 domestic-domain-allowlist.txt 文件失败, error:', error, ', response:', response, ', body:', body) return } if (response && response.statusCode === 200) { if (body == null || body.length < 100) { - log.warn('下载远程 china-domain-allowlist.txt 文件成功,但内容为空或内容太短,判断为无效的 china-domain-allowlist.txt 文件:', remoteFileUrl, ', body:', body) + log.warn('下载远程 domestic-domain-allowlist.txt 文件成功,但内容为空或内容太短,判断为无效的 domestic-domain-allowlist.txt 文件:', remoteFileUrl, ', body:', body) return } else { - log.info('下载远程 china-domain-allowlist.txt 文件成功:', remoteFileUrl) + log.info('下载远程 domestic-domain-allowlist.txt 文件成功:', remoteFileUrl) } let fileTxt = body try { if (fileTxt.indexOf('*.') < 0) { fileTxt = Buffer.from(fileTxt, 'base64').toString('utf8') - // log.debug('解析 base64 后的 china-domain-allowlist:', fileTxt) + // log.debug('解析 base64 后的 domestic-domain-allowlist:', fileTxt) } } catch (e) { if (fileTxt.indexOf('*.') < 0) { - log.error(`远程 china-domain-allowlist.txt 文件内容即不是base64格式,也不是要求的格式,url: ${remoteFileUrl},body: ${body}`) + log.error(`远程 domestic-domain-allowlist.txt 文件内容即不是base64格式,也不是要求的格式,url: ${remoteFileUrl},body: ${body}`) return } } // 保存到本地 - saveChinaDomainAllowListFile(fileTxt) + saveDomesticDomainAllowListFile(fileTxt) } else { - log.error('下载远程 china-domain-allowlist.txt 文件失败, response:', response, ', body:', body) + log.error('下载远程 domestic-domain-allowlist.txt 文件失败, response:', response, ', body:', body) } }) } @@ -104,25 +104,25 @@ function loadLastModifiedTimeFromTxt (fileTxt) { } } -// 保存 中国域名白名单 内容到 `~/china-domain-allowlist.txt.txt` 文件中 -function saveChinaDomainAllowListFile (fileTxt) { - const filePath = getChinaDomainAllowListTmpFilePath() +// 保存 国内域名白名单 内容到 `~/domestic-domain-allowlist.txt` 文件中 +function saveDomesticDomainAllowListFile (fileTxt) { + const filePath = getDomesticDomainAllowListTmpFilePath() fs.writeFileSync(filePath, fileTxt.replaceAll(/\r\n?/g, '\n')) - log.info('保存 china-domain-allowlist.txt 文件成功:', filePath) + log.info('保存 domestic-domain-allowlist.txt 文件成功:', filePath) - // 尝试解析和修改 china-domain-allowlist.txt 文件时间 + // 尝试解析和修改 domestic-domain-allowlist.txt 文件时间 const lastModifiedTime = loadLastModifiedTimeFromTxt(fileTxt) if (lastModifiedTime) { fs.stat(filePath, (err, stats) => { if (err) { - log.error('修改 china-domain-allowlist.txt 文件时间失败:', err) + log.error('修改 domestic-domain-allowlist.txt 文件时间失败:', err) return } // 修改文件的访问时间和修改时间为当前时间 fs.utimes(filePath, lastModifiedTime, lastModifiedTime, (utimesErr) => { if (utimesErr) { - log.error('修改 china-domain-allowlist.txt 文件时间失败:', utimesErr) + log.error('修改 domestic-domain-allowlist.txt 文件时间失败:', utimesErr) } else { log.info(`'${filePath}' 文件的修改时间已更新为其最近更新时间 '${formatDate(lastModifiedTime)}'`) } @@ -143,40 +143,40 @@ function formatDate (date) { return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}` } -function getChinaDomainAllowList () { +function getDomesticDomainAllowList () { loadConfig() - if (!config.get().proxy.excludeChinaDomainAllowList) { + if (!config.get().proxy.excludeDomesticDomainAllowList) { return null } - // 判断是否需要自动更新中国域名 - let fileAbsolutePath = config.get().proxy.chinaDomainAllowListFileAbsolutePath - if (!fileAbsolutePath && config.get().proxy.autoUpdateChinaDomainAllowList) { + // 判断是否需要自动更新国内域名 + let fileAbsolutePath = config.get().proxy.domesticDomainAllowListFileAbsolutePath + if (!fileAbsolutePath && config.get().proxy.autoUpdateDomesticDomainAllowList) { // 异步下载,下载成功后,下次系统代理生效 - downloadChinaDomainAllowListAsync().then() + downloadDomesticDomainAllowListAsync().then() } // 加载本地文件 if (!fileAbsolutePath) { - const tmpFilePath = getChinaDomainAllowListTmpFilePath() + const tmpFilePath = getDomesticDomainAllowListTmpFilePath() if (fs.existsSync(tmpFilePath)) { // 如果临时文件已存在,则使用临时文件 fileAbsolutePath = tmpFilePath - log.info('读取已下载的 china-domain-allowlist.txt 文件:', fileAbsolutePath) + log.info('读取已下载的 domestic-domain-allowlist.txt 文件:', fileAbsolutePath) } else { // 如果临时文件不存在,则使用内置文件 - fileAbsolutePath = path.join(__dirname, '../../gui/', config.get().proxy.chinaDomainAllowListFilePath) - log.info('读取内置的 china-domain-allowlist.txt 文件:', fileAbsolutePath) + fileAbsolutePath = path.join(__dirname, '../../gui/', config.get().proxy.domesticDomainAllowListFilePath) + log.info('读取内置的 domestic-domain-allowlist.txt 文件:', fileAbsolutePath) } } else { - log.info('读取自定义路径的 china-domain-allowlist.txt 文件:', fileAbsolutePath) + log.info('读取自定义路径的 domestic-domain-allowlist.txt 文件:', fileAbsolutePath) } try { return fs.readFileSync(fileAbsolutePath).toString() } catch (e) { - log.error('读取 china-domain-allowlist.txt 文件失败:', fileAbsolutePath) + log.error('读取 domestic-domain-allowlist.txt 文件失败:', fileAbsolutePath) return null } } @@ -192,21 +192,21 @@ async function _winSetProxy (exec, ip, port, setEnv) { } } - // 排除中国域名 - if (config.get().proxy.excludeChinaDomainAllowList) { + // 排除国内域名 + if (config.get().proxy.excludeDomesticDomainAllowList) { try { - let chinaDomainAllowList = getChinaDomainAllowList() - if (chinaDomainAllowList) { - chinaDomainAllowList = (chinaDomainAllowList + '\n').replaceAll(/[\r\n]+/g, '\n').replaceAll(/[^\n]*[^*.a-zA-Z\d-\n]+[^\n]*\r?\n/g, '').replaceAll(/\s*\n+\s*/g, ';') - if (chinaDomainAllowList) { - excludeIpStr += chinaDomainAllowList - log.info('系统代理排除列表拼接中国域名') + let domesticDomainAllowList = getDomesticDomainAllowList() + if (domesticDomainAllowList) { + domesticDomainAllowList = (domesticDomainAllowList + '\n').replaceAll(/[\r\n]+/g, '\n').replaceAll(/[^\n]*[^*.a-zA-Z\d-\n]+[^\n]*\r?\n/g, '').replaceAll(/\s*\n+\s*/g, ';') + if (domesticDomainAllowList) { + excludeIpStr += domesticDomainAllowList + log.info('系统代理排除列表拼接国内域名') } else { - log.info('中国域名为空,不进行系统代理排除列表拼接中国域名') + log.info('国内域名为空,不进行系统代理排除列表拼接国内域名') } } } catch (e) { - log.error('系统代理排除列表拼接中国域名失败:', e) + log.error('系统代理排除列表拼接国内域名失败:', e) } } diff --git a/packages/gui/src/view/pages/proxy.vue b/packages/gui/src/view/pages/proxy.vue index 38a3230..248e39f 100644 --- a/packages/gui/src/view/pages/proxy.vue +++ b/packages/gui/src/view/pages/proxy.vue @@ -44,20 +44,24 @@
OneNote
、MicrosoftStore
、Outlook
等UWP应用
开启代理后无法访问网络的问题base64
编码格式,也可以是未经过编码的
+ 远程国内域名白名单文件内容可以是base64
编码格式,也可以是未经过编码的