Skip to content

Commit

Permalink
Added RouteRegistrar (partially taken from laravel/passport) and rewo…
Browse files Browse the repository at this point in the history
…rked the way routes are registered (closer to that of laravel/passport)
  • Loading branch information
andrew-s committed May 5, 2017
1 parent 86406b2 commit 3e123c1
Show file tree
Hide file tree
Showing 4 changed files with 148 additions and 102 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
vendor/
.idea/
25 changes: 25 additions & 0 deletions src/LumenPassport.php
Original file line number Diff line number Diff line change
Expand Up @@ -60,4 +60,29 @@ public static function tokensExpireIn(DateTimeInterface $date = null, $clientId

return new static;
}

/**
* Get a Passport route registrar.
*
* @param array $options
* @return RouteRegistrar
*/
public static function routes($callback = null, array $options = [])
{
$callback = $callback ?: function ($router) {
$router->all();
};

$defaultOptions = [
'prefix' => 'oauth',
'namespace' => '\Laravel\Passport\Http\Controllers',
];

$options = array_merge($defaultOptions, $options);

$callback->group($options, function ($router) use ($callback) {
$routes = new RouteRegistrar($router);
$routes->all();
});
}
}
102 changes: 0 additions & 102 deletions src/PassportServiceProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -28,113 +28,11 @@ public function boot()
Purge::class
]);
}

$this->registerRoutes();
}
/**
* @return void
*/
public function register()
{
}

/**
* Register routes for transient tokens, clients, and personal access tokens.
*
* @return void
*/
public function registerRoutes()
{
$this->forAccessTokens();
$this->forTransientTokens();
$this->forClients();
$this->forPersonalAccessTokens();
}

/**
* Register the routes for retrieving and issuing access tokens.
*
* @return void
*/
public function forAccessTokens()
{
$this->app->post('/oauth/token', [
'uses' => '\Dusterio\LumenPassport\Http\Controllers\AccessTokenController@issueToken'
]);

$this->app->group(['middleware' => ['auth']], function () {
$this->app->get('/oauth/tokens', [
'uses' => '\Laravel\Passport\Http\Controllers\AuthorizedAccessTokenController@forUser',
]);

$this->app->delete('/oauth/tokens/{token_id}', [
'uses' => '\Laravel\Passport\Http\Controllers\AuthorizedAccessTokenController@destroy',
]);
});
}

/**
* Register the routes needed for refreshing transient tokens.
*
* @return void
*/
public function forTransientTokens()
{
$this->app->post('/oauth/token/refresh', [
'middleware' => ['auth'],
'uses' => '\Laravel\Passport\Http\Controllers\TransientTokenController@refresh',
]);
}

/**
* Register the routes needed for managing clients.
*
* @return void
*/
public function forClients()
{
$this->app->group(['middleware' => ['auth']], function () {
$this->app->get('/oauth/clients', [
'uses' => '\Laravel\Passport\Http\Controllers\ClientController@forUser',
]);

$this->app->post('/oauth/clients', [
'uses' => '\Laravel\Passport\Http\Controllers\ClientController@store',
]);

$this->app->put('/oauth/clients/{client_id}', [
'uses' => '\Laravel\Passport\Http\Controllers\ClientController@update',
]);

$this->app->delete('/oauth/clients/{client_id}', [
'uses' => '\Laravel\Passport\Http\Controllers\ClientController@destroy',
]);
});
}

/**
* Register the routes needed for managing personal access tokens.
*
* @return void
*/
public function forPersonalAccessTokens()
{
$this->app->group(['middleware' => ['auth']], function () {
$this->app->get('/oauth/scopes', [
'uses' => '\Laravel\Passport\Http\Controllers\ScopeController@all',
]);

$this->app->get('/oauth/personal-access-tokens', [
'uses' => '\Laravel\Passport\Http\Controllers\PersonalAccessTokenController@forUser',
]);

$this->app->post('/oauth/personal-access-tokens', [
'uses' => '\Laravel\Passport\Http\Controllers\PersonalAccessTokenController@store',
]);

$this->app->delete('/oauth/personal-access-tokens/{token_id}', [
'uses' => '\Laravel\Passport\Http\Controllers\PersonalAccessTokenController@destroy',
]);
});
}
}
122 changes: 122 additions & 0 deletions src/RouteRegistrar.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
<?php

namespace Dusterio\LumenPassport;

class RouteRegistrar
{
/**
* Application
*/
private $app;

/**
* Create a new route registrar instance.
*
* @param $app
* @return void
*/
public function __construct($app)
{
$this->app = $app;
}

/**
* Register routes for transient tokens, clients, and personal access tokens.
*
* @return void
*/
public function all()
{
$this->forAccessTokens();
$this->forTransientTokens();
$this->forClients();
$this->forPersonalAccessTokens();
}

/**
* Register the routes for retrieving and issuing access tokens.
*
* @return void
*/
public function forAccessTokens()
{
$this->app->post('/token', [
'uses' => '\Dusterio\LumenPassport\Http\Controllers\AccessTokenController@issueToken'
]);

$this->app->group(['middleware' => ['auth']], function () {
$this->app->get('/tokens', [
'uses' => '\Laravel\Passport\Http\Controllers\AuthorizedAccessTokenController@forUser',
]);

$this->app->delete('/tokens/{token_id}', [
'uses' => '\Laravel\Passport\Http\Controllers\AuthorizedAccessTokenController@destroy',
]);
});
}

/**
* Register the routes needed for refreshing transient tokens.
*
* @return void
*/
public function forTransientTokens()
{
$this->app->post('/token/refresh', [
'middleware' => ['auth'],
'uses' => '\Laravel\Passport\Http\Controllers\TransientTokenController@refresh',
]);
}

/**
* Register the routes needed for managing clients.
*
* @return void
*/
public function forClients()
{
$this->app->group(['middleware' => ['auth']], function () {
$this->app->get('/clients', [
'uses' => '\Laravel\Passport\Http\Controllers\ClientController@forUser',
]);

$this->app->post('/clients', [
'uses' => '\Laravel\Passport\Http\Controllers\ClientController@store',
]);

$this->app->put('/clients/{client_id}', [
'uses' => '\Laravel\Passport\Http\Controllers\ClientController@update',
]);

$this->app->delete('/clients/{client_id}', [
'uses' => '\Laravel\Passport\Http\Controllers\ClientController@destroy',
]);
});
}

/**
* Register the routes needed for managing personal access tokens.
*
* @return void
*/
public function forPersonalAccessTokens()
{
$this->app->group(['middleware' => ['auth']], function () {
$this->app->get('/scopes', [
'uses' => '\Laravel\Passport\Http\Controllers\ScopeController@all',
]);

$this->app->get('/personal-access-tokens', [
'uses' => '\Laravel\Passport\Http\Controllers\PersonalAccessTokenController@forUser',
]);

$this->app->post('/personal-access-tokens', [
'uses' => '\Laravel\Passport\Http\Controllers\PersonalAccessTokenController@store',
]);

$this->app->delete('/personal-access-tokens/{token_id}', [
'uses' => '\Laravel\Passport\Http\Controllers\PersonalAccessTokenController@destroy',
]);
});
}
}

0 comments on commit 3e123c1

Please sign in to comment.