UNPKG

1.34 kBJavaScriptView Raw
1'use strict'
2
3const http = require('http')
4const https = require('https')
5
6function protocol (url) {
7 if (url.startsWith('https')) {
8 return https
9 }
10 return http
11}
12
13function unsecureCookies (headers) {
14 ['Set-Cookie', 'set-cookie'].forEach(name => {
15 if (headers[name]) {
16 headers[name] = headers[name].map(cookie => cookie.replace(/\s*secure;/i, ''))
17 }
18 })
19}
20
21module.exports = {
22 schema: {
23 'unsecure-cookies': {
24 type: 'boolean',
25 defaultValue: false
26 }
27 },
28 redirect: ({ mapping, redirect, request, response }) => new Promise((resolve, reject) => {
29 const url = redirect
30 const {
31 method,
32 headers
33 } = request
34 delete headers.host // Some websites rely on the host header
35 const redirectedRequest = protocol(url).request(url, { method, headers }, redirectedResponse => {
36 if (mapping['unsecure-cookies']) {
37 unsecureCookies(redirectedResponse.headers)
38 }
39 response.writeHead(redirectedResponse.statusCode, redirectedResponse.headers)
40 redirectedResponse
41 .on('error', reject)
42 .on('end', resolve)
43 .pipe(response)
44 })
45 redirectedRequest.on('error', reject)
46 request
47 .on('data', chunk => redirectedRequest.write(chunk))
48 .on('error', reject)
49 .on('end', () => { redirectedRequest.end() })
50 })
51}