Skip to content

Commit

Permalink
Merge branch 'develop'
Browse files Browse the repository at this point in the history
  • Loading branch information
jeremykendall committed Apr 5, 2017
2 parents 4a2eb27 + 90149e0 commit 702e6f3
Show file tree
Hide file tree
Showing 7 changed files with 216 additions and 4 deletions.
1 change: 1 addition & 0 deletions .gitignore
@@ -1,3 +1,4 @@
build
vendor
composer.lock
.idea
2 changes: 1 addition & 1 deletion composer.json
Expand Up @@ -17,7 +17,7 @@
],
"require": {
"php": ">=5.4",
"ircmaxell/random-lib": "v1.0.0"
"ircmaxell/random-lib": "~v1.0"
},
"require-dev": {
"guzzle/guzzle": ">=3.7.0,<=3.9.9",
Expand Down
68 changes: 68 additions & 0 deletions src/QueryAuth/Request/Adapter/Incoming/Yii2RequestAdapter.php
@@ -0,0 +1,68 @@
<?php

namespace QueryAuth\Request\Adapter\Incoming;

use QueryAuth\Request\IncomingRequestInterface;
use QueryAuth\Request\RequestInterface;
use \yii\web\Request;

/**
* Incoming request adapter for Yii2
*/
class Yii2RequestAdapter implements IncomingRequestInterface, RequestInterface
{
/**
* @var Request request
*/
protected $request;

/**
* Public constructor
*
* @param Request $request
*/
public function __construct(Request $request)
{
$this->request = $request;
}

/**
* {@inheritDoc}
*/
public function getMethod()
{
return $this->request->getMethod();
}

/**
* {@inheritDoc}
*/
public function getHost()
{
return parse_url($this->request->getHostInfo())['host'];
}

/**
* {@inheritDoc}
*/
public function getPath()
{
return $this->request->getPathInfo();
}

/**
* {@inheritDoc}
*/
public function getParams()
{
if (strtolower($this->getMethod()) === 'get') {
return $this->request->get();
}

if (strtolower($this->getMethod()) === 'delete') {
return array_merge($this->request->get(), $this->request->getBodyParams());
}

return $this->request->post();
}
}
116 changes: 116 additions & 0 deletions src/QueryAuth/Request/Adapter/Outgoing/GuzzleV6RequestAdapter.php
@@ -0,0 +1,116 @@
<?php
/**
* Query Auth: Signature generation and validation for REST API query authentication
*
* @copyright 2013-2014 Jeremy Kendall
* @license https://github.com/jeremykendall/query-auth/blob/master/LICENSE MIT
* @link https://github.com/jeremykendall/query-auth
*/

namespace QueryAuth\Request\Adapter\Outgoing;

use Psr\Http\Message\RequestInterface as GuzzleHttpRequestInterface;
use QueryAuth\Request\OutgoingImmutableRequestInterface;
use QueryAuth\Request\OutgoingRequestInterface;
use QueryAuth\Request\RequestInterface;

/**
* Outgoing request adapter for Guzzle v6
*/
class GuzzleV6RequestAdapter implements OutgoingRequestInterface, OutgoingImmutableRequestInterface, RequestInterface
{
/**
* @var GuzzleHttpRequestInterface Guzzle request interface
*/
protected $request;

/**
* Public constructor
*
* @param GuzzleHttpRequestInterface $request
*/
public function __construct(GuzzleHttpRequestInterface $request)
{
$this->request = $request;
}

/**
* {@inheritDoc}
*/
public function getMethod()
{
return $this->request->getMethod();
}

/**
* {@inheritDoc}
*/
public function getHost()
{
return $this->request->getUri()->getHost();
}

/**
* {@inheritDoc}
*/
public function getPath()
{
return $this->request->getUri()->getPath();
}

/**
* Gets params
*
* {@inheritDoc}
*/
public function getParams()
{
if ($this->getMethod() === 'POST') {
return [];
}

return \GuzzleHttp\Psr7\parse_query($this->request->getUri()->getQuery());
}

/**
* Adds parameter to request
*
* {@inheritDoc}
*/
public function addParam($key, $value)
{
$queryParams = \GuzzleHttp\Psr7\parse_query($this->request->getUri()->getQuery());
$queryParams[$key] = $value;

$this->request = \GuzzleHttp\Psr7\modify_request($this->request, [
'query' => \GuzzleHttp\Psr7\build_query($queryParams)
]);
return $this->request;
}

/**
* Replaces request params
*
* {@inheritDoc}
*/
public function replaceParams(array $params)
{
$queryParams = \GuzzleHttp\Psr7\parse_query($this->request->getUri()->getQuery());
foreach ($params as $key => $value) {
$queryParams[$key] = $value;
}

$this->request = \GuzzleHttp\Psr7\modify_request($this->request, [
'query' => \GuzzleHttp\Psr7\build_query($queryParams)
]);
return $this->request;
}

/**
* @return GuzzleHttpRequestInterface
*/
public function getRequest()
{
return $this->request;
}
}
23 changes: 23 additions & 0 deletions src/QueryAuth/Request/OutgoingImmutableRequestInterface.php
@@ -0,0 +1,23 @@
<?php
/**
* Query Auth: Signature generation and validation for REST API query authentication
*
* @copyright 2013-2014 Jeremy Kendall
* @license https://github.com/jeremykendall/query-auth/blob/master/LICENSE MIT
* @link https://github.com/jeremykendall/query-auth
*/

namespace QueryAuth\Request;

/**
* Interface for outgoing requests.
*
* Used to facilitate request signing and differentiate from incoming requests.
*/
interface OutgoingImmutableRequestInterface
{
/**
* @return mixed
*/
public function getRequest();
}
6 changes: 5 additions & 1 deletion src/QueryAuth/Request/RequestSigner.php
Expand Up @@ -51,7 +51,7 @@ public function __construct(SignatureInterface $signature, KeyGenerator $keyGene
*
* @param RequestInterface $request Request
* @param CredentialsInterface $credentials Credentials
* @return void
* @return mixed
*/
public function signRequest(
OutgoingRequestInterface $request,
Expand All @@ -65,6 +65,10 @@ public function signRequest(
$signature = $this->signature->createSignature($request, $credentials);

$request->addParam('signature', $signature);

if ($request instanceof OutgoingImmutableRequestInterface) {
return $request->getRequest();
}
}

/**
Expand Down
4 changes: 2 additions & 2 deletions tests/QueryAuth/KeyGeneratorTest.php
Expand Up @@ -24,12 +24,12 @@ public function testGenerateKey()
public function testGenerateSecret()
{
$secret = $this->keyGenerator->generateSecret();
$this->assertRegexp('/^[0-9A-Za-z\/\.]{60}$/', $secret);
$this->assertRegexp('/^[0-9A-Za-z\/\.\+]{60}$/', $secret);
}

public function testGenerateNonce()
{
$secret = $this->keyGenerator->generateNonce();
$this->assertRegexp('/^[0-9A-Za-z\/\.]{64}$/', $secret);
$this->assertRegexp('/^[0-9A-Za-z\/\.\+]{64}$/', $secret);
}
}

0 comments on commit 702e6f3

Please sign in to comment.