fix: 重构加速服务传参方式,修复用户名中间有空格时安装根证书目录位置不对的bug
parent
f085bfbbaf
commit
c782d11816
|
@ -1,7 +1,7 @@
|
|||
const Shell = require('./shell')
|
||||
const lodash = require('lodash')
|
||||
const defConfig = require('./config/index.js')
|
||||
const proxyServer = require('@docmirror/mitmproxy')
|
||||
|
||||
let configTarget = lodash.cloneDeep(defConfig)
|
||||
function _deleteDisabledItem (target) {
|
||||
lodash.forEach(target, (item, key) => {
|
||||
|
@ -13,6 +13,7 @@ function _deleteDisabledItem (target) {
|
|||
}
|
||||
})
|
||||
}
|
||||
|
||||
const configApi = {
|
||||
get () {
|
||||
return configTarget
|
||||
|
@ -68,7 +69,7 @@ const configApi = {
|
|||
})
|
||||
if (list.length > 0) {
|
||||
const context = {
|
||||
ca_cert_path: proxyServer.config.getDefaultCACertPath()
|
||||
root_ca_cert_path: configApi.get().server.setting.rootCaFile.certPath
|
||||
}
|
||||
for (const item of noSetList) {
|
||||
if (item.value.indexOf('${') >= 0) {
|
||||
|
|
|
@ -1,3 +1,14 @@
|
|||
const path = require('path')
|
||||
function getUserBasePath () {
|
||||
const userHome = process.env.USERPROFILE
|
||||
return path.resolve(userHome, './.dev-sidecar')
|
||||
}
|
||||
function getRootCaCertPath () {
|
||||
return getUserBasePath() + '/dev-sidecar.ca.crt'
|
||||
}
|
||||
function getRootCaKeyPath () {
|
||||
return getUserBasePath() + '/dev-sidecar.ca.key.pem'
|
||||
}
|
||||
module.exports = {
|
||||
server: {
|
||||
enabled: true,
|
||||
|
@ -7,6 +18,11 @@ module.exports = {
|
|||
script: {
|
||||
enabled: true,
|
||||
defaultDir: '../../../scripts/'
|
||||
},
|
||||
userBasePath: getUserBasePath(),
|
||||
rootCaFile: {
|
||||
certPath: getRootCaCertPath(),
|
||||
keyPath: getRootCaKeyPath()
|
||||
}
|
||||
},
|
||||
intercepts: {
|
||||
|
|
|
@ -4,15 +4,12 @@ const event = require('./event')
|
|||
const shell = require('./shell')
|
||||
const modules = require('./modules')
|
||||
const lodash = require('lodash')
|
||||
const proxyServer = require('@docmirror/mitmproxy')
|
||||
const proxyConfig = proxyServer.config
|
||||
const log = require('./utils/util.log')
|
||||
const context = {
|
||||
config,
|
||||
shell,
|
||||
status,
|
||||
event,
|
||||
rootCaFile: proxyConfig.getDefaultCACertPath(),
|
||||
log
|
||||
}
|
||||
|
||||
|
@ -127,6 +124,7 @@ module.exports = {
|
|||
shell,
|
||||
server,
|
||||
proxy,
|
||||
plugin
|
||||
plugin,
|
||||
log
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
const nodeConfig = require('./config')
|
||||
const NodePlugin = function (context) {
|
||||
const { config, shell, event, rootCaFile, log } = context
|
||||
const { config, shell, event, log } = context
|
||||
const nodeApi = {
|
||||
async start () {
|
||||
try {
|
||||
|
@ -101,16 +101,17 @@ const NodePlugin = function (context) {
|
|||
NODE_TLS_REJECT_UNAUTHORIZED: false
|
||||
*/
|
||||
const nodeConfig = config.get().plugin.node
|
||||
const rootCaCertFile = config.get().server.setting.rootCaFile.certPath
|
||||
if (nodeConfig.setting['strict-ssl']) {
|
||||
cmds.push('npm config set strict-ssl false')
|
||||
}
|
||||
if (nodeConfig.setting.cafile) {
|
||||
cmds.push(`npm config set cafile "${rootCaFile}"`)
|
||||
cmds.push(`npm config set cafile "${rootCaCertFile}"`)
|
||||
}
|
||||
|
||||
if (nodeConfig.setting.NODE_EXTRA_CA_CERTS) {
|
||||
cmds.push(`npm config set NODE_EXTRA_CA_CERTS "${rootCaFile}"`)
|
||||
env.push({ key: 'NODE_EXTRA_CA_CERTS', value: rootCaFile })
|
||||
cmds.push(`npm config set NODE_EXTRA_CA_CERTS "${rootCaCertFile}"`)
|
||||
env.push({ key: 'NODE_EXTRA_CA_CERTS', value: rootCaCertFile })
|
||||
}
|
||||
|
||||
if (nodeConfig.setting.NODE_TLS_REJECT_UNAUTHORIZED) {
|
||||
|
|
|
@ -4,6 +4,7 @@ const status = require('../../status')
|
|||
const lodash = require('lodash')
|
||||
const fork = require('child_process').fork
|
||||
const log = require('../../utils/util.log')
|
||||
const fs = require('fs')
|
||||
let server
|
||||
function fireStatus (status) {
|
||||
event.fire('status', { key: 'server.enabled', value: status })
|
||||
|
@ -45,7 +46,10 @@ const serverApi = {
|
|||
})
|
||||
}
|
||||
// fireStatus('ing') // 启动中
|
||||
const serverProcess = fork(mitmproxyPath, [JSON.stringify(serverConfig)])
|
||||
const basePath = serverConfig.setting.userBasePath
|
||||
const runningConfig = basePath + '/running.json'
|
||||
fs.writeFileSync(runningConfig, JSON.stringify(serverConfig))
|
||||
const serverProcess = fork(mitmproxyPath, [runningConfig])
|
||||
server = {
|
||||
id: serverProcess.pid,
|
||||
process: serverProcess,
|
||||
|
@ -64,7 +68,7 @@ const serverApi = {
|
|||
event.fire('error', { key: 'server', value: 'EADDRINUSE', error: msg.event })
|
||||
}
|
||||
})
|
||||
return { port: config.port }
|
||||
return { port: runningConfig.port }
|
||||
},
|
||||
async kill () {
|
||||
if (server) {
|
||||
|
|
|
@ -1,17 +1,16 @@
|
|||
const Shell = require('../shell')
|
||||
const execute = Shell.execute
|
||||
const proxyServer = require('@docmirror/mitmproxy')
|
||||
const executor = {
|
||||
async windows (exec) {
|
||||
const cmds = ['start ' + proxyServer.config.getDefaultCACertPath()]
|
||||
async windows (exec, { certPath }) {
|
||||
const cmds = ['start "" "' + certPath + '"']
|
||||
// eslint-disable-next-line no-unused-vars
|
||||
const ret = await exec(cmds, { type: 'cmd' })
|
||||
return true
|
||||
},
|
||||
async linux (exec, { port }) {
|
||||
async linux (exec, { certPath }) {
|
||||
throw Error('暂未实现此功能')
|
||||
},
|
||||
async mac (exec, { port }) {
|
||||
async mac (exec, { certPath }) {
|
||||
throw Error('暂未实现此功能')
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
const log4js = require('log4js')
|
||||
const path = require('path')
|
||||
const getDefaultConfigBasePath = function () {
|
||||
const userHome = process.env.USERPROFILE
|
||||
return path.resolve(userHome, './.dev-sidecar')
|
||||
const config = require('../config/index')
|
||||
function getDefaultConfigBasePath () {
|
||||
return config.server.setting.userBasePath
|
||||
}
|
||||
log4js.configure({
|
||||
appenders: { std: { type: 'stdout' }, file: { type: 'file', pattern: 'yyyy-MM-dd', daysToKeep: 3, filename: getDefaultConfigBasePath() + '/logs/core.log' } },
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
const proxyConfig = require('@docmirror/mitmproxy/config.js')
|
||||
module.exports = {
|
||||
}
|
|
@ -1,7 +1,10 @@
|
|||
// eslint-disable-next-line no-unused-vars
|
||||
const server = require('@docmirror/mitmproxy')
|
||||
const config = JSON.parse(process.argv[2])
|
||||
const configPath = process.argv[2]
|
||||
const fs = require('fs')
|
||||
const path = require('path')
|
||||
const configJson = fs.readFileSync(configPath)
|
||||
const config = JSON.parse(configJson)
|
||||
const scriptDir = '../../gui/extra/scripts/'
|
||||
config.setting.script.defaultDir = path.join(__dirname, scriptDir)
|
||||
server.start(config)
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
abort: true
|
||||
},
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
plugin: {
|
||||
node: {
|
||||
|
|
|
@ -8,8 +8,7 @@ const pk = require('../../package.json')
|
|||
const mitmproxyPath = path.join(__dirname, 'mitmproxy.js')
|
||||
const log = require('../utils/util.log')
|
||||
const getDefaultConfigBasePath = function () {
|
||||
const userHome = process.env.USERPROFILE
|
||||
return path.resolve(userHome, './.dev-sidecar')
|
||||
return DevSidecar.api.config.get().server.setting.userBasePath
|
||||
}
|
||||
const localApi = {
|
||||
/**
|
||||
|
|
|
@ -1,12 +1,15 @@
|
|||
// eslint-disable-next-line no-unused-vars
|
||||
const server = require('@docmirror/mitmproxy')
|
||||
const config = JSON.parse(process.argv[2])
|
||||
const configPath = process.argv[2]
|
||||
|
||||
const fs = require('fs')
|
||||
const path = require('path')
|
||||
const log = require('../utils/util.log')
|
||||
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)
|
||||
log.debug('scriptDir', config.setting.script.defaultDir)
|
||||
server.start(config)
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
const log4js = require('log4js')
|
||||
const path = require('path')
|
||||
const DevSidecar = require('@docmirror/dev-sidecar')
|
||||
const getDefaultConfigBasePath = function () {
|
||||
const userHome = process.env.USERPROFILE
|
||||
return path.resolve(userHome, './.dev-sidecar')
|
||||
return DevSidecar.api.config.get().server.setting.userBasePath
|
||||
}
|
||||
log4js.configure({
|
||||
appenders: { std: { type: 'stdout' }, file: { type: 'file', pattern: 'yyyy-MM-dd', daysToKeep: 3, filename: getDefaultConfigBasePath() + '/logs/gui.log' } },
|
||||
|
|
|
@ -24,7 +24,6 @@
|
|||
</template>
|
||||
|
||||
<script>
|
||||
import api from '../api'
|
||||
export default {
|
||||
name: 'setup-ca',
|
||||
components: {
|
||||
|
@ -55,7 +54,6 @@ export default {
|
|||
this.$emit('update:visible', false)
|
||||
},
|
||||
async doSetup () {
|
||||
await api.shell.setupCa()
|
||||
this.$emit('setup')
|
||||
}
|
||||
}
|
||||
|
|
|
@ -151,7 +151,9 @@ export default {
|
|||
openSetupCa () {
|
||||
this.setupCa.visible = true
|
||||
},
|
||||
handleCaSetuped () {
|
||||
async handleCaSetuped () {
|
||||
console.log('this.config.server.setting.rootCaFile.certPath', this.config.server.setting.rootCaFile.certPath)
|
||||
await this.$api.shell.setupCa({ certPath: this.config.server.setting.rootCaFile.certPath })
|
||||
this.setting.rootCa = this.setting.rootCa || {}
|
||||
const rootCa = this.setting.rootCa
|
||||
rootCa.setuped = true
|
||||
|
@ -226,8 +228,7 @@ export default {
|
|||
})
|
||||
},
|
||||
doCheckUpdate (fromUser = true) {
|
||||
this.update.fromUser = fromUser
|
||||
this.$api.update.checkForUpdate(this)
|
||||
this.$api.update.checkForUpdate(fromUser)
|
||||
},
|
||||
openExternal (url) {
|
||||
this.$api.ipc.openExternal(url)
|
||||
|
|
|
@ -37,6 +37,10 @@
|
|||
</a-checkbox>
|
||||
<div>开启此项之后,被代理应用关闭SSL校验也问题不大了</div>
|
||||
</a-form-item>
|
||||
<a-form-item label="根证书:" :label-col="labelCol" :wrapper-col="wrapperCol">
|
||||
<a-input addon-before="Cert" addon-after="选择" v-model="config.server.setting.rootCaFile.certPath" ></a-input>
|
||||
<a-input addon-before="Key" addon-after="选择" v-model="config.server.setting.rootCaFile.keyPath" ></a-input>
|
||||
</a-form-item>
|
||||
<a-form-item label="启用脚本" :label-col="labelCol" :wrapper-col="wrapperCol">
|
||||
<a-tooltip title="关闭后,github的clone加速链接复制也将关闭">
|
||||
<a-checkbox v-model="config.server.setting.script.enabled" >
|
||||
|
|
|
@ -1,13 +1,8 @@
|
|||
const mitmproxy = require('./lib/proxy')
|
||||
const ProxyOptions = require('./options')
|
||||
const config = require('./lib/proxy/common/config')
|
||||
const proxyConfig = require('./lib/proxy/common/config')
|
||||
const log = require('./utils/util.log')
|
||||
function fireError (e) {
|
||||
process.send({ type: 'error', event: e })
|
||||
}
|
||||
function fireStatus (status) {
|
||||
process.send({ type: 'status', event: status })
|
||||
}
|
||||
const { fireError, fireStatus } = require('./utils/util.process')
|
||||
|
||||
let server
|
||||
|
||||
|
@ -42,6 +37,13 @@ function registerProcessListener () {
|
|||
const api = {
|
||||
async start (config) {
|
||||
const proxyOptions = ProxyOptions(config)
|
||||
const setting = config.setting
|
||||
if (setting) {
|
||||
if (setting.userBasePath) {
|
||||
proxyConfig.setDefaultCABasePath(setting.userBasePath)
|
||||
}
|
||||
}
|
||||
|
||||
if (proxyOptions.setting && proxyOptions.setting.NODE_TLS_REJECT_UNAUTHORIZED === false) {
|
||||
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'
|
||||
} else {
|
||||
|
@ -95,5 +97,6 @@ const api = {
|
|||
|
||||
module.exports = {
|
||||
...api,
|
||||
config
|
||||
config: proxyConfig,
|
||||
log
|
||||
}
|
||||
|
|
|
@ -9,7 +9,15 @@ config.defaultPort = 1181
|
|||
|
||||
config.caName = 'This certificate is generated locally'
|
||||
|
||||
config.caBasePath = buildDefaultCABasePath()
|
||||
|
||||
config.getDefaultCABasePath = function () {
|
||||
return config.caBasePath
|
||||
}
|
||||
config.setDefaultCABasePath = function (path) {
|
||||
config.caBasePath = path
|
||||
}
|
||||
function buildDefaultCABasePath () {
|
||||
const userHome = process.env.USERPROFILE
|
||||
return path.resolve(userHome, './.dev-sidecar')
|
||||
}
|
||||
|
|
|
@ -21,15 +21,18 @@ module.exports = {
|
|||
}, callback) {
|
||||
// Don't reject unauthorized
|
||||
// process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'
|
||||
|
||||
if (!caCertPath && !caKeyPath) {
|
||||
const rs = this.createCA()
|
||||
caCertPath = rs.caCertPath
|
||||
caKeyPath = rs.caKeyPath
|
||||
if (rs.create) {
|
||||
log.info(`CA Cert saved in: ${caCertPath}`)
|
||||
log.info(`CA private key saved in: ${caKeyPath}`)
|
||||
}
|
||||
log.info(`CA Cert read in: ${caCertPath}`)
|
||||
log.info(`CA private key read in: ${caKeyPath}`)
|
||||
if (!caCertPath) {
|
||||
caCertPath = config.getDefaultCACertPath()
|
||||
}
|
||||
if (!caKeyPath) {
|
||||
caKeyPath = config.getDefaultCAKeyPath()
|
||||
}
|
||||
const rs = this.createCA({ caCertPath, caKeyPath })
|
||||
if (rs.create) {
|
||||
log.info(`CA Cert saved in: ${caCertPath}`)
|
||||
log.info(`CA private key saved in: ${caKeyPath}`)
|
||||
}
|
||||
|
||||
port = ~~port
|
||||
|
@ -88,7 +91,7 @@ module.exports = {
|
|||
})
|
||||
return server
|
||||
},
|
||||
createCA (caBasePath = config.getDefaultCABasePath()) {
|
||||
return tlsUtils.initCA(caBasePath)
|
||||
createCA (caPaths) {
|
||||
return tlsUtils.initCA(caPaths)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -237,10 +237,7 @@ utils.getMappingHostNamesFormCert = function (cert) {
|
|||
}
|
||||
|
||||
// sync
|
||||
utils.initCA = function (basePath = config.getDefaultCABasePath()) {
|
||||
const caCertPath = path.resolve(basePath, config.caCertFileName)
|
||||
const caKeyPath = path.resolve(basePath, config.caKeyFileName)
|
||||
|
||||
utils.initCA = function ({ caCertPath, caKeyPath }) {
|
||||
try {
|
||||
fs.accessSync(caCertPath, fs.F_OK)
|
||||
fs.accessSync(caKeyPath, fs.F_OK)
|
||||
|
|
|
@ -48,13 +48,14 @@ module.exports = (config) => {
|
|||
|
||||
const dnsMapping = config.dns.mapping
|
||||
const serverConfig = config
|
||||
return {
|
||||
const setting = serverConfig.setting
|
||||
const options = {
|
||||
port: serverConfig.port,
|
||||
dnsConfig: {
|
||||
providers: dnsUtil.initDNS(serverConfig.dns.providers),
|
||||
mapping: dnsMapping
|
||||
},
|
||||
setting: serverConfig.setting,
|
||||
setting,
|
||||
sslConnectInterceptor: (req, cltSocket, head) => {
|
||||
const hostname = req.url.split(':')[0]
|
||||
const inWhiteList = matchHostname(whiteList, hostname) != null
|
||||
|
@ -103,4 +104,10 @@ module.exports = (config) => {
|
|||
return matchIntercepts
|
||||
}
|
||||
}
|
||||
|
||||
if (setting.rootCaFile) {
|
||||
options.caCertPath = setting.rootCaFile.certPath
|
||||
options.caKeyPath = setting.rootCaFile.keyPath
|
||||
}
|
||||
return options
|
||||
}
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
module.exports = {
|
||||
fireError (e) {
|
||||
process.send({ type: 'error', event: e })
|
||||
},
|
||||
fireStatus (status) {
|
||||
process.send({ type: 'status', event: status })
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue