Skip to content

Commit 8a6ef49

Browse files
author
Dave Wong
committed
use . notation
check to ensure the request key exists
1 parent 14426f3 commit 8a6ef49

File tree

2 files changed

+63
-10
lines changed

2 files changed

+63
-10
lines changed
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
<?php
2+
3+
namespace SoapBox\SignedRequests\Exceptions;
4+
5+
use Exception;
6+
use Symfony\Component\HttpFoundation\Response;
7+
use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface;
8+
9+
class InvalidConfigurationException extends Exception implements HttpExceptionInterface
10+
{
11+
/**
12+
* The default exception message.
13+
*
14+
* @var string
15+
*/
16+
const MESSAGE = 'Failed to find Signed Requests configuration key';
17+
18+
/**
19+
* Provides a default error message for an invalid signature.
20+
*
21+
* @param string $message
22+
* A customizable error message.
23+
*/
24+
public function __construct(string $message = self::MESSAGE)
25+
{
26+
parent::__construct($message);
27+
}
28+
29+
/**
30+
* Returns an HTTP BAD REQUEST status code.
31+
*
32+
* @return int
33+
* An HTTP BAD REQUEST response status code
34+
*/
35+
public function getStatusCode()
36+
{
37+
return Response::HTTP_UNPROCESSABLE_ENTITY;
38+
}
39+
40+
/**
41+
* Returns response headers.
42+
*
43+
* @return array
44+
* Response headers
45+
*/
46+
public function getHeaders()
47+
{
48+
return [];
49+
}
50+
}

src/Middlewares/Laravel/VerifySignature.php

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
use Illuminate\Contracts\Config\Repository as Configurations;
1010
use SoapBox\SignedRequests\Exceptions\ExpiredRequestException;
1111
use SoapBox\SignedRequests\Exceptions\InvalidSignatureException;
12+
use SoapBox\SignedRequests\Exceptions\InvalidConfigurationException;
1213

1314
class VerifySignature
1415
{
@@ -53,32 +54,34 @@ public function __construct(Configurations $configurations, Cache $cache)
5354
* Thrown if request replays are disabled and either the request
5455
* timestamp is outside the window of tolerance, or the request has
5556
* previously been served.
57+
* @throws \SoapBox\SignedRequests\Exceptions\InvalidConfigurationException
58+
* Thrown if the request key is not defined in the config
5659
*
5760
* @param \Illuminate\Http\Request $request
5861
* An instance of the request.
5962
* @param \Closure $next
6063
* A callback function of where to go next.
61-
* @param mixed $prefix
64+
* @param mixed $requestKey
6265
*
6366
* @return mixed
6467
*/
65-
public function handle(Request $request, Closure $next, $prefix = '')
68+
public function handle(Request $request, Closure $next, $requestKey = 'default')
6669
{
67-
if (!empty($prefix)) {
68-
$prefix .= '-';
70+
if (!array_key_exists($requestKey, $this->configurations->get('signed-requests'))) {
71+
throw new InvalidConfigurationException();
6972
}
7073

7174
$signed = new Verifier($request);
7275

7376
$key = sprintf(
7477
'%s.%s',
75-
$this->configurations->get($prefix . 'signed-requests.cache-prefix'),
78+
$this->configurations->get("signed-requests.$requestKey.cache-prefix"),
7679
$signed->getId()
7780
);
7881

79-
$tolerance = $this->configurations->get($prefix . 'signed-requests.request-replay.tolerance');
82+
$tolerance = $this->configurations->get("signed-requests.$requestKey.request-replay.tolerance");
8083

81-
if (true !== $this->configurations->get($prefix . 'signed-requests.request-replay.allow')) {
84+
if (true !== $this->configurations->get("signed-requests.$requestKey.request-replay.allow")) {
8285
$isExpired = $signed->isExpired($tolerance);
8386

8487
if ($isExpired || $this->cache->has($key)) {
@@ -87,10 +90,10 @@ public function handle(Request $request, Closure $next, $prefix = '')
8790
}
8891

8992
$signed
90-
->setSignatureHeader($this->configurations->get($prefix . 'signed-requests.headers.signature'))
91-
->setAlgorithmHeader($this->configurations->get($prefix . 'signed-requests.headers.algorithm'));
93+
->setSignatureHeader($this->configurations->get("signed-requests.$requestKey.headers.signature"))
94+
->setAlgorithmHeader($this->configurations->get("signed-requests.$requestKey.headers.algorithm"));
9295

93-
if (!$signed->isValid($this->configurations->get($prefix . 'signed-requests.key'))) {
96+
if (!$signed->isValid($this->configurations->get("signed-requests.$requestKey.key"))) {
9497
throw new InvalidSignatureException();
9598
}
9699

0 commit comments

Comments
 (0)