Skip to content

Commit 39f058e

Browse files
dead-horsejonathanong
authored andcommittedMar 15, 2016
fix cookies' secure detect
1 parent bcada5b commit 39f058e

File tree

3 files changed

+39
-1
lines changed

3 files changed

+39
-1
lines changed
 

‎lib/application.js

+4-1
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,10 @@ module.exports = class Application extends Emitter {
145145
response.request = request;
146146
context.onerror = context.onerror.bind(context);
147147
context.originalUrl = request.originalUrl = req.url;
148-
context.cookies = new Cookies(req, res, this.keys);
148+
context.cookies = new Cookies(req, res, {
149+
keys: this.keys,
150+
secure: request.secure
151+
});
149152
context.accept = request.accept = accepts(req);
150153
context.state = {};
151154
return context;

‎test/context/cookies.js

+33
Original file line numberDiff line numberDiff line change
@@ -74,4 +74,37 @@ describe('ctx.cookies.set()', () => {
7474
});
7575
});
7676
});
77+
78+
describe('with secure', () => {
79+
it('should get secure from request', done => {
80+
const app = new Koa();
81+
82+
app.proxy = true;
83+
app.keys = ['a', 'b'];
84+
85+
app.use(ctx => {
86+
ctx.cookies.set('name', 'jon', { signed: true });
87+
ctx.status = 204;
88+
});
89+
90+
const server = app.listen();
91+
92+
request(server)
93+
.get('/')
94+
.set('x-forwarded-proto', 'https') // mock secure
95+
.expect(204)
96+
.end((err, res) => {
97+
if (err) return done(err);
98+
99+
const cookies = res.headers['set-cookie'];
100+
cookies.some(cookie => /^name=/.test(cookie)).should.be.ok;
101+
102+
cookies.some(cookie => /^name\.sig=/.test(cookie)).should.be.ok;
103+
104+
cookies.every(cookie => /secure/.test(cookie)).should.be.ok;
105+
106+
done();
107+
});
108+
});
109+
});
77110
});

‎test/helpers/context.js

+2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ module.exports = (req, res) => {
88
const socket = new Stream.Duplex();
99
req = req || { headers: {}, socket: socket, __proto__: Stream.Readable.prototype };
1010
res = res || { _headers: {}, socket: socket, __proto__: Stream.Writable.prototype };
11+
req.socket = req.socket || socket;
12+
res.socket = res.socket || socket;
1113
res.getHeader = k => res._headers[k.toLowerCase()];
1214
res.setHeader = (k, v) => res._headers[k.toLowerCase()] = v;
1315
res.removeHeader = (k, v) => delete res._headers[k.toLowerCase()];

0 commit comments

Comments
 (0)
Please sign in to comment.