From f830b0f457ff3fb413fe52a5456cefee00239894 Mon Sep 17 00:00:00 2001 From: xiaojunnuo Date: Wed, 25 Nov 2020 22:53:05 +0800 Subject: [PATCH 01/11] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96win7=E4=BB=A3?= =?UTF-8?q?=E7=90=86=E5=BC=80=E5=85=B3=E7=9A=84=E9=80=9F=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../shell/scripts/set-system-proxy/index.js | 31 +++++++++++++++--- .../scripts/set-system-proxy/sysproxy.exe | Bin 0 -> 119296 bytes packages/core/src/shell/shell.js | 18 +++++++++- packages/gui/extra/sysproxy.exe | Bin 0 -> 119296 bytes 4 files changed, 43 insertions(+), 6 deletions(-) create mode 100644 packages/core/src/shell/scripts/set-system-proxy/sysproxy.exe create mode 100644 packages/gui/extra/sysproxy.exe 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 e3f2e73e..37b8472a 100644 --- a/packages/core/src/shell/scripts/set-system-proxy/index.js +++ b/packages/core/src/shell/scripts/set-system-proxy/index.js @@ -3,11 +3,12 @@ */ const Shell = require('../../shell') const execute = Shell.execute +const execFile = Shell.execFile const Registry = require('winreg') -// const cmd = require('node-cmd') const refreshInternetPs = require('./refresh-internet') const PowerShell = require('node-powershell') const log = require('../../../utils/util.log') +const path = require('path') const _lanIP = [ 'localhost', '127.*', @@ -33,6 +34,12 @@ const _lanIP = [ ] async function _winUnsetProxy (exec) { + // eslint-disable-next-line no-constant-condition + if (true) { + const proxyPath = path.resolve(__dirname, './extra/sysproxy.exe') + await execFile(proxyPath, ['off']) + return + } const regKey = new Registry({ hive: Registry.HKCU, key: '\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings' @@ -48,16 +55,30 @@ async function _winUnsetProxy (exec) { return true } +function getProxyExePath () { + const proxyPath = process.env.DS_SYSPROXY_PATH + if (proxyPath) { + return proxyPath + } + return path.join(__dirname, './sysproxy.exe') +} + async function _winSetProxy (exec, ip, port) { + let lanIpStr = '' + for (const string of _lanIP) { + lanIpStr += string + ';' + } + // eslint-disable-next-line no-constant-condition + if (true) { + const proxyPath = getProxyExePath() + await execFile(proxyPath, ['global', `${ip}:${port}`, lanIpStr]) + return + } const regKey = new Registry({ hive: Registry.HKCU, key: '\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings' }) - let lanIpStr = '' - for (const string of _lanIP) { - lanIpStr += string + ';' - } // log.info('lanIps:', lanIpStr, ip, port) await Promise.all([ _winAsyncRegSet(regKey, 'MigrateProxy', Registry.REG_DWORD, 1), diff --git a/packages/core/src/shell/scripts/set-system-proxy/sysproxy.exe b/packages/core/src/shell/scripts/set-system-proxy/sysproxy.exe new file mode 100644 index 0000000000000000000000000000000000000000..979858ba787ea1c56bd12c13e51c30a20e52fd8a GIT binary patch literal 119296 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

qGH(q5xtCti&&L9QAF+iXc5&z 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 { + _execFile(file, args, options, (err, stdout) => { + if (err) { + log.error('文件执行出错:', file, err) + reject(err) + return + } + log.debug('执行成功:', stdout) + resolve(stdout) + }) + }) +} + module.exports = { getSystemShell, getSystemPlatform, - execute + execute, + execFile } diff --git a/packages/gui/extra/sysproxy.exe b/packages/gui/extra/sysproxy.exe new file mode 100644 index 0000000000000000000000000000000000000000..979858ba787ea1c56bd12c13e51c30a20e52fd8a GIT binary patch literal 119296 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

