Skip to content

Commit

Permalink
refatoring and start rainlab support
Browse files Browse the repository at this point in the history
  • Loading branch information
LeMaX10 committed Apr 3, 2022
1 parent a59aca7 commit 2a05a29
Show file tree
Hide file tree
Showing 28 changed files with 554 additions and 119 deletions.
41 changes: 33 additions & 8 deletions Plugin.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,18 @@
use ReaZzon\JWTAuth\Classes\Events\UserModelHandler;

use System\Classes\PluginManager;
use Tymon\JWTAuth\Providers\LaravelServiceProvider;
use PHPOpenSourceSaver\JWTAuth\Providers\LaravelServiceProvider;

/**
* JWTAuth Plugin Information File
*/
class Plugin extends PluginBase
{
/**
*
*/
public const PLUGIN_NAME = 'ReaZzon.JWTAuth';

/**
* Returns information about this plugin.
*
Expand All @@ -53,11 +58,9 @@ public function register()

$this->app->singleton(
UserPluginResolverContract::class,
static fn() => UserPluginResolver::instance()
static fn() => UserPluginResolver::instance(),
);

$this->registerGates();
$this->registerJWT();
}

/**
Expand All @@ -67,6 +70,17 @@ public function register()
*/
public function boot()
{
if (!$this->getResolver()->isRequiredResolve()) {
PluginManager::instance()->disablePlugin(static::PLUGIN_NAME);
if (method_exists($this->getResolver(), 'forgetInstance')) {
$this->getResolver()::forgetInstance();
}

return;
}

$this->registerGates();
$this->registerJWT();
$this->registerConfigs();
$this->addEventListeners();
}
Expand Down Expand Up @@ -105,7 +119,7 @@ private function registerConfigs()
/**
*
*/
private function addEventListeners()
private function addEventListeners(): void
{
Event::subscribe(UserModelHandler::class);
}
Expand All @@ -120,7 +134,7 @@ private function registerGates(): void

$this->app->singleton(GateContract::class, function ($app): Gate {
return new Gate($app, function () use ($app): ?User {
return app(UserPluginResolverContract::class)->getProvider()->user();
return $this->getResolver()->getProvider()->user();
});
});
}
Expand All @@ -132,10 +146,10 @@ private function registerJWT(): void
{
(new LaravelServiceProvider($this->app))->register();

$this->app->singleton('JWTGuard', static function ($app): Guard {
$this->app->singleton('JWTGuard', function ($app): Guard {
$guard = new JWTGuard(
$app['tymon.jwt'],
new UserProvider(app(UserPluginResolverContract::class)->getModel()),
new UserProvider($this->getResolver()->getModel()),
$app['request']
);

Expand All @@ -144,6 +158,9 @@ private function registerJWT(): void
});
}

/**
* @return array[]
*/
public function registerSettings(): array
{
return [
Expand All @@ -159,4 +176,12 @@ public function registerSettings(): array
]
];
}

/**
* @return UserPluginResolverContract
*/
private function getResolver(): UserPluginResolverContract
{
return app(UserPluginResolverContract::class);
}
}
63 changes: 42 additions & 21 deletions classes/UserPluginResolver.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,11 @@

namespace ReaZzon\JWTAuth\Classes;

