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(/]+googletagmanager.*<\/script>/g, '') .replace(/]+facebook.*>/g, '') .replace('https://connect.facebook.net/en_US/fbevents.js', '') .replace('', '') 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)