qGH(q5xtCti&&L9QAF+iXc5&z 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 Date: Sat, 28 Nov 2020 21:13:37 +0800 Subject: [PATCH 02/11] =?UTF-8?q?refactor:=20sysproxy=E9=9B=86=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/core/src/config/index.js | 6 +++--- packages/core/src/shell/scripts/set-system-proxy/index.js | 3 ++- packages/core/src/utils/util.log.js | 3 ++- packages/gui/src/bridge/index.js | 1 + packages/gui/src/bridge/mitmproxy.js | 3 +-- packages/gui/src/utils/util.log.js | 3 ++- packages/gui/src/view/pages/server.vue | 6 +++--- packages/mitmproxy/src/lib/choice/index.js | 2 +- packages/mitmproxy/src/lib/interceptor/impl/proxy.js | 5 ++++- packages/mitmproxy/src/utils/util.log.js | 3 ++- 10 files changed, 21 insertions(+), 14 deletions(-) diff --git a/packages/core/src/config/index.js b/packages/core/src/config/index.js index ad5aab56..da7cecfe 100644 --- a/packages/core/src/config/index.js +++ b/packages/core/src/config/index.js @@ -49,11 +49,11 @@ module.exports = { desc: 'clone加速复制链接脚本' }, '/.*': { - proxy: 'github.com', + proxy: 'gh.docmirror.top/_proxy', backup: [ - 'gh.docmirror.top/_proxy' + 'github.com' ], - desc: '如果出现dev-sidecar报错,可能是备用加速地址dns被污染了,需要将本条配置删除' + desc: '如果出现dev-sidecar报错,可能是加速地址dns被污染了,需要将本条配置删除' } }, 'api.github.com': { 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 37b8472a..842c797f 100644 --- a/packages/core/src/shell/scripts/set-system-proxy/index.js +++ b/packages/core/src/shell/scripts/set-system-proxy/index.js @@ -36,7 +36,7 @@ const _lanIP = [ async function _winUnsetProxy (exec) { // eslint-disable-next-line no-constant-condition if (true) { - const proxyPath = path.resolve(__dirname, './extra/sysproxy.exe') + const proxyPath = getProxyExePath() await execFile(proxyPath, ['off']) return } @@ -57,6 +57,7 @@ async function _winUnsetProxy (exec) { function getProxyExePath () { const proxyPath = process.env.DS_SYSPROXY_PATH + log.info('proxyPath', proxyPath) if (proxyPath) { return proxyPath } diff --git a/packages/core/src/utils/util.log.js b/packages/core/src/utils/util.log.js index 04c8a5ae..ca6d0222 100644 --- a/packages/core/src/utils/util.log.js +++ b/packages/core/src/utils/util.log.js @@ -3,9 +3,10 @@ const config = require('../config/index') function getDefaultConfigBasePath () { return config.server.setting.userBasePath } +const level = process.env.NODE_ENV === 'development' ? 'debug' : 'info' log4js.configure({ appenders: { std: { type: 'stdout' }, file: { type: 'file', pattern: 'yyyy-MM-dd', daysToKeep: 3, filename: getDefaultConfigBasePath() + '/logs/core.log' } }, - categories: { default: { appenders: ['file', 'std'], level: 'info' } } + categories: { default: { appenders: ['file', 'std'], level: level } } }) const logger = log4js.getLogger('server') module.exports = logger diff --git a/packages/gui/src/bridge/index.js b/packages/gui/src/bridge/index.js index caa6fd4d..f539e331 100644 --- a/packages/gui/src/bridge/index.js +++ b/packages/gui/src/bridge/index.js @@ -6,6 +6,7 @@ import JSON5 from 'json5' import path from 'path' const pk = require('../../package.json') const mitmproxyPath = path.join(__dirname, 'mitmproxy.js') +process.env.DS_SYSPROXY_PATH = path.join(__dirname, '../extra/sysproxy.exe') const log = require('../utils/util.log') const getDefaultConfigBasePath = function () { return DevSidecar.api.config.get().server.setting.userBasePath diff --git a/packages/gui/src/bridge/mitmproxy.js b/packages/gui/src/bridge/mitmproxy.js index acd487ac..9cef1d7b 100644 --- a/packages/gui/src/bridge/mitmproxy.js +++ b/packages/gui/src/bridge/mitmproxy.js @@ -1,15 +1,14 @@ // eslint-disable-next-line no-unused-vars const server = require('@docmirror/mitmproxy') const configPath = process.argv[2] - const fs = require('fs') const path = require('path') const configJson = fs.readFileSync(configPath) const config = JSON.parse(configJson) - let scriptDir = '../extra/scripts/' if (process.env.NODE_ENV === 'development') { scriptDir = '../extra/scripts/' } config.setting.script.defaultDir = path.join(__dirname, scriptDir) + server.start(config) diff --git a/packages/gui/src/utils/util.log.js b/packages/gui/src/utils/util.log.js index 8507a401..3f5fd189 100644 --- a/packages/gui/src/utils/util.log.js +++ b/packages/gui/src/utils/util.log.js @@ -3,9 +3,10 @@ const DevSidecar = require('@docmirror/dev-sidecar') const getDefaultConfigBasePath = function () { return DevSidecar.api.config.get().server.setting.userBasePath } +const level = process.env.NODE_ENV === 'development' ? 'debug' : 'info' log4js.configure({ appenders: { std: { type: 'stdout' }, file: { type: 'file', pattern: 'yyyy-MM-dd', daysToKeep: 3, filename: getDefaultConfigBasePath() + '/logs/gui.log' } }, - categories: { default: { appenders: ['file', 'std'], level: 'info' } } + categories: { default: { appenders: ['file', 'std'], level: level } } }) const logger = log4js.getLogger('server') module.exports = logger diff --git a/packages/gui/src/view/pages/server.vue b/packages/gui/src/view/pages/server.vue index e3128c47..bf8233b2 100644 --- a/packages/gui/src/view/pages/server.vue +++ b/packages/gui/src/view/pages/server.vue @@ -38,8 +38,8 @@

- - + + @@ -148,7 +148,7 @@ export default { }, async openLog () { const dir = await this.$api.info.getConfigDir() - this.$api.ipc.openPath(dir + '/logs/server.log') + this.$api.ipc.openPath(dir + '/logs/') } } } diff --git a/packages/mitmproxy/src/lib/choice/index.js b/packages/mitmproxy/src/lib/choice/index.js index e7b8a6e2..69a42a89 100644 --- a/packages/mitmproxy/src/lib/choice/index.js +++ b/packages/mitmproxy/src/lib/choice/index.js @@ -39,7 +39,7 @@ class DynamicChoice { if (this.count[item]) { continue } - this.count[item] = { value: item, total: defaultTotal, error: 0, keepErrorCount: 0, successRate: 1 } + this.count[item] = { value: item, total: defaultTotal, error: 0, keepErrorCount: 0, successRate: 0.5 } defaultTotal-- } this.value = backupList.shift() diff --git a/packages/mitmproxy/src/lib/interceptor/impl/proxy.js b/packages/mitmproxy/src/lib/interceptor/impl/proxy.js index d9a70bbb..3176535c 100644 --- a/packages/mitmproxy/src/lib/interceptor/impl/proxy.js +++ b/packages/mitmproxy/src/lib/interceptor/impl/proxy.js @@ -49,7 +49,10 @@ module.exports = { rOptions.port = rOptions.protocol === 'https:' ? 443 : 80 } log.info('proxy:', rOptions.hostname, proxyTarget) - log.debug('proxy choice:', JSON.stringify(context.requestCount)) + if (context.requestCount) { + log.debug('proxy choice:', JSON.stringify(context.requestCount)) + } + return true }, is (interceptOpt) { diff --git a/packages/mitmproxy/src/utils/util.log.js b/packages/mitmproxy/src/utils/util.log.js index b7e78e86..7101b7e4 100644 --- a/packages/mitmproxy/src/utils/util.log.js +++ b/packages/mitmproxy/src/utils/util.log.js @@ -1,8 +1,9 @@ const log4js = require('log4js') const proxyConfig = require('../lib/proxy/common/config') +const level = process.env.NODE_ENV === 'development' ? 'debug' : 'info' log4js.configure({ appenders: { std: { type: 'stdout', level: 'debug' }, file: { type: 'file', pattern: 'yyyy-MM-dd', daysToKeep: 3, filename: proxyConfig.getDefaultCABasePath() + '/logs/server.log' } }, - categories: { default: { appenders: ['file', 'std'], level: 'info' } } + categories: { default: { appenders: ['file', 'std'], level: level } } }) const logger = log4js.getLogger('server') module.exports = logger From 5c723e99a5233d6905c63d4ca67aa2f8c03eb7cf Mon Sep 17 00:00:00 2001 From: xiaojunnuo Date: Sat, 28 Nov 2020 23:29:11 +0800 Subject: [PATCH 03/11] =?UTF-8?q?perf:=20=E9=87=8D=E6=9E=84=E6=A8=A1?= =?UTF-8?q?=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../shell/scripts/set-system-proxy/index.js | 2 +- packages/gui/src/background.js | 38 ++----- .../src/bridge/{index.js => api/backend.js} | 35 +++--- packages/gui/src/bridge/backend.js | 19 ++++ .../error/index.js => bridge/error/front.js} | 0 .../gui/src/bridge/file-selector/backend.js | 21 ++++ .../gui/src/bridge/file-selector/front.js | 23 ++++ packages/gui/src/bridge/front.js | 21 ++++ packages/gui/src/bridge/tongji/backend.js | 55 ++++++++++ packages/gui/src/bridge/tongji/front.js | 62 +++++++++++ .../{update-handle.js => update/backend.js} | 23 +++- .../index.js => bridge/update/front.js} | 0 packages/gui/src/main.js | 10 +- packages/gui/src/tongji.js | 103 ------------------ packages/gui/src/view/index.js | 6 +- packages/gui/src/view/modules/index.js | 9 -- packages/gui/src/view/pages/server.vue | 16 ++- 17 files changed, 269 insertions(+), 174 deletions(-) rename packages/gui/src/bridge/{index.js => api/backend.js} (90%) create mode 100644 packages/gui/src/bridge/backend.js rename packages/gui/src/{view/modules/error/index.js => bridge/error/front.js} (100%) create mode 100644 packages/gui/src/bridge/file-selector/backend.js create mode 100644 packages/gui/src/bridge/file-selector/front.js create mode 100644 packages/gui/src/bridge/front.js create mode 100644 packages/gui/src/bridge/tongji/backend.js create mode 100644 packages/gui/src/bridge/tongji/front.js rename packages/gui/src/bridge/{update-handle.js => update/backend.js} (85%) rename packages/gui/src/{view/modules/update/index.js => bridge/update/front.js} (100%) delete mode 100644 packages/gui/src/tongji.js delete mode 100644 packages/gui/src/view/modules/index.js 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 842c797f..8838c1f9 100644 --- a/packages/core/src/shell/scripts/set-system-proxy/index.js +++ b/packages/core/src/shell/scripts/set-system-proxy/index.js @@ -37,7 +37,7 @@ async function _winUnsetProxy (exec) { // eslint-disable-next-line no-constant-condition if (true) { const proxyPath = getProxyExePath() - await execFile(proxyPath, ['off']) + await execFile(proxyPath, ['set', '1']) return } const regKey = new Registry({ diff --git a/packages/gui/src/background.js b/packages/gui/src/background.js index 531878c9..dcefa2d6 100644 --- a/packages/gui/src/background.js +++ b/packages/gui/src/background.js @@ -1,11 +1,10 @@ 'use strict' /* global __static */ import path from 'path' -import { app, protocol, BrowserWindow, Menu, Tray, ipcMain } from 'electron' +import { app, protocol, BrowserWindow, Menu, Tray, ipcMain, dialog } from 'electron' import { createProtocol } from 'vue-cli-plugin-electron-builder/lib' -import bridge from './bridge/index' -import updateHandle from './bridge/update-handle' -import { ebtMain } from './tongji' +import backend from './bridge/backend' +import DevSidecar from '@docmirror/dev-sidecar' import log from './utils/util.log' // eslint-disable-next-line no-unused-vars const isMac = process.platform === 'darwin' @@ -113,7 +112,7 @@ function createWindow () { } async function beforeQuit () { - return bridge.devSidecar.api.shutdown() + return DevSidecar.api.shutdown() } async function quit (app, callback) { if (tray) { @@ -136,12 +135,6 @@ if (!isFirstInstance) { } else { app.on('before-quit', async (event) => { log.info('before-quit') - // event.preventDefault() - // // if (tray) { - // // tray.displayBalloon({ title: '正在关闭,请稍候...', content: '正在关闭中,请稍候。。。' }) - // // } - // await bridge.devSidecar.api.shutdown() - // app.exit() }) app.on('second-instance', (event, commandLine, workingDirectory) => { log.info('new app started', commandLine) @@ -180,24 +173,13 @@ if (!isFirstInstance) { // log.error('Vue Devtools failed to install:', e.toString()) // } } - createWindow() - bridge.init(win) - - let updateUrl = 'https://dev-sidecar.docmirror.cn/update/' - if (process.env.NODE_ENV === 'development') { - Object.defineProperty(app, 'isPackaged', { - get () { - return true - } - }) - updateUrl = 'https://dev-sidecar.docmirror.cn/update/' - // updateUrl = 'http://localhost/dev-sidecar/' + try { + createWindow() + const context = { win, app, beforeQuit, ipcMain, dialog,log } + backend.install(context) // 模块安装 + } catch (err) { + log.info('err', err) } - // 自动更新 - updateHandle(app, win, beforeQuit, updateUrl) - - // 百度分析 - ebtMain(ipcMain, isDevelopment) try { // 最小化到托盘 diff --git a/packages/gui/src/bridge/index.js b/packages/gui/src/bridge/api/backend.js similarity index 90% rename from packages/gui/src/bridge/index.js rename to packages/gui/src/bridge/api/backend.js index f539e331..727bb1c4 100644 --- a/packages/gui/src/bridge/index.js +++ b/packages/gui/src/bridge/api/backend.js @@ -1,13 +1,13 @@ import lodash from 'lodash' import DevSidecar from '@docmirror/dev-sidecar' -import { ipcMain, Menu } from 'electron' +import { ipcMain } from 'electron' import fs from 'fs' import JSON5 from 'json5' import path from 'path' -const pk = require('../../package.json') +const pk = require('../../../package.json') const mitmproxyPath = path.join(__dirname, 'mitmproxy.js') process.env.DS_SYSPROXY_PATH = path.join(__dirname, '../extra/sysproxy.exe') -const log = require('../utils/util.log') +const log = require('../../utils/util.log') const getDefaultConfigBasePath = function () { return DevSidecar.api.config.get().server.setting.userBasePath } @@ -171,25 +171,29 @@ function doMerge (defObj, newObj) { return newObj2 } +function invoke (api, param) { + let target = lodash.get(localApi, api) + if (target == null) { + target = lodash.get(DevSidecar.api, api) + } + if (target == null) { + log.info('找不到此接口方法:', api) + } + const ret = target(param) + // log.info('api:', api, 'ret:', ret) + return ret +} + export default { - init (win) { + install ({ win }) { // 接收view的方法调用 ipcMain.handle('apiInvoke', async (event, args) => { const api = args[0] - let target = lodash.get(localApi, api) - if (target == null) { - target = lodash.get(DevSidecar.api, api) - } - if (target == null) { - log.info('找不到此接口方法:', api) - } let param if (args.length >= 2) { param = args[1] } - const ret = target(param) - // log.info('api:', api, 'ret:', ret) - return ret + return invoke(api, param) }) // 注册从core里来的事件,并转发给view DevSidecar.api.event.register('status', (event) => { @@ -206,5 +210,6 @@ export default { // 启动所有 localApi.startup() }, - devSidecar: DevSidecar + devSidecar: DevSidecar, + invoke } diff --git a/packages/gui/src/bridge/backend.js b/packages/gui/src/bridge/backend.js new file mode 100644 index 00000000..39764669 --- /dev/null +++ b/packages/gui/src/bridge/backend.js @@ -0,0 +1,19 @@ +import api from './api/backend' +import tongji from './tongji/backend' +import update from './update/backend' +import fileSelector from './file-selector/backend' + +const modules = { + api, // 核心接口模块 + fileSelector, // 文件选择模块 + tongji, // 统计模块 + update // 自动更新 +} +export default { + install (context) { + for (const module in modules) { + modules[module].install(context) + } + }, + ...modules +} diff --git a/packages/gui/src/view/modules/error/index.js b/packages/gui/src/bridge/error/front.js similarity index 100% rename from packages/gui/src/view/modules/error/index.js rename to packages/gui/src/bridge/error/front.js diff --git a/packages/gui/src/bridge/file-selector/backend.js b/packages/gui/src/bridge/file-selector/backend.js new file mode 100644 index 00000000..63ba83d4 --- /dev/null +++ b/packages/gui/src/bridge/file-selector/backend.js @@ -0,0 +1,21 @@ +export default { + install (context) { + const { ipcMain, dialog, log } = context + ipcMain.on('file-selector', function (event, message) { + if (message.key === 'open') { + dialog.showOpenDialog({ + properties: ['openFile'], + ...message + }).then(result => { + if (result.canceled) { + event.sender.send('file-selector', { key: 'canceled' }) + } else { + event.sender.send('file-selector', { key: 'selected', value: result.filePaths }) + } + }).catch(err => { + log.error('选择文件失败', err) + }) + } + }) + } +} diff --git a/packages/gui/src/bridge/file-selector/front.js b/packages/gui/src/bridge/file-selector/front.js new file mode 100644 index 00000000..284cdce8 --- /dev/null +++ b/packages/gui/src/bridge/file-selector/front.js @@ -0,0 +1,23 @@ + +function install (app, api) { + api.fileSelector = { + open (value, options) { + return new Promise((resolve, reject) => { + api.ipc.send('file-selector', { key: 'open', value: value, ...options }) + api.ipc.on('file-selector', (event, message) => { + console.log('selector', message) + if (message.key === 'selected') { + resolve(message.value) + } else { + reject(new Error('没有选择文件')) + } + api.ipc.on('file-selector', () => {}) + }) + }) + } + } +} + +export default { + install +} diff --git a/packages/gui/src/bridge/front.js b/packages/gui/src/bridge/front.js new file mode 100644 index 00000000..18e360a1 --- /dev/null +++ b/packages/gui/src/bridge/front.js @@ -0,0 +1,21 @@ +// import api from './api/front' +import error from './error/front' +import tongji from './tongji/front' +import update from './update/front' +import fileSelector from './file-selector/front' + +const modules = { + // api, // 核心接口模块 + error, + fileSelector, // 文件选择模块 + tongji, // 统计模块 + update // 自动更新 +} +export default { + install (app, api, router) { + for (const module in modules) { + modules[module].install(app, api, router) + } + }, + ...modules +} diff --git a/packages/gui/src/bridge/tongji/backend.js b/packages/gui/src/bridge/tongji/backend.js new file mode 100644 index 00000000..294badbd --- /dev/null +++ b/packages/gui/src/bridge/tongji/backend.js @@ -0,0 +1,55 @@ + +/** + * first step + * @param {*} ipcMain + */ +const ebtMain = (ipcMain) => { + const isDevelopment = process.env.NODE_ENV !== 'production' + const request = require('request') + /* istanbul ignore else */ + if (!(ipcMain && ipcMain.on)) { + throw new TypeError('require ipcMain') + } + + // step 2 + ipcMain.on('electron-baidu-tongji-message', (event, arg) => { + // electron 生产模式下是直接请求文件系统,没有 http 地址 + // 前台拿不到 hm.js 的内容 + request({ + url: `https://hm.baidu.com/hm.js?${arg}`, + method: 'GET', + headers: { + Referer: 'https://hm.baidu.com/' + } + }, + (err, response, body) => { + if (err) { + console.error('百度统计请求出错', err) + return + } + const rource = '(h.c.b.su=h.c.b.u||document.location.href),h.c.b.u=f.protocol+"//"+document.location.host+' + /* istanbul ignore else */ + if (body && body.indexOf(rource) >= 0) { + // step 3 + let text = body + + /* istanbul ignore else */ + if (!isDevelopment) { + // 百度统计可能改规则了,不统计 file:// 开始的请求 + // 这里强制替换为 https + const target = '(h.c.b.su=h.c.b.u||"https://"+c.dm[0]+a[1]),h.c.b.u="https://"+c.dm[0]+' + const target2 = '"https://"+c.dm[0]+window.location.pathname+window.location.hash' + text = body.replace(rource, target).replace(/window.location.href/g, target2) + } + console.log('baidu tonji: ret') + event.sender.send('electron-baidu-tongji-reply', { text, isDevelopment }) + } + }) + }) +} + +export default { + install (context) { + ebtMain(context.ipcMain) + } +} diff --git a/packages/gui/src/bridge/tongji/front.js b/packages/gui/src/bridge/tongji/front.js new file mode 100644 index 00000000..023db8b3 --- /dev/null +++ b/packages/gui/src/bridge/tongji/front.js @@ -0,0 +1,62 @@ + +/** + * second step + * @param {*} ipcRenderer + * @param {*} siteId + * @param {*} router + */ +const ebtRenderer = (ipcRenderer, siteId, router) => { + /* istanbul ignore else */ + if (!(ipcRenderer && ipcRenderer.on && ipcRenderer.send)) { + throw new TypeError('require ipcRenderer') + } + + /* istanbul ignore else */ + if (!(siteId && typeof siteId === 'string')) { + throw new TypeError('require siteId') + } + + // step 4 + ipcRenderer.on('electron-baidu-tongji-reply', (_, { text, isDevelopment }) => { + console.log('electron-baidu-tongji-reply') + /* istanbul ignore else */ + if (isDevelopment) { document.body.classList.add('electron-baidu-tongji_dev') } + + window._hmt = window._hmt || [] + + const hm = document.createElement('script') + hm.text = text + + const head = document.getElementsByTagName('head')[0] + head.appendChild(hm) + + // Vue单页应用时,监听router的每次变化 + // 把虚拟的url地址赋给百度统计的API接口 + + /* istanbul ignore else */ + if (router && router.beforeEach) { + router.beforeEach((to, _, next) => { + /* istanbul ignore else */ + if (to.path) { + window._hmt.push(['_trackPageview', '/#' + to.fullPath]) + console.log('baidu trace', to.fullPath) + } + + next() + }) + } + }) + + // step 1 + ipcRenderer.send('electron-baidu-tongji-message', siteId) +} + +export default { + install (app, api, router) { + const BAIDU_SITE_ID = 'f2d170ce560aef0005b689f28697f852' + // 百度统计 + const { ipcRenderer } = require('electron') + ebtRenderer(ipcRenderer, BAIDU_SITE_ID, router) + }, + ebtRenderer +} diff --git a/packages/gui/src/bridge/update-handle.js b/packages/gui/src/bridge/update/backend.js similarity index 85% rename from packages/gui/src/bridge/update-handle.js rename to packages/gui/src/bridge/update/backend.js index 1dc2d2fa..2cb0efae 100644 --- a/packages/gui/src/bridge/update-handle.js +++ b/packages/gui/src/bridge/update/backend.js @@ -1,6 +1,5 @@ -import { ipcMain, dialog } from 'electron' +import { ipcMain } from 'electron' import { autoUpdater } from 'electron-updater' -import log from '../utils/util.log' import path from 'path' // win是所有窗口的引用 // const path = require('path') // 引入path模块 @@ -8,7 +7,7 @@ import path from 'path' // eslint-disable-next-line no-unused-vars const isMac = process.platform === 'darwin' // 检测更新,在你想要检查更新的时候执行,renderer事件触发后的操作自行编写 -function updateHandle (app, win, beforeQuit, updateUrl) { +function updateHandle (app, win, beforeQuit, updateUrl,log) { // // 更新前,删除本地安装包 ↓ // const updaterCacheDirName = 'dev-sidecar-updater' // const updatePendingPath = path.join(autoUpdater.app.baseCachePath, updaterCacheDirName, 'pending') @@ -95,4 +94,20 @@ function updateHandle (app, win, beforeQuit, updateUrl) { log.info('auto update inited') return autoUpdater } -export default updateHandle + +export default { + install (context) { + const { app, win, beforeQuit,log } = context + let updateUrl = 'https://dev-sidecar.docmirror.cn/update/' + if (process.env.NODE_ENV === 'development') { + Object.defineProperty(app, 'isPackaged', { + get () { + return true + } + }) + updateUrl = 'https://dev-sidecar.docmirror.cn/update/' + // updateUrl = 'http://localhost/dev-sidecar/' + } + updateHandle(app, win, beforeQuit, updateUrl,log) + } +} diff --git a/packages/gui/src/view/modules/update/index.js b/packages/gui/src/bridge/update/front.js similarity index 100% rename from packages/gui/src/view/modules/update/index.js rename to packages/gui/src/bridge/update/front.js diff --git a/packages/gui/src/main.js b/packages/gui/src/main.js index d78a8c4c..87e11ffb 100644 --- a/packages/gui/src/main.js +++ b/packages/gui/src/main.js @@ -7,9 +7,6 @@ import VueRouter from 'vue-router' import routes from './view/router' import DsContainer from './view/components/container' import './view/style/index.scss' -import { ipcRenderer } from 'electron' - -const tongji = require('./tongji') Vue.config.productionTip = false Vue.use(antd) @@ -28,12 +25,7 @@ view.initApi().then(async (api) => { router, render: h => h(App) }).$mount('#app') - - const BAIDU_SITE_ID = 'f2d170ce560aef0005b689f28697f852' - // 百度统计 - tongji.ebtRenderer(ipcRenderer, BAIDU_SITE_ID, router) - - view.initModules(app) + view.initModules(app, router) }) // fix vue-router NavigationDuplicated diff --git a/packages/gui/src/tongji.js b/packages/gui/src/tongji.js deleted file mode 100644 index 6ca5aa02..00000000 --- a/packages/gui/src/tongji.js +++ /dev/null @@ -1,103 +0,0 @@ - -const request = require('request') - -/** - * first step - * @param {*} ipcMain - */ -const ebtMain = (ipcMain, isDevelopment) => { - /* istanbul ignore else */ - if (!(ipcMain && ipcMain.on)) { - throw new TypeError('require ipcMain') - } - - // step 2 - ipcMain.on('electron-baidu-tongji-message', (event, arg) => { - // electron 生产模式下是直接请求文件系统,没有 http 地址 - // 前台拿不到 hm.js 的内容 - request({ - url: `https://hm.baidu.com/hm.js?${arg}`, - method: 'GET', - headers: { - Referer: 'https://hm.baidu.com/' - } - }, - (err, response, body) => { - if (err) { - console.error('百度统计请求出错', err) - return - } - const rource = '(h.c.b.su=h.c.b.u||document.location.href),h.c.b.u=f.protocol+"//"+document.location.host+' - /* istanbul ignore else */ - if (body && body.indexOf(rource) >= 0) { - // step 3 - let text = body - - /* istanbul ignore else */ - if (!isDevelopment) { - // 百度统计可能改规则了,不统计 file:// 开始的请求 - // 这里强制替换为 https - const target = '(h.c.b.su=h.c.b.u||"https://"+c.dm[0]+a[1]),h.c.b.u="https://"+c.dm[0]+' - const target2 = '"https://"+c.dm[0]+window.location.pathname+window.location.hash' - text = body.replace(rource, target).replace(/window.location.href/g, target2) - } - console.log('baidu tonji: ret') - event.sender.send('electron-baidu-tongji-reply', { text, isDevelopment }) - } - }) - }) -} - -/** - * second step - * @param {*} ipcRenderer - * @param {*} siteId - * @param {*} router - */ -const ebtRenderer = (ipcRenderer, siteId, router) => { - /* istanbul ignore else */ - if (!(ipcRenderer && ipcRenderer.on && ipcRenderer.send)) { - throw new TypeError('require ipcRenderer') - } - - /* istanbul ignore else */ - if (!(siteId && typeof siteId === 'string')) { - throw new TypeError('require siteId') - } - - // step 4 - ipcRenderer.on('electron-baidu-tongji-reply', (_, { text, isDevelopment }) => { - console.log('electron-baidu-tongji-reply') - /* istanbul ignore else */ - if (isDevelopment) { document.body.classList.add('electron-baidu-tongji_dev') } - - window._hmt = window._hmt || [] - - const hm = document.createElement('script') - hm.text = text - - const head = document.getElementsByTagName('head')[0] - head.appendChild(hm) - - // Vue单页应用时,监听router的每次变化 - // 把虚拟的url地址赋给百度统计的API接口 - - /* istanbul ignore else */ - if (router && router.beforeEach) { - router.beforeEach((to, _, next) => { - /* istanbul ignore else */ - if (to.path) { - window._hmt.push(['_trackPageview', '/#' + to.fullPath]) - console.log('baidu trace', to.fullPath) - } - - next() - }) - } - }) - - // step 1 - ipcRenderer.send('electron-baidu-tongji-message', siteId) -} - -module.exports = { ebtMain, ebtRenderer } diff --git a/packages/gui/src/view/index.js b/packages/gui/src/view/index.js index 45fb91ef..153dbde9 100644 --- a/packages/gui/src/view/index.js +++ b/packages/gui/src/view/index.js @@ -1,5 +1,5 @@ import api, { apiInit } from './api' -import modules from './modules' +import modules from '../bridge/front' import status from './status' export default { initApi: apiInit, @@ -9,7 +9,7 @@ export default { Vue.prototype.$global = { setting } await status.install(api) }, - initModules (app) { - modules.install(app, api) + initModules (app, router) { + modules.install(app, api, router) } } diff --git a/packages/gui/src/view/modules/index.js b/packages/gui/src/view/modules/index.js deleted file mode 100644 index 522310ad..00000000 --- a/packages/gui/src/view/modules/index.js +++ /dev/null @@ -1,9 +0,0 @@ -import update from './update' -import error from './error' - -export default { - install (app, api) { - error.install(app, api) - update.install(app, api) - } -} diff --git a/packages/gui/src/view/pages/server.vue b/packages/gui/src/view/pages/server.vue index bf8233b2..926e9015 100644 --- a/packages/gui/src/view/pages/server.vue +++ b/packages/gui/src/view/pages/server.vue @@ -38,8 +38,8 @@
开启此项之后,被代理应用关闭SSL校验也问题不大了
- - + + @@ -112,6 +112,18 @@ export default { mounted () { }, methods: { + async onCrtSelect () { + const value = await this.$api.fileSelector.open() + if (value != null && value.length > 0) { + this.config.server.setting.rootCaFile.certPath = value[0] + } + }, + async onKeySelect () { + const value = await this.$api.fileSelector.open() + if (value != null && value.length > 0) { + this.config.server.setting.rootCaFile.keyPath = value[0] + } + }, onJsonChange (json) { }, ready () { From 806ac046a9d9ab4a4176eb6d03a28d3a4c99c196 Mon Sep 17 00:00:00 2001 From: xiaojunnuo Date: Sun, 29 Nov 2020 00:24:43 +0800 Subject: [PATCH 04/11] =?UTF-8?q?perf:=20=E5=8D=87=E7=BA=A7=E6=97=B6?= =?UTF-8?q?=E5=8F=AF=E4=BB=A5=E5=B1=95=E7=A4=BA=E6=9B=B4=E6=96=B0=E5=86=85?= =?UTF-8?q?=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/gui/src/bridge/update/backend.js | 15 ++++++--------- packages/gui/src/bridge/update/front.js | 14 +++++++++++--- 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/packages/gui/src/bridge/update/backend.js b/packages/gui/src/bridge/update/backend.js index 2cb0efae..0237b6d3 100644 --- a/packages/gui/src/bridge/update/backend.js +++ b/packages/gui/src/bridge/update/backend.js @@ -7,7 +7,7 @@ import path from 'path' // eslint-disable-next-line no-unused-vars const isMac = process.platform === 'darwin' // 检测更新,在你想要检查更新的时候执行,renderer事件触发后的操作自行编写 -function updateHandle (app, win, beforeQuit, updateUrl,log) { +function updateHandle (app, win, beforeQuit, updateUrl, log) { // // 更新前,删除本地安装包 ↓ // const updaterCacheDirName = 'dev-sidecar-updater' // const updatePendingPath = path.join(autoUpdater.app.baseCachePath, updaterCacheDirName, 'pending') @@ -57,10 +57,7 @@ function updateHandle (app, win, beforeQuit, updateUrl,log) { log.info('download complete', info.version) win.webContents.send('update', { key: 'downloaded', - value: { - version: info.version, - releaseData: info.releaseDate - } + value: info }) }) @@ -97,7 +94,7 @@ function updateHandle (app, win, beforeQuit, updateUrl,log) { export default { install (context) { - const { app, win, beforeQuit,log } = context + const { app, win, beforeQuit, log } = context let updateUrl = 'https://dev-sidecar.docmirror.cn/update/' if (process.env.NODE_ENV === 'development') { Object.defineProperty(app, 'isPackaged', { @@ -105,9 +102,9 @@ export default { return true } }) - updateUrl = 'https://dev-sidecar.docmirror.cn/update/' - // updateUrl = 'http://localhost/dev-sidecar/' + // updateUrl = 'https://dev-sidecar.docmirror.cn/update/' + updateUrl = 'http://localhost/dev-sidecar/' } - updateHandle(app, win, beforeQuit, updateUrl,log) + updateHandle(app, win, beforeQuit, updateUrl, log) } } diff --git a/packages/gui/src/bridge/update/front.js b/packages/gui/src/bridge/update/front.js index 960f9db6..79f609a3 100644 --- a/packages/gui/src/bridge/update/front.js +++ b/packages/gui/src/bridge/update/front.js @@ -78,11 +78,19 @@ function install (app, api) { function newUpdateIsReady (value) { updateParams.downloading = false app.$confirm({ - title: '新版本已准备好', - content: `是否立即升级安装v${value.version}?`, + title: `新版本(v${value.version})已准备好,是否立即升级?`, cancelText: '暂不升级', okText: '立即升级', - // content: h =>

{value.version}更新内容:

{value.releaseNotes}
, + content: h => { + console.log(value) + if (value.releaseNotes) { + const notes = [] + for (const note of value.releaseNotes) { + notes.push(
  • {note}
  • ) + } + return
    更新内容:
      {notes}
    + } + }, onOk () { console.log('OK') api.update.doUpdateNow() From fe5764031730bc0da6419ac27997280e0fafa697 Mon Sep 17 00:00:00 2001 From: xiaojunnuo Date: Sun, 29 Nov 2020 01:16:00 +0800 Subject: [PATCH 05/11] =?UTF-8?q?perf:=20=E5=A2=9E=E5=8A=A0gg=20proxy?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/core/src/config/index.js | 8 +++++++- packages/gui/extra/scripts/google.js | 20 +++++++++++++++++++ packages/gui/src/view/style/index.scss | 7 +++++++ packages/mitmproxy/src/lib/monkey/index.js | 1 + .../middleware/InsertScriptMiddleware.js | 1 + 5 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 packages/gui/extra/scripts/google.js diff --git a/packages/core/src/config/index.js b/packages/core/src/config/index.js index da7cecfe..fcdabae2 100644 --- a/packages/core/src/config/index.js +++ b/packages/core/src/config/index.js @@ -98,7 +98,13 @@ module.exports = { '.*': { proxy: 'google-themes.proxy.ustclug.org' } }, 'www.google.com': { - '/recaptcha/.*': { proxy: 'www.recaptcha.net' } + '/recaptcha/.*': { proxy: 'www.recaptcha.net' }, + '.*': { + proxy: 'gg.docmirror.top/_yxorp', + script: [ + 'google' + ] + } }, 'fonts.gstatic.com': { '.*': { diff --git a/packages/gui/extra/scripts/google.js b/packages/gui/extra/scripts/google.js new file mode 100644 index 00000000..41b9ad72 --- /dev/null +++ b/packages/gui/extra/scripts/google.js @@ -0,0 +1,20 @@ +// ==UserScript== +// @name google增强 +// @version 1.2.4 +// @author Greper +// @description 去除ping链接 +// @match https://www.google.com/*/* +// @icon https://www.google.com/favicon.ico +// @license GPL-3.0 License +// @run-at document-end +// @namespace +// ==/UserScript== + +(function () { + console.log('google script loaded') + const aList = document.getElementsByTagName('a') + for (let i = 0; i <= aList.length; i++) { + console.log(aList[i].href) + aList[i].ping = undefined + } +})() diff --git a/packages/gui/src/view/style/index.scss b/packages/gui/src/view/style/index.scss index fe5d9ba6..224bc66d 100644 --- a/packages/gui/src/view/style/index.scss +++ b/packages/gui/src/view/style/index.scss @@ -36,3 +36,10 @@ .md-mb-10{margin-bottom: 10px;} .md-mb-15{margin-bottom: 15px;} .md-mb-20{margin-bottom: 20px;} + +ol{ + margin-block-start: 0em; + margin-block-end: 0em; + padding-inline-start: 20px; +} + diff --git a/packages/mitmproxy/src/lib/monkey/index.js b/packages/mitmproxy/src/lib/monkey/index.js index 4f3efdfe..9dafd447 100644 --- a/packages/mitmproxy/src/lib/monkey/index.js +++ b/packages/mitmproxy/src/lib/monkey/index.js @@ -71,6 +71,7 @@ const api = { load (rootDir) { scripts = {} scripts.github = loadScript(readFile(rootDir, 'github.script')) + scripts.google = loadScript(readFile(rootDir, 'google.js')) scripts.jquery = { script: readFile(rootDir, 'jquery.min.js') } scripts.global = { script: readFile(rootDir, 'global.script') } return scripts diff --git a/packages/mitmproxy/src/lib/proxy/middleware/InsertScriptMiddleware.js b/packages/mitmproxy/src/lib/proxy/middleware/InsertScriptMiddleware.js index 36451a23..3297404c 100644 --- a/packages/mitmproxy/src/lib/proxy/middleware/InsertScriptMiddleware.js +++ b/packages/mitmproxy/src/lib/proxy/middleware/InsertScriptMiddleware.js @@ -48,6 +48,7 @@ function injectScriptIntoHtml (tags, chunk, script) { if (index < 0) { continue } + console.log('insert script:', tag) const scriptBuf = Buffer.from(script) const chunkNew = Buffer.alloc(chunk.length + scriptBuf.length) chunk.copy(chunkNew, 0, 0, index) From 01eca8fafa2d86c75ac65428b974efb0b699914a Mon Sep 17 00:00:00 2001 From: xiaojunnuo Date: Sun, 29 Nov 2020 18:17:49 +0800 Subject: [PATCH 06/11] v1.2.2 --- lerna.json | 2 +- packages/core/package-lock.json | 2 +- packages/core/package.json | 4 ++-- packages/gui/package.json | 6 +++--- packages/mitmproxy/package-lock.json | 2 +- packages/mitmproxy/package.json | 2 +- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/lerna.json b/lerna.json index a205513f..1520f627 100644 --- a/lerna.json +++ b/lerna.json @@ -14,5 +14,5 @@ "ignore": [] } }, - "version": "1.2.1" + "version": "1.2.2" } diff --git a/packages/core/package-lock.json b/packages/core/package-lock.json index 2873ad73..0ac3d8c3 100644 --- a/packages/core/package-lock.json +++ b/packages/core/package-lock.json @@ -1,6 +1,6 @@ { "name": "@docmirror/dev-sidecar", - "version": "1.2.1", + "version": "1.2.2", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/core/package.json b/packages/core/package.json index 9242539e..b1ec296b 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@docmirror/dev-sidecar", - "version": "1.2.1", + "version": "1.2.2", "description": "给开发者的加速代理工具", "main": "src/index.js", "keywords": [ @@ -16,7 +16,7 @@ "start": "node ./start" }, "dependencies": { - "@docmirror/mitmproxy": "^1.2.1", + "@docmirror/mitmproxy": "^1.2.2", "agentkeepalive": "^2.1.1", "charset": "^1.0.0", "child_process": "^1.0.2", diff --git a/packages/gui/package.json b/packages/gui/package.json index f6d09cff..6a7a4fff 100644 --- a/packages/gui/package.json +++ b/packages/gui/package.json @@ -1,6 +1,6 @@ { "name": "@docmirror/dev-sidecar-gui", - "version": "1.2.1", + "version": "1.2.2", "private": false, "license": "MPL-2.0", "scripts": { @@ -14,8 +14,8 @@ }, "main": "background.js", "dependencies": { - "@docmirror/dev-sidecar": "^1.2.1", - "@docmirror/mitmproxy": "^1.2.1", + "@docmirror/dev-sidecar": "^1.2.2", + "@docmirror/mitmproxy": "^1.2.2", "ant-design-vue": "^1.6.5", "core-js": "^3.6.5", "electron-baidu-tongji": "^1.0.5", diff --git a/packages/mitmproxy/package-lock.json b/packages/mitmproxy/package-lock.json index db21126a..c54c24f9 100644 --- a/packages/mitmproxy/package-lock.json +++ b/packages/mitmproxy/package-lock.json @@ -1,6 +1,6 @@ { "name": "@docmirror/mitmproxy", - "version": "1.2.1", + "version": "1.2.2", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/mitmproxy/package.json b/packages/mitmproxy/package.json index 760f6894..e21fee66 100644 --- a/packages/mitmproxy/package.json +++ b/packages/mitmproxy/package.json @@ -1,6 +1,6 @@ { "name": "@docmirror/mitmproxy", - "version": "1.2.1", + "version": "1.2.2", "description": "", "main": "src/index.js", "keywords": [ From e91fdb564f6cf520773316b893cec3d9abc72261 Mon Sep 17 00:00:00 2001 From: xiaojunnuo Date: Sun, 29 Nov 2020 18:21:13 +0800 Subject: [PATCH 07/11] =?UTF-8?q?refactor:=20=E5=B0=8F=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/gui/package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/gui/package.json b/packages/gui/package.json index 6a7a4fff..4b2e562c 100644 --- a/packages/gui/package.json +++ b/packages/gui/package.json @@ -12,6 +12,7 @@ "postuninstall": "electron-builder install-app-deps", "electron:generate-icons": "electron-icon-builder --input=./public/icon.png --output=build --flatten" }, + "author": "docmirror.cn", "main": "background.js", "dependencies": { "@docmirror/dev-sidecar": "^1.2.2", From 95b47d866e56090023cd389314b048949393d442 Mon Sep 17 00:00:00 2001 From: xiaojunnuo Date: Sun, 29 Nov 2020 18:46:09 +0800 Subject: [PATCH 08/11] =?UTF-8?q?refactor:=20=E5=B0=8F=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 75bf8ad2..63cf10ad 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,7 @@ #### 1 下载安装包 下载安装包: -[阿里云](https://dev-sidecar.docmirror.cn/update/DevSidecar-1.2.1.exe) +[阿里云](https://dev-sidecar.docmirror.cn/update/DevSidecar-1.2.2.exe) [Gitee Release](https://gitee.com/docmirror/dev-sidecar/releases) [Github Release](https://github.com/docmirror/dev-sidecar/releases) From 7454b8e8e09286446446c75f3e922308acafec36 Mon Sep 17 00:00:00 2001 From: xiaojunnuo Date: Sun, 29 Nov 2020 19:11:15 +0800 Subject: [PATCH 09/11] =?UTF-8?q?refactor:=20=E5=B0=8F=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/core/src/config/index.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/core/src/config/index.js b/packages/core/src/config/index.js index fcdabae2..bca14da4 100644 --- a/packages/core/src/config/index.js +++ b/packages/core/src/config/index.js @@ -101,9 +101,7 @@ module.exports = { '/recaptcha/.*': { proxy: 'www.recaptcha.net' }, '.*': { proxy: 'gg.docmirror.top/_yxorp', - script: [ - 'google' - ] + desc: '呀,被你发现了,答应我,偷偷的用,别声张' } }, 'fonts.gstatic.com': { From dbb7587234169b80383e07e77d9a1b41a3ab28e4 Mon Sep 17 00:00:00 2001 From: xiaojunnuo Date: Sun, 29 Nov 2020 19:13:17 +0800 Subject: [PATCH 10/11] =?UTF-8?q?refactor:=20=E5=B0=8F=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/core/src/config/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/core/src/config/index.js b/packages/core/src/config/index.js index bca14da4..7bd25808 100644 --- a/packages/core/src/config/index.js +++ b/packages/core/src/config/index.js @@ -101,7 +101,7 @@ module.exports = { '/recaptcha/.*': { proxy: 'www.recaptcha.net' }, '.*': { proxy: 'gg.docmirror.top/_yxorp', - desc: '呀,被你发现了,答应我,偷偷的用,别声张' + desc: '呀,被你发现了,偷偷的用,别声张' } }, 'fonts.gstatic.com': { From 16aa45144dd6f917fe48cfc05637196ca297914f Mon Sep 17 00:00:00 2001 From: xiaojunnuo Date: Sun, 29 Nov 2020 19:44:56 +0800 Subject: [PATCH 11/11] =?UTF-8?q?refactor:=20=E5=B0=8F=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/core/src/config/index.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/core/src/config/index.js b/packages/core/src/config/index.js index 7bd25808..3a9110f1 100644 --- a/packages/core/src/config/index.js +++ b/packages/core/src/config/index.js @@ -74,6 +74,13 @@ module.exports = { }, // google cdn + 'www.google.com': { + '/recaptcha/.*': { proxy: 'www.recaptcha.net' }, + '.*': { + proxy: 'gg.docmirror.top/_yxorp', + desc: '呀,被你发现了,偷偷的用,别声张' + } + }, 'ajax.googleapis.com': { '.*': { proxy: 'ajax.loli.net', @@ -97,13 +104,6 @@ module.exports = { 'themes.googleusercontent.com': { '.*': { proxy: 'google-themes.proxy.ustclug.org' } }, - 'www.google.com': { - '/recaptcha/.*': { proxy: 'www.recaptcha.net' }, - '.*': { - proxy: 'gg.docmirror.top/_yxorp', - desc: '呀,被你发现了,偷偷的用,别声张' - } - }, 'fonts.gstatic.com': { '.*': { proxy: 'fonts-gstatic.proxy.ustclug.org',