diff options
Diffstat (limited to 'tests/api')
-rw-r--r-- | tests/api/ApiMiddlewareTest.php | 29 | ||||
-rw-r--r-- | tests/api/ApiUtilsTest.php | 15 |
2 files changed, 35 insertions, 9 deletions
diff --git a/tests/api/ApiMiddlewareTest.php b/tests/api/ApiMiddlewareTest.php index 4d4dd9b9..d9753b1d 100644 --- a/tests/api/ApiMiddlewareTest.php +++ b/tests/api/ApiMiddlewareTest.php | |||
@@ -143,7 +143,7 @@ class ApiMiddlewareTest extends \PHPUnit_Framework_TestCase | |||
143 | $env = Environment::mock([ | 143 | $env = Environment::mock([ |
144 | 'REQUEST_METHOD' => 'GET', | 144 | 'REQUEST_METHOD' => 'GET', |
145 | 'REQUEST_URI' => '/echo', | 145 | 'REQUEST_URI' => '/echo', |
146 | 'HTTP_JWT'=> 'jwt', | 146 | 'HTTP_AUTHORIZATION'=> 'Bearer jwt', |
147 | ]); | 147 | ]); |
148 | $request = Request::createFromEnvironment($env); | 148 | $request = Request::createFromEnvironment($env); |
149 | $response = new Response(); | 149 | $response = new Response(); |
@@ -157,7 +157,30 @@ class ApiMiddlewareTest extends \PHPUnit_Framework_TestCase | |||
157 | } | 157 | } |
158 | 158 | ||
159 | /** | 159 | /** |
160 | * Invoke the middleware without an invalid JWT token (debug): | 160 | * Invoke the middleware with an invalid JWT token header |
161 | */ | ||
162 | public function testInvalidJwtAuthHeaderDebug() | ||
163 | { | ||
164 | $this->conf->set('dev.debug', true); | ||
165 | $mw = new ApiMiddleware($this->container); | ||
166 | $env = Environment::mock([ | ||
167 | 'REQUEST_METHOD' => 'GET', | ||
168 | 'REQUEST_URI' => '/echo', | ||
169 | 'HTTP_AUTHORIZATION'=> 'PolarBearer jwt', | ||
170 | ]); | ||
171 | $request = Request::createFromEnvironment($env); | ||
172 | $response = new Response(); | ||
173 | /** @var Response $response */ | ||
174 | $response = $mw($request, $response, null); | ||
175 | |||
176 | $this->assertEquals(401, $response->getStatusCode()); | ||
177 | $body = json_decode((string) $response->getBody()); | ||
178 | $this->assertEquals('Not authorized: Invalid JWT header', $body->message); | ||
179 | $this->assertContains('ApiAuthorizationException', $body->stacktrace); | ||
180 | } | ||
181 | |||
182 | /** | ||
183 | * Invoke the middleware with an invalid JWT token (debug): | ||
161 | * should return a 401 error Unauthorized - with a specific message and a stacktrace. | 184 | * should return a 401 error Unauthorized - with a specific message and a stacktrace. |
162 | * | 185 | * |
163 | * Note: specific JWT errors tests are handled in ApiUtilsTest. | 186 | * Note: specific JWT errors tests are handled in ApiUtilsTest. |
@@ -169,7 +192,7 @@ class ApiMiddlewareTest extends \PHPUnit_Framework_TestCase | |||
169 | $env = Environment::mock([ | 192 | $env = Environment::mock([ |
170 | 'REQUEST_METHOD' => 'GET', | 193 | 'REQUEST_METHOD' => 'GET', |
171 | 'REQUEST_URI' => '/echo', | 194 | 'REQUEST_URI' => '/echo', |
172 | 'HTTP_JWT'=> 'bad jwt', | 195 | 'HTTP_AUTHORIZATION'=> 'Bearer jwt', |
173 | ]); | 196 | ]); |
174 | $request = Request::createFromEnvironment($env); | 197 | $request = Request::createFromEnvironment($env); |
175 | $response = new Response(); | 198 | $response = new Response(); |
diff --git a/tests/api/ApiUtilsTest.php b/tests/api/ApiUtilsTest.php index 516ee686..b4431d1b 100644 --- a/tests/api/ApiUtilsTest.php +++ b/tests/api/ApiUtilsTest.php | |||
@@ -2,6 +2,9 @@ | |||
2 | 2 | ||
3 | namespace Shaarli\Api; | 3 | namespace Shaarli\Api; |
4 | 4 | ||
5 | use Shaarli\Base64Url; | ||
6 | |||
7 | |||
5 | /** | 8 | /** |
6 | * Class ApiUtilsTest | 9 | * Class ApiUtilsTest |
7 | */ | 10 | */ |
@@ -24,14 +27,14 @@ class ApiUtilsTest extends \PHPUnit_Framework_TestCase | |||
24 | */ | 27 | */ |
25 | public static function generateValidJwtToken($secret) | 28 | public static function generateValidJwtToken($secret) |
26 | { | 29 | { |
27 | $header = base64_encode('{ | 30 | $header = Base64Url::encode('{ |
28 | "typ": "JWT", | 31 | "typ": "JWT", |
29 | "alg": "HS512" | 32 | "alg": "HS512" |
30 | }'); | 33 | }'); |
31 | $payload = base64_encode('{ | 34 | $payload = Base64Url::encode('{ |
32 | "iat": '. time() .' | 35 | "iat": '. time() .' |
33 | }'); | 36 | }'); |
34 | $signature = hash_hmac('sha512', $header .'.'. $payload , $secret); | 37 | $signature = Base64Url::encode(hash_hmac('sha512', $header .'.'. $payload , $secret, true)); |
35 | return $header .'.'. $payload .'.'. $signature; | 38 | return $header .'.'. $payload .'.'. $signature; |
36 | } | 39 | } |
37 | 40 | ||
@@ -46,9 +49,9 @@ class ApiUtilsTest extends \PHPUnit_Framework_TestCase | |||
46 | */ | 49 | */ |
47 | public static function generateCustomJwtToken($header, $payload, $secret) | 50 | public static function generateCustomJwtToken($header, $payload, $secret) |
48 | { | 51 | { |
49 | $header = base64_encode($header); | 52 | $header = Base64Url::encode($header); |
50 | $payload = base64_encode($payload); | 53 | $payload = Base64Url::encode($payload); |
51 | $signature = hash_hmac('sha512', $header . '.' . $payload, $secret); | 54 | $signature = Base64Url::encode(hash_hmac('sha512', $header . '.' . $payload, $secret, true)); |
52 | return $header . '.' . $payload . '.' . $signature; | 55 | return $header . '.' . $payload . '.' . $signature; |
53 | } | 56 | } |
54 | 57 | ||