Update v1.0.6
This commit is contained in:
267
vendor/tymon/jwt-auth/src/Providers/JWTAuthServiceProvider.php
vendored
Normal file
267
vendor/tymon/jwt-auth/src/Providers/JWTAuthServiceProvider.php
vendored
Normal file
@@ -0,0 +1,267 @@
|
||||
<?php
|
||||
|
||||
namespace Tymon\JWTAuth\Providers;
|
||||
|
||||
use Tymon\JWTAuth\JWTAuth;
|
||||
use Tymon\JWTAuth\Blacklist;
|
||||
use Tymon\JWTAuth\JWTManager;
|
||||
use Tymon\JWTAuth\PayloadFactory;
|
||||
use Tymon\JWTAuth\Claims\Factory;
|
||||
use Illuminate\Support\ServiceProvider;
|
||||
use Tymon\JWTAuth\Commands\JWTGenerateCommand;
|
||||
use Tymon\JWTAuth\Validators\PayloadValidator;
|
||||
|
||||
class JWTAuthServiceProvider extends ServiceProvider
|
||||
{
|
||||
/**
|
||||
* Indicates if loading of the provider is deferred.
|
||||
*
|
||||
* @var bool
|
||||
*/
|
||||
protected $defer = false;
|
||||
|
||||
/**
|
||||
* Boot the service provider.
|
||||
*/
|
||||
public function boot()
|
||||
{
|
||||
$this->publishes([
|
||||
__DIR__.'/../config/config.php' => config_path('jwt.php')
|
||||
], 'config');
|
||||
|
||||
$this->bootBindings();
|
||||
|
||||
$this->commands('tymon.jwt.generate');
|
||||
}
|
||||
|
||||
/**
|
||||
* Bind some Interfaces and implementations
|
||||
*/
|
||||
protected function bootBindings()
|
||||
{
|
||||
$this->app['Tymon\JWTAuth\JWTAuth'] = function ($app) {
|
||||
return $app['tymon.jwt.auth'];
|
||||
};
|
||||
|
||||
$this->app['Tymon\JWTAuth\Providers\User\UserInterface'] = function ($app) {
|
||||
return $app['tymon.jwt.provider.user'];
|
||||
};
|
||||
|
||||
$this->app['Tymon\JWTAuth\Providers\JWT\JWTInterface'] = function ($app) {
|
||||
return $app['tymon.jwt.provider.jwt'];
|
||||
};
|
||||
|
||||
$this->app['Tymon\JWTAuth\Providers\Auth\AuthInterface'] = function ($app) {
|
||||
return $app['tymon.jwt.provider.auth'];
|
||||
};
|
||||
|
||||
$this->app['Tymon\JWTAuth\Providers\Storage\StorageInterface'] = function ($app) {
|
||||
return $app['tymon.jwt.provider.storage'];
|
||||
};
|
||||
|
||||
$this->app['Tymon\JWTAuth\JWTManager'] = function ($app) {
|
||||
return $app['tymon.jwt.manager'];
|
||||
};
|
||||
|
||||
$this->app['Tymon\JWTAuth\Blacklist'] = function ($app) {
|
||||
return $app['tymon.jwt.blacklist'];
|
||||
};
|
||||
|
||||
$this->app['Tymon\JWTAuth\PayloadFactory'] = function ($app) {
|
||||
return $app['tymon.jwt.payload.factory'];
|
||||
};
|
||||
|
||||
$this->app['Tymon\JWTAuth\Claims\Factory'] = function ($app) {
|
||||
return $app['tymon.jwt.claim.factory'];
|
||||
};
|
||||
|
||||
$this->app['Tymon\JWTAuth\Validators\PayloadValidator'] = function ($app) {
|
||||
return $app['tymon.jwt.validators.payload'];
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Register the service provider.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function register()
|
||||
{
|
||||
// register providers
|
||||
$this->registerUserProvider();
|
||||
$this->registerJWTProvider();
|
||||
$this->registerAuthProvider();
|
||||
$this->registerStorageProvider();
|
||||
$this->registerJWTBlacklist();
|
||||
|
||||
$this->registerClaimFactory();
|
||||
$this->registerJWTManager();
|
||||
|
||||
$this->registerJWTAuth();
|
||||
$this->registerPayloadValidator();
|
||||
$this->registerPayloadFactory();
|
||||
$this->registerJWTCommand();
|
||||
|
||||
$this->mergeConfigFrom(__DIR__ . '/../config/config.php', 'jwt');
|
||||
}
|
||||
|
||||
/**
|
||||
* Register the bindings for the User provider
|
||||
*/
|
||||
protected function registerUserProvider()
|
||||
{
|
||||
$this->app['tymon.jwt.provider.user'] = $this->app->share(function ($app) {
|
||||
return $app->make($this->config('providers.user'), [$app->make($this->config('user'))]);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Register the bindings for the JSON Web Token provider
|
||||
*/
|
||||
protected function registerJWTProvider()
|
||||
{
|
||||
$this->app['tymon.jwt.provider.jwt'] = $this->app->share(function ($app) {
|
||||
|
||||
$secret = $this->config('secret');
|
||||
$algo = $this->config('algo');
|
||||
$provider = $this->config('providers.jwt');
|
||||
|
||||
return $app->make($provider, [$secret, $algo]);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Register the bindings for the Auth provider
|
||||
*/
|
||||
protected function registerAuthProvider()
|
||||
{
|
||||
$this->app['tymon.jwt.provider.auth'] = $this->app->share(function ($app) {
|
||||
return $this->getConfigInstance($this->config('providers.auth'));
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Register the bindings for the Storage provider
|
||||
*/
|
||||
protected function registerStorageProvider()
|
||||
{
|
||||
$this->app['tymon.jwt.provider.storage'] = $this->app->share(function ($app) {
|
||||
return $this->getConfigInstance($this->config('providers.storage'));
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Register the bindings for the Payload Factory
|
||||
*/
|
||||
protected function registerClaimFactory()
|
||||
{
|
||||
$this->app->singleton('tymon.jwt.claim.factory', function () {
|
||||
return new Factory();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Register the bindings for the JWT Manager
|
||||
*/
|
||||
protected function registerJWTManager()
|
||||
{
|
||||
$this->app['tymon.jwt.manager'] = $this->app->share(function ($app) {
|
||||
|
||||
$instance = new JWTManager(
|
||||
$app['tymon.jwt.provider.jwt'],
|
||||
$app['tymon.jwt.blacklist'],
|
||||
$app['tymon.jwt.payload.factory']
|
||||
);
|
||||
|
||||
return $instance->setBlacklistEnabled((bool) $this->config('blacklist_enabled'));
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Register the bindings for the main JWTAuth class
|
||||
*/
|
||||
protected function registerJWTAuth()
|
||||
{
|
||||
$this->app['tymon.jwt.auth'] = $this->app->share(function ($app) {
|
||||
|
||||
$auth = new JWTAuth(
|
||||
$app['tymon.jwt.manager'],
|
||||
$app['tymon.jwt.provider.user'],
|
||||
$app['tymon.jwt.provider.auth'],
|
||||
$app['request']
|
||||
);
|
||||
|
||||
return $auth->setIdentifier($this->config('identifier'));
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Register the bindings for the main JWTAuth class
|
||||
*/
|
||||
protected function registerJWTBlacklist()
|
||||
{
|
||||
$this->app['tymon.jwt.blacklist'] = $this->app->share(function ($app) {
|
||||
return new Blacklist($app['tymon.jwt.provider.storage']);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Register the bindings for the payload validator
|
||||
*/
|
||||
protected function registerPayloadValidator()
|
||||
{
|
||||
$this->app['tymon.jwt.validators.payload'] = $this->app->share(function () {
|
||||
return with(new PayloadValidator())->setRefreshTTL($this->config('refresh_ttl'))->setRequiredClaims($this->config('required_claims'));
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Register the bindings for the Payload Factory
|
||||
*/
|
||||
protected function registerPayloadFactory()
|
||||
{
|
||||
$this->app['tymon.jwt.payload.factory'] = $this->app->share(function ($app) {
|
||||
$factory = new PayloadFactory($app['tymon.jwt.claim.factory'], $app['request'], $app['tymon.jwt.validators.payload']);
|
||||
|
||||
return $factory->setTTL($this->config('ttl'));
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Register the Artisan command
|
||||
*/
|
||||
protected function registerJWTCommand()
|
||||
{
|
||||
$this->app['tymon.jwt.generate'] = $this->app->share(function () {
|
||||
return new JWTGenerateCommand();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper to get the config values
|
||||
*
|
||||
* @param string $key
|
||||
* @return string
|
||||
*/
|
||||
protected function config($key, $default = null)
|
||||
{
|
||||
return config("jwt.$key", $default);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get an instantiable configuration instance. Pinched from dingo/api :)
|
||||
*
|
||||
* @param mixed $instance
|
||||
* @return object
|
||||
*/
|
||||
protected function getConfigInstance($instance)
|
||||
{
|
||||
if (is_callable($instance)) {
|
||||
return call_user_func($instance, $this->app);
|
||||
} elseif (is_string($instance)) {
|
||||
return $this->app->make($instance);
|
||||
}
|
||||
|
||||
return $instance;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user