Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,4 @@ coverage
node_modules
npm-debug.log
package-lock.json
.vscode
18 changes: 18 additions & 0 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,20 @@ var defer = typeof setImmediate === 'function'
? setImmediate
: function(fn){ process.nextTick(fn.bind.apply(fn, arguments)) }

function http2Fix() {
var http;
try {
http = require('http2');
} catch (e) {
return;
}
if ( typeof (http.Http2ServerResponse.prototype._implicitHeader) !== 'function') {
http.Http2ServerResponse.prototype._implicitHeader = function () {
this.writeHead(this.statusCode);
};
}
}

/**
* Setup session store with the given `options`.
*
Expand All @@ -77,6 +91,7 @@ var defer = typeof setImmediate === 'function'
* @param {Boolean} [options.resave] Resave unmodified sessions back to the store
* @param {Boolean} [options.rolling] Enable/disable rolling session expiration
* @param {Boolean} [options.saveUninitialized] Save uninitialized sessions to the store
* @param {Boolean} [options.useHttp2=false] Use http2
* @param {String|Array} [options.secret] Secret for signing session ID
* @param {Object} [options.store=MemoryStore] Session store
* @param {String} [options.unset]
Expand Down Expand Up @@ -175,6 +190,9 @@ function session(options) {
store.on('connect', function onconnect() {
storeReady = true
})
if (options.useHttp2) {
http2Fix();
}

return function session(req, res, next) {
// self-awareness
Expand Down
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
"eslint": "7.32.0",
"eslint-plugin-markdown": "2.2.1",
"express": "4.17.3",
"get-port": "^5.1.1",
"mocha": "10.0.0",
"nyc": "15.1.0",
"supertest": "6.2.3"
Expand Down
60 changes: 60 additions & 0 deletions test/session.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@ var express = require('express')
var fs = require('fs')
var http = require('http')
var https = require('https')
var http2 = require('http2')
var request = require('supertest')
var getPort = require('get-port')
var session = require('../')
var SmartStore = require('./support/smart-store')
var SyncStore = require('./support/sync-store')
Expand Down Expand Up @@ -2040,6 +2042,64 @@ describe('session()', function(){
})
})

describe('.http2 plain', function(){
var app
var server
before(function () {
app = createRequestListener({ secret: 'keyboard cat', useHttp2: true })
server = http2.createServer(app)
})

it('should set cookie with http2', function (done) {

request(server).get('/').http2()
.expect(200)
.end(function(err, res) {
shouldSetCookie('connect.sid')
if (err) {
return done(err)
}
done();
});
})
})

describe('.http2 secure', function(){
var server
var uri
before(function (done) {
var app = createRequestListener({ secret: 'keyboard cat', useHttp2: true })
var cert = fs.readFileSync(__dirname + '/fixtures/server.crt', 'ascii')
server = http2.createSecureServer({
key: fs.readFileSync(__dirname + '/fixtures/server.key', 'ascii'),
cert: cert
}, app)
getPort().then(function(port) {
server.listen(port)
uri = 'https://localhost:' + port
done()
}).catch(function(err) {
return done(err)
})
})
after(function() {
server.close()
})

it('should set cookie with http2', function (done) {

request(uri).get('/').http2()
.expect(200)
.end(function(err, res) {
shouldSetCookie('connect.sid')
if (err) {
return done(err)
}
done();
});
})
})

describe('.maxAge', function () {
before(function (done) {
var ctx = this
Expand Down
1 change: 1 addition & 0 deletions test/support/env.js
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@

process.env.NO_DEPRECATION = 'express-session';
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';