File tree 3 files changed +39
-1
lines changed
3 files changed +39
-1
lines changed Original file line number Diff line number Diff line change @@ -145,7 +145,10 @@ module.exports = class Application extends Emitter {
145
145
response . request = request ;
146
146
context . onerror = context . onerror . bind ( context ) ;
147
147
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
+ } ) ;
149
152
context . accept = request . accept = accepts ( req ) ;
150
153
context . state = { } ;
151
154
return context ;
Original file line number Diff line number Diff line change @@ -74,4 +74,37 @@ describe('ctx.cookies.set()', () => {
74
74
} ) ;
75
75
} ) ;
76
76
} ) ;
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 => / ^ n a m e = / . test ( cookie ) ) . should . be . ok ;
101
+
102
+ cookies . some ( cookie => / ^ n a m e \. s i g = / . test ( cookie ) ) . should . be . ok ;
103
+
104
+ cookies . every ( cookie => / s e c u r e / . test ( cookie ) ) . should . be . ok ;
105
+
106
+ done ( ) ;
107
+ } ) ;
108
+ } ) ;
109
+ } ) ;
77
110
} ) ;
Original file line number Diff line number Diff line change @@ -8,6 +8,8 @@ module.exports = (req, res) => {
8
8
const socket = new Stream . Duplex ( ) ;
9
9
req = req || { headers : { } , socket : socket , __proto__ : Stream . Readable . prototype } ;
10
10
res = res || { _headers : { } , socket : socket , __proto__ : Stream . Writable . prototype } ;
11
+ req . socket = req . socket || socket ;
12
+ res . socket = res . socket || socket ;
11
13
res . getHeader = k => res . _headers [ k . toLowerCase ( ) ] ;
12
14
res . setHeader = ( k , v ) => res . _headers [ k . toLowerCase ( ) ] = v ;
13
15
res . removeHeader = ( k , v ) => delete res . _headers [ k . toLowerCase ( ) ] ;
You can’t perform that action at this time.
0 commit comments