mirror of
https://github.com/http-party/node-http-proxy.git
synced 2025-12-08 20:59:18 +00:00
Adding ability to set cookie path
This commit is contained in:
parent
543636d0f6
commit
2c98416ac2
@ -5,7 +5,7 @@ var common = exports,
|
|||||||
|
|
||||||
var upgradeHeader = /(^|,)\s*upgrade\s*($|,)/i,
|
var upgradeHeader = /(^|,)\s*upgrade\s*($|,)/i,
|
||||||
isSSL = /^https|wss/,
|
isSSL = /^https|wss/,
|
||||||
cookieDomainRegex = /(;\s*domain=)([^;]+)/i;
|
cookieProps = ['domain', 'path'];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Simple Regex for testing if protocol is https
|
* Simple Regex for testing if protocol is https
|
||||||
@ -211,27 +211,30 @@ common.urlJoin = function() {
|
|||||||
*
|
*
|
||||||
* @api private
|
* @api private
|
||||||
*/
|
*/
|
||||||
common.rewriteCookieDomain = function rewriteCookieDomain(header, config) {
|
common.rewriteCookieProperty = function rewriteCookieProperty(header, config, property) {
|
||||||
|
if(cookieProps.indexOf(property) === -1) //Property not supported
|
||||||
|
return header;
|
||||||
|
|
||||||
if (Array.isArray(header)) {
|
if (Array.isArray(header)) {
|
||||||
return header.map(function (headerElement) {
|
return header.map(function (headerElement) {
|
||||||
return rewriteCookieDomain(headerElement, config);
|
return rewriteCookieProperty(headerElement, config, property);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
return header.replace(cookieDomainRegex, function(match, prefix, previousDomain) {
|
return header.replace(new RegExp("(;\\s*" + property + "=)([^;]+)"), function(match, prefix, previousValue) {
|
||||||
var newDomain;
|
var newValue;
|
||||||
if (previousDomain in config) {
|
if (previousValue in config) {
|
||||||
newDomain = config[previousDomain];
|
newValue = config[previousValue];
|
||||||
} else if ('*' in config) {
|
} else if ('*' in config) {
|
||||||
newDomain = config['*'];
|
newValue = config['*'];
|
||||||
} else {
|
} else {
|
||||||
//no match, return previous domain
|
//no match, return previous value
|
||||||
return match;
|
return match;
|
||||||
}
|
}
|
||||||
if (newDomain) {
|
if (newValue) {
|
||||||
//replace domain
|
//replace value
|
||||||
return prefix + newDomain;
|
return prefix + newValue;
|
||||||
} else {
|
} else {
|
||||||
//remove domain
|
//remove value
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@ -84,12 +84,16 @@ module.exports = { // <--
|
|||||||
*/
|
*/
|
||||||
writeHeaders: function writeHeaders(req, res, proxyRes, options) {
|
writeHeaders: function writeHeaders(req, res, proxyRes, options) {
|
||||||
var rewriteCookieDomainConfig = options.cookieDomainRewrite,
|
var rewriteCookieDomainConfig = options.cookieDomainRewrite,
|
||||||
|
rewriteCookiePathConfig = options.cookiePathRewrite,
|
||||||
preserveHeaderKeyCase = options.preserveHeaderKeyCase,
|
preserveHeaderKeyCase = options.preserveHeaderKeyCase,
|
||||||
rawHeaderKeyMap,
|
rawHeaderKeyMap,
|
||||||
setHeader = function(key, header) {
|
setHeader = function(key, header) {
|
||||||
if (header == undefined) return;
|
if (header == undefined) return;
|
||||||
if (rewriteCookieDomainConfig && key.toLowerCase() === 'set-cookie') {
|
if (rewriteCookieDomainConfig && key.toLowerCase() === 'set-cookie') {
|
||||||
header = common.rewriteCookieDomain(header, rewriteCookieDomainConfig);
|
header = common.rewriteCookieProperty(header, rewriteCookieDomainConfig, 'domain');
|
||||||
|
}
|
||||||
|
if (rewriteCookiePathConfig && key.toLowerCase() === 'set-cookie') {
|
||||||
|
header = common.rewriteCookieProperty(header, rewriteCookiePathConfig, 'path');
|
||||||
}
|
}
|
||||||
res.setHeader(String(key).trim(), header);
|
res.setHeader(String(key).trim(), header);
|
||||||
};
|
};
|
||||||
@ -98,6 +102,10 @@ module.exports = { // <--
|
|||||||
rewriteCookieDomainConfig = { '*': rewriteCookieDomainConfig };
|
rewriteCookieDomainConfig = { '*': rewriteCookieDomainConfig };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (typeof rewriteCookiePathConfig === 'string') { //also test for ''
|
||||||
|
rewriteCookiePathConfig = { '*': rewriteCookiePathConfig };
|
||||||
|
}
|
||||||
|
|
||||||
// message.rawHeaders is added in: v0.11.6
|
// message.rawHeaders is added in: v0.11.6
|
||||||
// https://nodejs.org/api/http.html#http_message_rawheaders
|
// https://nodejs.org/api/http.html#http_message_rawheaders
|
||||||
if (preserveHeaderKeyCase && proxyRes.rawHeaders != undefined) {
|
if (preserveHeaderKeyCase && proxyRes.rawHeaders != undefined) {
|
||||||
|
|||||||
@ -298,6 +298,17 @@ describe('lib/http-proxy/passes/web-outgoing.js', function () {
|
|||||||
.to.contain('hello; domain=my.domain; path=/');
|
.to.contain('hello; domain=my.domain; path=/');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('rewrites path', function() {
|
||||||
|
var options = {
|
||||||
|
cookiePathRewrite: '/dummyPath'
|
||||||
|
};
|
||||||
|
|
||||||
|
httpProxy.writeHeaders({}, this.res, this.proxyRes, options);
|
||||||
|
|
||||||
|
expect(this.res.headers['set-cookie'])
|
||||||
|
.to.contain('hello; domain=my.domain; path=/dummyPath');
|
||||||
|
});
|
||||||
|
|
||||||
it('rewrites domain', function() {
|
it('rewrites domain', function() {
|
||||||
var options = {
|
var options = {
|
||||||
cookieDomainRewrite: 'my.new.domain'
|
cookieDomainRewrite: 'my.new.domain'
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user