5
5
use Illuminate \Container \Container ;
6
6
use Illuminate \Contracts \Encryption \Encrypter as EncrypterContract ;
7
7
use Illuminate \Cookie \CookieJar ;
8
+ use Illuminate \Cookie \CookieValuePrefix ;
8
9
use Illuminate \Cookie \Middleware \AddQueuedCookiesToResponse ;
9
10
use Illuminate \Cookie \Middleware \EncryptCookies ;
10
11
use Illuminate \Encryption \Encrypter ;
18
19
19
20
class EncryptCookiesTest extends TestCase
20
21
{
22
+ /**
23
+ * @var \Illuminate\Container\Container
24
+ */
25
+ protected $ container ;
26
+
21
27
/**
22
28
* @var \Illuminate\Routing\Router
23
29
*/
@@ -30,12 +36,12 @@ protected function setUp(): void
30
36
{
31
37
parent ::setUp ();
32
38
33
- $ container = new Container ;
34
- $ container ->singleton (EncrypterContract::class, function () {
39
+ $ this -> container = new Container ;
40
+ $ this -> container ->singleton (EncrypterContract::class, function () {
35
41
return new Encrypter (str_repeat ('a ' , 16 ));
36
42
});
37
43
38
- $ this ->router = new Router (new Dispatcher , $ container );
44
+ $ this ->router = new Router (new Dispatcher , $ this -> container );
39
45
}
40
46
41
47
public function testSetCookieEncryption ()
@@ -48,11 +54,14 @@ public function testSetCookieEncryption()
48
54
$ response = $ this ->router ->dispatch (Request::create ($ this ->setCookiePath , 'GET ' ));
49
55
50
56
$ cookies = $ response ->headers ->getCookies ();
51
- $ this ->assertCount (2 , $ cookies );
57
+ $ this ->assertCount (4 , $ cookies );
52
58
$ this ->assertSame ('encrypted_cookie ' , $ cookies [0 ]->getName ());
53
59
$ this ->assertNotSame ('value ' , $ cookies [0 ]->getValue ());
54
- $ this ->assertSame ('unencrypted_cookie ' , $ cookies [1 ]->getName ());
55
- $ this ->assertSame ('value ' , $ cookies [1 ]->getValue ());
60
+ $ this ->assertSame ('encrypted[array_cookie] ' , $ cookies [1 ]->getName ());
61
+ $ this ->assertNotSame ('value ' , $ cookies [1 ]->getValue ());
62
+ $ this ->assertSame ('encrypted[nested][array_cookie] ' , $ cookies [2 ]->getName ());
63
+ $ this ->assertSame ('unencrypted_cookie ' , $ cookies [3 ]->getName ());
64
+ $ this ->assertSame ('value ' , $ cookies [3 ]->getValue ());
56
65
}
57
66
58
67
public function testQueuedCookieEncryption ()
@@ -65,11 +74,59 @@ public function testQueuedCookieEncryption()
65
74
$ response = $ this ->router ->dispatch (Request::create ($ this ->queueCookiePath , 'GET ' ));
66
75
67
76
$ cookies = $ response ->headers ->getCookies ();
68
- $ this ->assertCount (2 , $ cookies );
77
+ $ this ->assertCount (4 , $ cookies );
69
78
$ this ->assertSame ('encrypted_cookie ' , $ cookies [0 ]->getName ());
70
79
$ this ->assertNotSame ('value ' , $ cookies [0 ]->getValue ());
71
- $ this ->assertSame ('unencrypted_cookie ' , $ cookies [1 ]->getName ());
72
- $ this ->assertSame ('value ' , $ cookies [1 ]->getValue ());
80
+ $ this ->assertSame ('encrypted[array_cookie] ' , $ cookies [1 ]->getName ());
81
+ $ this ->assertNotSame ('value ' , $ cookies [1 ]->getValue ());
82
+ $ this ->assertSame ('encrypted[nested][array_cookie] ' , $ cookies [2 ]->getName ());
83
+ $ this ->assertNotSame ('value ' , $ cookies [2 ]->getValue ());
84
+ $ this ->assertSame ('unencrypted_cookie ' , $ cookies [3 ]->getName ());
85
+ $ this ->assertSame ('value ' , $ cookies [3 ]->getValue ());
86
+ }
87
+
88
+ protected function getEncryptedCookieValue ($ key , $ value )
89
+ {
90
+ $ encrypter = $ this ->container ->make (EncrypterContract::class);
91
+
92
+ return $ encrypter ->encrypt (
93
+ CookieValuePrefix::create ($ key , $ encrypter ->getKey ()).$ value ,
94
+ false
95
+ );
96
+ }
97
+
98
+ public function testCookieDecryption ()
99
+ {
100
+ $ cookies = [
101
+ 'encrypted_cookie ' => $ this ->getEncryptedCookieValue ('encrypted_cookie ' , 'value ' ),
102
+ 'encrypted ' => [
103
+ 'array_cookie ' => $ this ->getEncryptedCookieValue ('encrypted[array_cookie] ' , 'value ' ),
104
+ 'nested ' => [
105
+ 'array_cookie ' => $ this ->getEncryptedCookieValue ('encrypted[nested][array_cookie] ' , 'value ' ),
106
+ ],
107
+ ],
108
+ 'unencrypted_cookie ' => 'value ' ,
109
+ ];
110
+
111
+ $ this ->container ->make (EncryptCookiesTestMiddleware::class)->handle (
112
+ Request::create ('/cookie/read ' , 'GET ' , [], $ cookies ),
113
+ function ($ request ) {
114
+ $ cookies = $ request ->cookies ->all ();
115
+ $ this ->assertCount (3 , $ cookies );
116
+ $ this ->assertArrayHasKey ('encrypted_cookie ' , $ cookies );
117
+ $ this ->assertSame ('value ' , $ cookies ['encrypted_cookie ' ]);
118
+ $ this ->assertArrayHasKey ('encrypted ' , $ cookies );
119
+ $ this ->assertArrayHasKey ('array_cookie ' , $ cookies ['encrypted ' ]);
120
+ $ this ->assertSame ('value ' , $ cookies ['encrypted ' ]['array_cookie ' ]);
121
+ $ this ->assertArrayHasKey ('nested ' , $ cookies ['encrypted ' ]);
122
+ $ this ->assertArrayHasKey ('array_cookie ' , $ cookies ['encrypted ' ]['nested ' ]);
123
+ $ this ->assertSame ('value ' , $ cookies ['encrypted ' ]['nested ' ]['array_cookie ' ]);
124
+ $ this ->assertArrayHasKey ('unencrypted_cookie ' , $ cookies );
125
+ $ this ->assertSame ('value ' , $ cookies ['unencrypted_cookie ' ]);
126
+
127
+ return new Response ;
128
+ }
129
+ );
73
130
}
74
131
}
75
132
@@ -79,6 +136,8 @@ public function setCookies()
79
136
{
80
137
$ response = new Response ;
81
138
$ response ->headers ->setCookie (new Cookie ('encrypted_cookie ' , 'value ' ));
139
+ $ response ->headers ->setCookie (new Cookie ('encrypted[array_cookie] ' , 'value ' ));
140
+ $ response ->headers ->setCookie (new Cookie ('encrypted[nested][array_cookie] ' , 'value ' ));
82
141
$ response ->headers ->setCookie (new Cookie ('unencrypted_cookie ' , 'value ' ));
83
142
84
143
return $ response ;
@@ -103,6 +162,8 @@ public function __construct()
103
162
{
104
163
$ cookie = new CookieJar ;
105
164
$ cookie ->queue (new Cookie ('encrypted_cookie ' , 'value ' ));
165
+ $ cookie ->queue (new Cookie ('encrypted[array_cookie] ' , 'value ' ));
166
+ $ cookie ->queue (new Cookie ('encrypted[nested][array_cookie] ' , 'value ' ));
106
167
$ cookie ->queue (new Cookie ('unencrypted_cookie ' , 'value ' ));
107
168
108
169
$ this ->cookies = $ cookie ;
0 commit comments