| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- const express = require('express')
- const httpProxy = require('../lib/http-proxy')
- const request = require('request')
- const common = require('../lib/http-proxy/common')
- const app = express()
- const assetsProxy = httpProxy.createProxyServer({
- target: 'https://www.heroforge.com',
- xfwd: false,
- secure: false,
- changeOrigin: true,
- autoRewrite: true,
- protocolRewrite: 'http',
- selfHandleResponse: false,
- cookieDomainRewrite: true,
- preserveHeaderKeyCase: true,
- mapHeaders(headers) {
- headers.host = 'www.heroforge.com'
- if (headers.referer) {
- const url = new URL(headers.referer)
- url.hostname = 'www.heroforge.com'
- url.protocol = 'https'
- url.port = 443
- headers.referer = url.toString()
- headers.origin = 'https://www.heroforge.com'
- }
- return headers
- }
- })
- assetsProxy.on('error', (err, req, res, url) => {
- console.warn(err.message, req.url)
- res.redirect(req.url)
- })
- app.use(/^\/$/, (req, res) => {
- request('https://www.heroforge.com', (err, proxyRes, body) => {
- if (err) res.status(500).send(err)
- else {
- for (let i = 0; i < proxyRes.rawHeaders.length; i += 2) {
- var rewriteCookieDomainConfig = ['*'],
- rewriteCookiePathConfig = ['*']
- const key = proxyRes.rawHeaders[i]
- let value = proxyRes.rawHeaders[i + 1]
- if (rewriteCookieDomainConfig && key.toLowerCase() === 'set-cookie') {
- value = common.rewriteCookieProperty(value, rewriteCookieDomainConfig, 'domain');
- }
- if (rewriteCookiePathConfig && key.toLowerCase() === 'set-cookie') {
- value = common.rewriteCookieProperty(value, rewriteCookiePathConfig, 'path');
- }
- if (key.toLowerCase() === 'set-cookie') {
- const [k, v] = value.split(';')[0].split('=')
- res.cookie(k,v)
- } else {
- res.setHeader(key, value)
- }
- }
- let html = body
- .replace(/<script[^>]+googletagmanager.*<\/script>/g, '<!-- google tag manager -->')
- .replace(/<img[^>]+facebook.*>/g, '<!-- facebook -->')
- .replace('https://connect.facebook.net/en_US/fbevents.js', '')
- .replace('</body>', '<script type="text/javascript" src="/custom/main.js"></script></body>')
- res.status(200)
- .set('Content-Type', 'text/html')
- .send(html)
- }
- })
- })
- app.use('/custom/', express.static('./dist'))
- app.use('/', (req, res) => {
- assetsProxy.web(req, res)
- })
- app.listen(process.env.PORT || 9011)
|