Skip to content

Commit a489f4f

Browse files
author
Justin Hayes
authored
Merge pull request #12 from SoapBox/feature/add-generate-signature-middleware
[Feature] Add generate signature middleware
2 parents f1a8770 + 4480578 commit a489f4f

File tree

4 files changed

+110
-4
lines changed

4 files changed

+110
-4
lines changed
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
<?php
2+
3+
namespace SoapBox\SignedRequests\Middlewares\Guzzle;
4+
5+
use Psr\Http\Message\RequestInterface;
6+
use SoapBox\SignedRequests\Requests\Generator;
7+
8+
class GenerateSignature
9+
{
10+
/**
11+
* An instance of the signed request generator
12+
*
13+
* @var \SoapBox\SignedRequests\Requests\Generator
14+
*/
15+
protected $generator;
16+
17+
/**
18+
* Expect an instance of the generator so we can sign the request
19+
*
20+
* @param \SoapBox\SignedRequests\Requests\Generator $generator
21+
* An instance of the signed request generator
22+
*/
23+
public function __construct(Generator $generator)
24+
{
25+
$this->generator = $generator;
26+
}
27+
28+
/**
29+
* Return the middleware callable. This callable function signs the request.
30+
*
31+
* @param callable $handler
32+
* The next handler to invoke
33+
*
34+
* @return callable
35+
*/
36+
public function __invoke(callable $handler) : callable
37+
{
38+
return function (RequestInterface $request, array $options) use ($handler) {
39+
$request = $this->generator->sign($request);
40+
return $handler($request, $options);
41+
};
42+
}
43+
}

src/Middlewares/VerifySignature.php renamed to src/Middlewares/Laravel/VerifySignature.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?php
22

3-
namespace SoapBox\SignedRequests\Middlewares;
3+
namespace SoapBox\SignedRequests\Middlewares\Laravel;
44

55
use Closure;
66
use Illuminate\Http\Request;
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
<?php
2+
3+
namespace Tests\Midlewares\Guzzle;
4+
5+
use Mockery;
6+
use Tests\TestCase;
7+
use GuzzleHttp\Psr7\Request;
8+
use Illuminate\Config\Repository;
9+
use Psr\Http\Message\RequestInterface;
10+
use SoapBox\SignedRequests\Requests\Generator;
11+
use SoapBox\SignedRequests\Middlewares\Guzzle\GenerateSignature;
12+
13+
class GenerateSignatureTest extends TestCase
14+
{
15+
/**
16+
* @test
17+
*/
18+
public function it_can_be_constructed()
19+
{
20+
$middleware = new GenerateSignature(new Generator(Mockery::mock(Repository::class)));
21+
$this->assertInstanceOf(GenerateSignature::class, $middleware);
22+
}
23+
24+
/**
25+
* @test
26+
*/
27+
public function it_signs_the_request()
28+
{
29+
$configurations = Mockery::mock(Repository::class);
30+
$configurations->shouldReceive('get')
31+
->with('signed-requests.cache-prefix')
32+
->andReturn('prefix');
33+
$configurations->shouldReceive('get')
34+
->with('signed-requests.request-replay.tolerance')
35+
->andReturn(60);
36+
$configurations->shouldReceive('get')
37+
->with('signed-requests.headers.algorithm')
38+
->andReturn('Test-Algorithm');
39+
$configurations->shouldReceive('get')
40+
->with('signed-requests.headers.signature')
41+
->andReturn('Test-Signature');
42+
$algorithm = $configurations->shouldReceive('get')
43+
->with('signed-requests.algorithm')
44+
->andReturn('sha256');
45+
$key = $configurations->shouldReceive('get')
46+
->with('signed-requests.key')
47+
->andReturn('bigsecretrighthereitellyouwhat');
48+
$middleware = new GenerateSignature(new Generator($configurations));
49+
50+
$nextHandler = function (RequestInterface $request, array $options) {
51+
return $request;
52+
};
53+
54+
$request = new Request('get', 'tested');
55+
56+
$handler = call_user_func_array($middleware, [$nextHandler]);
57+
$request = $handler($request, []);
58+
59+
$this->assertTrue($request->hasHeader('Test-Signature'));
60+
$this->assertTrue($request->hasHeader('Test-Algorithm'));
61+
$this->assertSame('sha256', $request->getHeader('Test-Algorithm')[0]);
62+
}
63+
}

tests/Middlewares/VerifySignatureTest.php renamed to tests/Middlewares/Laravel/VerifySignatureTest.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?php
22

3-
namespace Tests\Middlewares;
3+
namespace Tests\Middlewares\Laravel;
44

55
use Mockery;
66
use Carbon\Carbon;
@@ -13,15 +13,15 @@
1313
use SoapBox\SignedRequests\Requests\Payload;
1414
use SoapBox\SignedRequests\Requests\Generator;
1515
use Illuminate\Contracts\Cache\Repository as Cache;
16-
use SoapBox\SignedRequests\Middlewares\VerifySignature;
1716
use Illuminate\Contracts\Config\Repository as Configurations;
17+
use SoapBox\SignedRequests\Middlewares\Laravel\VerifySignature;
1818

1919
class VerifySignatureTest extends TestCase
2020
{
2121
/**
2222
* An instance of the verify signature middleware we can use for testing.
2323
*
24-
* @var \SoapBox\SignedRequests\Middlewares\VerifySignature
24+
* @var \SoapBox\SignedRequests\Middlewares\Laravel\VerifySignature
2525
*/
2626
protected $middleware;
2727

0 commit comments

Comments
 (0)