dev-sidecar/packages/mitmproxy/src/index.js

100 lines
2.5 KiB
JavaScript
Raw Normal View History

2020-11-06 10:59:54 +00:00
const mitmproxy = require('./lib/proxy')
const ProxyOptions = require('./options')
const config = require('./lib/proxy/common/config')
function fireError (e) {
process.send({ type: 'error', event: e })
}
function fireStatus (status) {
process.send({ type: 'status', event: status })
}
let server
function registerProcessListener () {
process.on('message', function (msg) {
console.log('child get msg: ' + JSON.stringify(msg))
if (msg.type === 'action') {
api[msg.event.key](msg.event.params)
}
})
process.on('SIGINT', () => {
console.log('on sigint : closed ')
process.exit(0)
})
// 避免异常崩溃
process.on('uncaughtException', function (err) {
if (err.code === 'ECONNABORTED') {
// console.error(err.errno)
return
}
console.error('uncaughtException:', err)
2020-11-06 10:59:54 +00:00
})
process.on('unhandledRejection', (reason, p) => {
console.log('Unhandled Rejection at: Promise', p, 'reason:', reason)
// application specific logging, throwing an error, or other logic here
})
}
const api = {
async start (config) {
const proxyOptions = ProxyOptions(config)
if (proxyOptions.setting && proxyOptions.setting.NODE_TLS_REJECT_UNAUTHORIZED === false) {
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'
} else {
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '1'
}
const newServer = mitmproxy.createProxy(proxyOptions, () => {
fireStatus(true)
console.log('代理服务已启动127.0.0.1:' + proxyOptions.port)
})
newServer.on('close', () => {
console.log('server will closed ')
if (server === newServer) {
server = null
fireStatus(false)
}
})
newServer.on('error', (e) => {
console.log('server error', e)
// newServer = null
fireError(e)
})
server = newServer
registerProcessListener()
},
async close () {
return new Promise((resolve, reject) => {
if (server) {
server.close((err) => {
if (err) {
console.log('close error', err, ',', err.code, ',', err.message, ',', err.errno)
if (err.code === 'ERR_SERVER_NOT_RUNNING') {
console.log('代理服务关闭成功')
resolve()
return
}
reject(err)
} else {
console.log('代理服务关闭成功')
resolve()
}
})
} else {
console.log('server is null')
fireStatus(false)
resolve()
}
})
}
}
module.exports = {
...api,
config
}