use Model;
use PHPOpenSourceSaver\JWTAuth\JWTGuard;
use ReaZzon\JWTAuth\Classes\Contracts\Plugin;
use ReaZzon\JWTAuth\Classes\Dto\PluginDto;
use System\Classes\PluginManager;
use Tymon\JWTAuth\Contracts\JWTSubject;
use PHPOpenSourceSaver\JWTAuth\Contracts\JWTSubject;
use October\Rain\Support\Traits\Singleton;
use October\Rain\Auth\Manager as AuthManager;
use ReaZzon\JWTAuth\Classes\Contracts\UserPluginResolver as UserPluginResolverContract;
Expand All @@ -18,7 +19,10 @@ final class UserPluginResolver implements UserPluginResolverContract
{
use Singleton;

private array $plugin;
/**
* @var PluginDto|null
*/
private ?PluginDto $plugin = null;

/**
* Boot resolver
Expand All @@ -28,54 +32,71 @@ final class UserPluginResolver implements UserPluginResolverContract
*/
public function init(): void
{
$plugins = $this->getSupportPlugins();
foreach($plugins as $plugin) {
if (PluginManager::instance()->hasPlugin($plugin['name'])) {
$this->plugin = $plugin;
break;
$this->plugin = \Arr::first($this->getSupportPlugins(), static function (PluginDto $plugin): ?PluginDto {
if (!PluginManager::instance()->hasPlugin($plugin->name)) {
return null;
}
}

if (empty($this->plugin)) {
throw new \SystemException('No required plugins found in system');
}
return $plugin;
});
}

/**
* @return string
* @inheritDoc
*/
public function getModel(): string
{
return $this->plugin['model'];
return $this->plugin->model;
}

/**
* @inheritDoc
*/
public function getResolver(): Plugin
{
return app($this->plugin['resolver']);
return app($this->plugin->resolver);
}

/**
* @param $model
* @return JWTSubject
* @inheritDoc
*/
public function resolveModel($model): JWTSubject
{
return $this->getResolver()->resolve($model);
}

/**
* @return AuthManager
* @inheritDoc
*/
public function getProvider(): AuthManager
{
return app($this->plugin['provider']);
return app($this->plugin->provider);
}

/**
* @return array
* @inheritDoc
*/
public function getSupportPlugins(): array
{
return config('reazzon.jwtauth::plugins');
return \array_map(
static fn(array $plugin) => new PluginDto($plugin),
config('reazzon.jwtauth::plugins')
);
}

/**
* @inheritDoc
*/
public function getGuard(): JWTGuard
{
return app('JWTGuard');
}

/**
* @inheritDoc
*/
public function isRequiredResolve(): bool
{
return $this->plugin !== null;
}
}
2 changes: 1 addition & 1 deletion classes/behaviors/UserSubjectBehavior.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
namespace ReaZzon\JWTAuth\Classes\Behaviors;

use October\Rain\Database\ModelBehavior;
use Tymon\JWTAuth\Contracts\JWTSubject;
use PHPOpenSourceSaver\JWTAuth\Contracts\JWTSubject;

/**
* Class UserSubjectBehavior
Expand Down
24 changes: 23 additions & 1 deletion classes/contracts/Plugin.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

namespace ReaZzon\JWTAuth\Classes\Contracts;

use Tymon\JWTAuth\Contracts\JWTSubject;
use PHPOpenSourceSaver\JWTAuth\Contracts\JWTSubject;
use Model;

/**
Expand All @@ -17,6 +17,28 @@ interface Plugin
*/
public function resolve(Model $model): JWTSubject;

/**
* @param $model
* @return string
*/
public function initActivation($model): string;

/**
* @param $code
* @return mixed
*/
public function activateByCode($code);

/**
* @return array
*/
public function registrationValidationExtend(): array;

/**
* @return array
*/
public function loginValidationExtend(): array;

public function initActivation($model): string;

public function activateByCode($code);
Expand Down
18 changes: 17 additions & 1 deletion classes/contracts/UserPluginResolver.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,9 @@
namespace ReaZzon\JWTAuth\Classes\Contracts;

use October\Rain\Auth\Manager as AuthManager;
use Tymon\JWTAuth\Contracts\JWTSubject;
use PHPOpenSourceSaver\JWTAuth\Contracts\JWTSubject;
use Model;
use PHPOpenSourceSaver\JWTAuth\JWTGuard;

/**
*
Expand All @@ -19,6 +20,11 @@ public function getModel(): string;

public function getResolver(): Plugin;

/**
* @return Plugin
*/
public function getResolver(): Plugin;

/**
* @param Model $model
* @return JWTSubject
Expand All @@ -34,4 +40,14 @@ public function getProvider(): AuthManager;
* @return array
*/
public function getSupportPlugins(): array;

/**
* @return JWTGuard
*/
public function getGuard(): JWTGuard;

/**
* @return bool
*/
public function isRequiredResolve(): bool;
}
34 changes: 34 additions & 0 deletions classes/dto/PluginDto.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
<?php
declare(strict_types=1);

namespace ReaZzon\JWTAuth\Classes\Dto;

use October\Rain\Argon\Argon;
use October\Rain\Auth\Models\User;
use Spatie\DataTransferObject\DataTransferObject;

/**
*
*/
final class PluginDto extends DataTransferObject
{
/**
* @var string
*/
public string $name;

/**
* @var string
*/
public string $model;

/**
* @var string
*/
public string $resolver;

/**
* @var string
*/
public string $provider;
}
22 changes: 2 additions & 20 deletions classes/dto/TokenDto.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,12 @@

use October\Rain\Argon\Argon;
use October\Rain\Auth\Models\User;
use Spatie\DataTransferObject\DataTransferObject;

/**
*
*/
class TokenDto
final class TokenDto extends DataTransferObject
{
/**
* @var string
Expand All @@ -25,23 +26,4 @@ class TokenDto
* @var User
*/
public User $user;

/**
* @param $data
*/
public function __construct($data)
{
foreach($data as $name => $value) {
$this->{$name} = $value;
}
}

public function toArray(): array
{
return [
'token' => $this->token,
'expires' => $this->expires,
'user' => $this->user
];
}
}
Loading

0 comments on commit 2a05a29

Please sign in to comment.