diff --git a/examples/relational/api.php b/examples/relational/api.php index 9c1d4a79..5b62898a 100644 --- a/examples/relational/api.php +++ b/examples/relational/api.php @@ -33,6 +33,7 @@ $server = new ResourceServer( $request = (new Request)->createFromGlobals(); $router = new \Orno\Route\RouteCollection; +// GET /tokeninfo $router->get('/tokeninfo', function (Request $request) use ($server) { $token = [ @@ -47,12 +48,64 @@ $router->get('/tokeninfo', function (Request $request) use ($server) { }); +// GET /users +$router->get('/users', function (Request $request) use ($server) { + + $results = (new Model\Users())->get(); + + $users = []; + + foreach ($results as $result) { + $user = [ + 'username' => $result['username'], + 'name' => $result['name'] + ]; + + if ($server->hasScope('email')) { + $user['email'] = $result['email']; + } + + if ($server->hasScope('photo')) { + $user['photo'] = $result['photo']; + } + + $users[] = $user; + } + + return new Response(json_encode($users)); +}); + +// GET /users/{username} +$router->get('/users/{username}', function (Request $request, $args) use ($server) { + + $result = (new Model\Users())->get($args['username']); + + if (count($result) === 0) { + throw new NotFoundException(); + } + + $user = [ + 'username' => $result[0]['username'], + 'name' => $result[0]['name'] + ]; + + if ($server->hasScope('email')) { + $user['email'] = $result[0]['email']; + } + + if ($server->hasScope('photo')) { + $user['photo'] = $result[0]['photo']; + } + + return new Response(json_encode($user)); +}); + $dispatcher = $router->getDispatcher(); try { // Check that access token is present - $server->isValidRequest(); + $server->isValidRequest(false); // A successful response $response = $dispatcher->dispatch( @@ -89,4 +142,4 @@ try { $response->headers->set('Content-type', 'application/json'); $response->send(); -} \ No newline at end of file +} diff --git a/examples/relational/other_grants.php b/examples/relational/other_grants.php index 6b399ebd..ceff87f7 100644 --- a/examples/relational/other_grants.php +++ b/examples/relational/other_grants.php @@ -1,24 +1,22 @@ createFromGlobals(); $router = new \Orno\Route\RouteCollection; +$router->setStrategy(\Orno\Route\RouteStrategyInterface::RESTFUL_STRATEGY); -// Set up the OAuth 2.0 resource server +// Set up the OAuth 2.0 authorization server $server = new \League\OAuth2\Server\AuthorizationServer; $server->setSessionStorage(new Storage\SessionStorage); $server->setAccessTokenStorage(new Storage\AccessTokenStorage); @@ -27,6 +25,12 @@ $server->setClientStorage(new Storage\ClientStorage); $server->setScopeStorage(new Storage\ScopeStorage); $server->setAuthCodeStorage(new Storage\AuthCodeStorage); +$clientCredentials = new \League\OAuth2\Server\Grant\ClientCredentialsGrant(); +$server->addGrantType($clientCredentials); +$passwordGrant = new \League\OAuth2\Server\Grant\PasswordGrant(); +$server->addGrantType($passwordGrant); +$refrehTokenGrant = new \League\OAuth2\Server\Grant\RefreshTokenGrant(); +$server->addGrantType($refrehTokenGrant); $clientCredentials = new \League\OAuth2\Server\Grant\ClientCredentialsGrant(); $server->addGrantType($clientCredentials); $passwordGrant = new \League\OAuth2\Server\Grant\PasswordGrant(); @@ -34,8 +38,9 @@ $server->addGrantType($passwordGrant); $refrehTokenGrant = new \League\OAuth2\Server\Grant\RefreshTokenGrant(); $server->addGrantType($refrehTokenGrant); +// Routing setup $request = (new Request)->createFromGlobals(); -$server->setRequest($request); +$router = new \Orno\Route\RouteCollection; $router->post('/access_token', function (Request $request) use ($server) { @@ -60,5 +65,42 @@ $router->post('/access_token', function (Request $request) use ($server) { }); $dispatcher = $router->getDispatcher(); -$response = $dispatcher->dispatch($request->getMethod(), $request->getPathInfo()); -$response->send(); + +try { + + // A successful response + $response = $dispatcher->dispatch( + $request->getMethod(), + $request->getPathInfo() + ); + +} catch (\Orno\Http\Exception $e) { + + // A failed response + $response = $e->getJsonResponse(); + $response->setContent(json_encode(['status_code' => $e->getStatusCode(), 'message' => $e->getMessage()])); + +} catch (\League\OAuth2\Server\Exception\OAuthException $e) { + + $response = new Response(json_encode([ + 'error' => $e->errorType, + 'message' => $e->getMessage() + ]), $e->httpStatusCode); + + foreach ($e->getHttpHeaders() as $header) { + $response->headers($header); + } + +} catch (\Exception $e) { + + $response = new Orno\Http\Response; + $response->setStatusCode(500); + $response->setContent(json_encode(['status_code' => 500, 'message' => $e->getMessage()])); + +} finally { + + // Return the response + $response->headers->set('Content-type', 'application/json'); + $response->send(); + +}