Skip to content

Commit

Permalink
Merge cbf5cd5 into 2900144
Browse files Browse the repository at this point in the history
  • Loading branch information
bakura10 committed May 14, 2014
2 parents 2900144 + cbf5cd5 commit f3f1d1d
Show file tree
Hide file tree
Showing 3 changed files with 175 additions and 1 deletion.
12 changes: 11 additions & 1 deletion src/ZfrOAuth2Module/Server/Controller/TokenController.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
use Zend\Http\Request as HttpRequest;
use Zend\Mvc\Controller\AbstractActionController;
use ZfrOAuth2\Server\AuthorizationServer;
use ZfrOAuth2Module\Server\Event\TokenEvent;
use ZfrOAuth2Module\Server\Exception\RuntimeException;

/**
Expand Down Expand Up @@ -55,7 +56,16 @@ public function tokenAction()
return null;
}

return $this->authorizationServer->handleTokenRequest($this->request);
$response = $this->authorizationServer->handleTokenRequest($this->request);
$event = new TokenEvent($this->getRequest(), $response, $response->getMetadata('accessToken', null));

if ($response->getStatusCode() === 200) {
$this->getEventManager()->trigger(TokenEvent::EVENT_TOKEN_CREATED, $event);
} else {
$this->getEventManager()->trigger(TokenEvent::EVENT_TOKEN_FAILED, $event);
}

return $response;
}

/**
Expand Down
85 changes: 85 additions & 0 deletions src/ZfrOAuth2Module/Server/Event/TokenEvent.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
<?php
/*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* This software consists of voluntary contributions made by many individuals
* and is licensed under the MIT license.
*/

namespace ZfrOAuth2Module\Server\Event;

use Zend\EventManager\Event;
use Zend\Http\Request as HttpRequest;
use Zend\Http\Response as HttpResponse;
use ZfrOAuth2\Server\Entity\AccessToken;

/**
* @author Michaël Gallego <mic.gallego@gmail.com>
* @licence MIT
*/
class TokenEvent extends Event
{
const EVENT_TOKEN_CREATED = 'token.created';
const EVENT_TOKEN_FAILED = 'token.failed';

/**
* @var HttpRequest
*/
protected $request;

/**
* @var HttpResponse
*/
protected $response;

/**
* @var AccessToken|null
*/
protected $accessToken;

/**
* @param HttpRequest $request
* @param HttpResponse $response
* @param AccessToken|null $accessToken
*/
public function __construct(HttpRequest $request, HttpResponse $response, AccessToken $accessToken = null)
{
$this->request = $request;
$this->response = $response;
$this->accessToken = $accessToken;
}

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

/**
* @return HttpResponse
*/
public function getResponse()
{
return $this->response;
}

/**
* @return AccessToken|null
*/
public function getAccessToken()
{
return $this->accessToken;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,9 @@

use Zend\Http\Request as HttpRequest;
use Zend\Http\Response as HttpResponse;
use ZfrOAuth2\Server\Entity\AccessToken;
use ZfrOAuth2Module\Server\Controller\TokenController;
use ZfrOAuth2Module\Server\Event\TokenEvent;

/**
* @author Michaël Gallego <mic.gallego@gmail.com>
Expand Down Expand Up @@ -65,4 +67,81 @@ public function testDelegateToAuthorizationServerIfHttpRequest()

$this->assertSame($response, $controller->tokenAction($request));
}

public function testTriggerEventIfTokenIsCreated()
{
$authorizationServer = $this->getMock('ZfrOAuth2\Server\AuthorizationServer', [], [], '', false);
$controller = new TokenController($authorizationServer);

$request = new HttpRequest();
$response = new HttpResponse();

$reflProperty = new \ReflectionProperty($controller, 'request');
$reflProperty->setAccessible(true);
$reflProperty->setValue($controller, $request);

$authorizationServer->expects($this->once())
->method('handleTokenRequest')
->with($request)
->will($this->returnValue($response));

$accessToken = new AccessToken();

$eventManager = $this->getMock('Zend\EventManager\EventManagerInterface');
$controller->setEventManager($eventManager);

$response->setStatusCode(200);
$response->setMetadata('accessToken', $accessToken);

$eventManager->expects($this->once())
->method('trigger')
->with(TokenEvent::EVENT_TOKEN_CREATED, $this->callback(
function(TokenEvent $event) use ($request, $response, $accessToken) {
$this->assertSame($request, $event->getRequest());
$this->assertSame($response, $event->getResponse());
$this->assertSame($accessToken, $event->getAccessToken());

return true;
}));

$controller->tokenAction($request);
}

public function testTriggerEventIfTokenIsNotCreated()
{
$authorizationServer = $this->getMock('ZfrOAuth2\Server\AuthorizationServer', [], [], '', false);
$controller = new TokenController($authorizationServer);

$request = new HttpRequest();
$response = new HttpResponse();

$reflProperty = new \ReflectionProperty($controller, 'request');
$reflProperty->setAccessible(true);
$reflProperty->setValue($controller, $request);

$authorizationServer->expects($this->once())
->method('handleTokenRequest')
->with($request)
->will($this->returnValue($response));

$accessToken = new AccessToken();

$eventManager = $this->getMock('Zend\EventManager\EventManagerInterface');
$controller->setEventManager($eventManager);

$response->setStatusCode(400);

$eventManager->expects($this->once())
->method('trigger')
->with(TokenEvent::EVENT_TOKEN_FAILED, $this->callback(
function(TokenEvent $event) use ($request, $response) {
$this->assertSame($request, $event->getRequest());
$this->assertSame($response, $event->getResponse());
$this->assertNull($event->getAccessToken());

return true;
}));

$controller->tokenAction($request);
}
}

0 comments on commit f3f1d1d

Please sign in to comment.