1
+ <?php
2
+
3
+ namespace App \Test \Controller ;
4
+
5
+ use Symfony \Bundle \FrameworkBundle \Test \WebTestCase ;
6
+
7
+ class ApiControllerTest extends WebTestCase
8
+ {
9
+ public function testGetHelloWhithoutToken ()
10
+ {
11
+ $ client = static ::createClient ();
12
+
13
+ $ client ->request ('GET ' , '/api/hello ' );
14
+
15
+ $ this ->assertEquals (401 , $ client ->getResponse ()->getStatusCode ());
16
+ }
17
+
18
+ public function testGetHelloWhithToken ()
19
+ {
20
+ $ client = static ::createClient ();
21
+ // User created by running doctrine fixtures
22
+ $ client ->request ('POST ' , '/login ' , ['username ' => 'bob ' , 'password ' => 'Abc123 ' ]);
23
+ // Get user secret
24
+ $ content = json_decode ($ client ->getResponse ()->getContent (), true );
25
+
26
+ // User created by running doctrine fixtures
27
+ $ username = 'bob ' ;
28
+ // User secret returned after login
29
+ $ secret = $ content ['secret ' ];
30
+ // Generate a random string to prevent replay attacks
31
+ $ nonce = base64_encode (substr (md5 (rand ()), 0 , 10 ));
32
+ // Token work for 5 minutes
33
+ $ created = date ("Y-m-d\TH:i:s\Z " , strtotime ('now -2 minute ' ));
34
+ // Generate the shared secret digest
35
+ $ digest = base64_encode (sha1 (base64_decode ($ nonce ) . $ created . $ secret , true ));
36
+ // X-WSSE header sent
37
+ $ userToken = 'UsernameToken Username=" ' . $ username . '", PasswordDigest=" ' . $ digest . '", Nonce=" ' . $ nonce . '", Created=" ' . $ created . '" ' ;
38
+
39
+ $ client = static ::createClient ();
40
+ $ client ->request ('GET ' , '/api/hello ' , [], [], [
41
+ 'HTTP_X-WSSE ' => $ userToken
42
+ ]);
43
+
44
+ $ this ->assertEquals (200 , $ client ->getResponse ()->getStatusCode ());
45
+ $ content = json_decode ($ client ->getResponse ()->getContent (), true );
46
+ $ this ->assertEquals ('world ' , $ content ['hello ' ]);
47
+ }
48
+ }
0 commit comments