@@ -28,13 +28,30 @@ public function testSign(): void
28
28
Assert::equal ($ expected , $ token );
29
29
}
30
30
31
+ public function testSignFragment (): void
32
+ {
33
+ $ audience = 'test. ' . __FUNCTION__ ;
34
+
35
+ $ plugin = new SignedUrl (self ::KEY_HS256 , 'HS256 ' , $ audience );
36
+ $ plugin ->setTimestamp (1600000000 );
37
+ $ token = $ plugin ->signUrl ('https://host.tld/path?query=value#fragment ' , 1600000600 );
38
+ $ expected = 'https://host.tld/path?query=value&_debug=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJjei5yZWRiaXQuZGVidWcudXJsIiwiYXVkIjoidGVzdC50ZXN0U2lnbkZyYWdtZW50IiwiaWF0IjoxNjAwMDAwMDAwLCJleHAiOjE2MDAwMDA2MDAsInN1YiI6Imh0dHBzOlwvXC9ob3N0LnRsZFwvcGF0aD9xdWVyeT12YWx1ZSIsIm1ldGgiOlsiZ2V0Il0sIm1vZCI6MCwidmFsIjoxfQ.9oIORBXW-hW8vTPdJglEdEMm19nwAvw2wLAxqWvFh3Y#fragment ' ;
39
+ Assert::equal ($ expected , $ token );
40
+ }
41
+
31
42
public function testGetToken (): void
32
43
{
33
44
$ audience = 'test. ' . __FUNCTION__ ;
34
45
35
46
$ plugin = new SignedUrl (self ::KEY_HS256 , 'HS256 ' , $ audience );
36
47
$ plugin ->setTimestamp (1600000000 );
37
- $ token = $ plugin ->getToken ('https://host.tld/path?query=value ' , 1600000600 );
48
+ $ token = $ plugin ->getToken (
49
+ 'https://host.tld/path?query=value ' ,
50
+ ['get ' ],
51
+ 1600000600 ,
52
+ SignedUrl::MODE_REQUEST ,
53
+ SignedUrl::VALUE_ENABLE
54
+ );
38
55
$ expected = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJjei5yZWRiaXQuZGVidWcudXJsIiwiYXVkIjoidGVzdC50ZXN0R2V0VG9rZW4iLCJpYXQiOjE2MDAwMDAwMDAsImV4cCI6MTYwMDAwMDYwMCwic3ViIjoiaHR0cHM6XC9cL2hvc3QudGxkXC9wYXRoP3F1ZXJ5PXZhbHVlIiwibWV0aCI6WyJnZXQiXSwibW9kIjowLCJ2YWwiOjF9.I6tEfFneSxuY9qAjRf5esYFPonChbliZqGoijtv2iHw ' ;
39
56
Assert::equal ($ expected , $ token );
40
57
}
@@ -46,7 +63,13 @@ public function testVerifyToken(): void
46
63
47
64
$ plugin = new SignedUrl (self ::KEY_HS256 , 'HS256 ' , $ audience );
48
65
$ plugin ->setTimestamp ($ timestamp );
49
- $ token = $ plugin ->getToken ('https://host.tld/path?query=value ' , 1600000600 );
66
+ $ token = $ plugin ->getToken (
67
+ 'https://host.tld/path?query=value ' ,
68
+ ['get ' ],
69
+ 1600000600 ,
70
+ SignedUrl::MODE_REQUEST ,
71
+ SignedUrl::VALUE_ENABLE
72
+ );
50
73
51
74
$ plugin = new SignedUrl (self ::KEY_HS256 , 'HS256 ' , $ audience );
52
75
$ plugin ->setTimestamp ($ timestamp );
@@ -171,16 +194,39 @@ function () use ($timestamp, $tokenUrl) {
171
194
public function testVerifyUrlWithSuffixRedirect (): void
172
195
{
173
196
$ timestamp = 1600000000 ;
174
- $ expected = 'https://host.tld/path?query=value&_debug=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJjei5yZWRiaXQuZGVidWcudXJsIiwiYXVkIjoidGVzdC50ZXN0U2lnbiIsImlhdCI6MTYwMDAwMDAwMCwiZXhwIjoxNjAwMDAwNjAwLCJzdWIiOiJodHRwczpcL1wvaG9zdC50bGRcL3BhdGg_cXVlcnk9dmFsdWUiLCJtZXRoIjoiZ2V0IiwibW9kIjowLCJ2YWwiOjF9.61Z0pPW3lJN2WDoUhOfsZ4m16Q3hjtVFJep_t_qoQ5c ' ;
175
-
176
- $ tokenUrl = $ expected . '&fbclid=123456789 ' ;
197
+ $ tokenUrl = 'https://host.tld/path?query=value&_debug=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJjei5yZWRiaXQuZGVidWcudXJsIiwiYXVkIjoidGVzdC50ZXN0U2lnbiIsImlhdCI6MTYwMDAwMDAwMCwiZXhwIjoxNjAwMDAwNjAwLCJzdWIiOiJodHRwczpcL1wvaG9zdC50bGRcL3BhdGg_cXVlcnk9dmFsdWUiLCJtZXRoIjoiZ2V0IiwibW9kIjowLCJ2YWwiOjF9.61Z0pPW3lJN2WDoUhOfsZ4m16Q3hjtVFJep_t_qoQ5c '
198
+ . '&fbclid=123456789 ' ;
177
199
178
200
// Mock plugin without redirect
179
201
$ plugin = new class (self ::KEY_HS256 , 'HS256 ' , 'test.testSign ' ) extends SignedUrl {
180
202
protected function sendRedirectResponse (string $ canonicalUrl ): void
181
203
{
182
204
$ expected = 'https://host.tld/path?query=value&_debug=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJjei5yZWRiaXQuZGVidWcudXJsIiwiYXVkIjoidGVzdC50ZXN0U2lnbiIsImlhdCI6MTYwMDAwMDAwMCwiZXhwIjoxNjAwMDAwNjAwLCJzdWIiOiJodHRwczpcL1wvaG9zdC50bGRcL3BhdGg_cXVlcnk9dmFsdWUiLCJtZXRoIjoiZ2V0IiwibW9kIjowLCJ2YWwiOjF9.61Z0pPW3lJN2WDoUhOfsZ4m16Q3hjtVFJep_t_qoQ5c ' ;
183
- Assert::equal ($ canonicalUrl , $ expected );
205
+ Assert::equal ($ expected , $ canonicalUrl );
206
+ }
207
+ };
208
+
209
+ $ plugin ->setTimestamp ($ timestamp );
210
+ JWT ::$ timestamp = $ timestamp ;
211
+ $ plugin ->verifyUrl ($ tokenUrl , true );
212
+ }
213
+
214
+ public function testVerifyUrlWithSuffixRedirectFragment (): void
215
+ {
216
+ $ timestamp = 1600000000 ;
217
+ $ tokenUrl = 'https://host.tld/path?query=value '
218
+ . '&_debug=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJjei5yZWRiaXQuZGVidWcudXJsIiwiYXVkIjoidGVzdC50ZXN0U2lnbiIsImlhdCI6MTYwMDAwMDAwMCwiZXhwIjoxNjAwMDAwNjAwLCJzdWIiOiJodHRwczpcL1wvaG9zdC50bGRcL3BhdGg_cXVlcnk9dmFsdWUiLCJtZXRoIjoiZ2V0IiwibW9kIjowLCJ2YWwiOjF9.61Z0pPW3lJN2WDoUhOfsZ4m16Q3hjtVFJep_t_qoQ5c '
219
+ . '&fbclid=123456789 '
220
+ . '#hash ' ;
221
+
222
+ // Mock plugin without redirect
223
+ $ plugin = new class (self ::KEY_HS256 , 'HS256 ' , 'test.testSign ' ) extends SignedUrl {
224
+ protected function sendRedirectResponse (string $ canonicalUrl ): void
225
+ {
226
+ $ expected = 'https://host.tld/path?query=value '
227
+ . '&_debug=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJjei5yZWRiaXQuZGVidWcudXJsIiwiYXVkIjoidGVzdC50ZXN0U2lnbiIsImlhdCI6MTYwMDAwMDAwMCwiZXhwIjoxNjAwMDAwNjAwLCJzdWIiOiJodHRwczpcL1wvaG9zdC50bGRcL3BhdGg_cXVlcnk9dmFsdWUiLCJtZXRoIjoiZ2V0IiwibW9kIjowLCJ2YWwiOjF9.61Z0pPW3lJN2WDoUhOfsZ4m16Q3hjtVFJep_t_qoQ5c '
228
+ . '#hash ' ;
229
+ Assert::equal ($ expected , $ canonicalUrl );
184
230
}
185
231
};
186
232
0 commit comments