Skip to content

Commit b51ab84

Browse files
ljedaljeda
and
ljeda
authored
feat: conditionally set headers (if not already set) in redirect response (#190)
* conditionally set headers (if not already set) in redirect response * add new function description --------- Co-authored-by: ljeda <[email protected]>
1 parent 3f71a54 commit b51ab84

File tree

2 files changed

+27
-6
lines changed

2 files changed

+27
-6
lines changed

index.js

+16-5
Original file line numberDiff line numberDiff line change
@@ -198,11 +198,22 @@ function createRedirectDirectoryListener () {
198198

199199
// send redirect response
200200
res.statusCode = 301
201-
res.setHeader('Content-Type', 'text/html; charset=UTF-8')
202-
res.setHeader('Content-Length', Buffer.byteLength(doc))
203-
res.setHeader('Content-Security-Policy', "default-src 'none'")
204-
res.setHeader('X-Content-Type-Options', 'nosniff')
205-
res.setHeader('Location', loc)
201+
setHeaderIfNotSet(res, 'Content-Type', 'text/html; charset=UTF-8')
202+
setHeaderIfNotSet(res, 'Content-Length', Buffer.byteLength(doc))
203+
setHeaderIfNotSet(res, 'Content-Security-Policy', "default-src 'none'")
204+
setHeaderIfNotSet(res, 'X-Content-Type-Options', 'nosniff')
205+
setHeaderIfNotSet(res, 'Location', loc)
206206
res.end(doc)
207207
}
208208
}
209+
210+
/**
211+
* Set default value for the header only if it is not already set in the response
212+
* @private
213+
*/
214+
215+
function setHeaderIfNotSet (res, name, value) {
216+
if (!res.hasHeader(name)) {
217+
res.setHeader(name, value)
218+
}
219+
}

test/test.js

+11-1
Original file line numberDiff line numberDiff line change
@@ -469,6 +469,9 @@ describe('serveStatic()', function () {
469469
before(function () {
470470
server = createServer(fixtures, null, function (req, res) {
471471
req.url = req.url.replace(/\/snow(\/|$)/, '/snow \u2603$1')
472+
if (req.url.match(/\/pets/)) {
473+
res.setHeader('Content-Security-Policy', "default-src 'self'")
474+
}
472475
})
473476
})
474477

@@ -508,13 +511,20 @@ describe('serveStatic()', function () {
508511
.expect(301, />Redirecting to \/snow%20%E2%98%83\/</, done)
509512
})
510513

511-
it('should respond with default Content-Security-Policy', function (done) {
514+
it('should respond with default Content-Security-Policy when header is not set', function (done) {
512515
request(server)
513516
.get('/users')
514517
.expect('Content-Security-Policy', "default-src 'none'")
515518
.expect(301, done)
516519
})
517520

521+
it('should respond with custom Content-Security-Policy when header is set', function (done) {
522+
request(server)
523+
.get('/pets')
524+
.expect('Content-Security-Policy', "default-src 'self'")
525+
.expect(301, done)
526+
})
527+
518528
it('should not redirect incorrectly', function (done) {
519529
request(server)
520530
.get('/')

0 commit comments

Comments
 (0)