Files
cypress/packages/https-proxy/test/helpers/proxy.js
2020-02-20 13:09:40 -05:00

93 lines
2.0 KiB
JavaScript

/* eslint-disable no-console */
const { request } = require('../spec_helper')
const { allowDestroy } = require('@packages/network')
const http = require('http')
const path = require('path')
const httpsProxy = require('../../lib/proxy')
let prx = null
const pipe = (req, res) => {
return req.pipe(request(req.url))
.on('error', () => {
console.log('**ERROR**', req.url)
req.statusCode = 500
res.end()
}).pipe(res)
}
const onConnect = (req, socket, head, proxy) => {
return proxy.connect(req, socket, head, {
onDirectConnection (req, socket, head) {
return ['localhost:8444', 'localhost:12344'].includes(req.url)
},
})
}
const onRequest = (req, res) => {
return pipe(req, res)
}
module.exports = {
reset () {
return httpsProxy.reset()
},
start (port) {
prx = http.createServer()
allowDestroy(prx)
const dir = path.join(process.cwd(), 'ca')
return httpsProxy.create(dir, port, {
onUpgrade (req, socket, head) {},
onRequest (req, res) {
console.log('ON REQUEST FROM OUTER PROXY', req.url, req.headers, req.method)
if (req.url.includes('replace')) {
const {
write,
} = res
res.write = function (chunk) {
chunk = Buffer.from(chunk.toString().replace('https server', 'replaced content'))
return write.call(this, chunk)
}
return pipe(req, res)
}
return pipe(req, res)
},
})
.then((proxy) => {
prx.on('request', onRequest)
prx.on('connect', (req, socket, head) => {
return onConnect(req, socket, head, proxy)
})
return new Promise((resolve) => {
prx.listen(port, () => {
prx.proxy = proxy
console.log(`server listening on port: ${port}`)
resolve(proxy)
})
})
})
},
stop () {
return new Promise((resolve) => {
return prx.destroy(resolve)
}).then(() => {
return prx.proxy.close()
})
},
}