mirror of
https://github.com/cypress-io/cypress.git
synced 2026-01-12 09:50:04 -06:00
93 lines
2.0 KiB
JavaScript
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()
|
|
})
|
|
},
|
|
}
|