mirror of
https://github.com/webmasterskaya/joomla-oauth-server.git
synced 2024-11-23 22:34:50 +03:00
Плагин регистрирует нужный мне роутер без меню
This commit is contained in:
parent
23a1d42c8c
commit
9f8feabd3d
@ -1,13 +1,36 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
use Joomla\CMS\Extension\PluginInterface;
|
||||||
|
use Joomla\CMS\Factory;
|
||||||
|
use Joomla\CMS\Plugin\PluginHelper;
|
||||||
|
use Joomla\DI\Container;
|
||||||
use Joomla\DI\ServiceProviderInterface;
|
use Joomla\DI\ServiceProviderInterface;
|
||||||
|
use Joomla\Event\DispatcherInterface;
|
||||||
|
use Webmasterskaya\Plugin\System\OauthServer\Extension\Plugin;
|
||||||
|
|
||||||
\defined('_JEXEC') or die;
|
\defined('_JEXEC') or die;
|
||||||
|
|
||||||
return new class implements ServiceProviderInterface {
|
return new class implements ServiceProviderInterface {
|
||||||
|
|
||||||
public function register(\Joomla\DI\Container $container)
|
/**
|
||||||
|
* @param \Joomla\DI\Container $container
|
||||||
|
* @return void
|
||||||
|
* @since version
|
||||||
|
*/
|
||||||
|
public function register(Container $container)
|
||||||
{
|
{
|
||||||
// TODO: Implement register() method.
|
$container->set(
|
||||||
|
PluginInterface::class,
|
||||||
|
function (Container $container) {
|
||||||
|
$dispatcher = $container->get(DispatcherInterface::class);
|
||||||
|
$plugin = new Plugin(
|
||||||
|
$dispatcher,
|
||||||
|
(array) PluginHelper::getPlugin('system', 'oauthserver')
|
||||||
|
);
|
||||||
|
$plugin->setApplication(Factory::getApplication());
|
||||||
|
|
||||||
|
return $plugin;
|
||||||
|
}
|
||||||
|
);
|
||||||
}
|
}
|
||||||
};
|
};
|
@ -2,60 +2,60 @@
|
|||||||
|
|
||||||
namespace Webmasterskaya\Plugin\System\OauthServer\Extension;
|
namespace Webmasterskaya\Plugin\System\OauthServer\Extension;
|
||||||
|
|
||||||
use Joomla\CMS\Application\CMSApplicationInterface;
|
use Joomla\CMS\Factory;
|
||||||
use Joomla\CMS\Plugin\CMSPlugin;
|
use Joomla\CMS\Plugin\CMSPlugin;
|
||||||
|
use Joomla\CMS\Router\SiteRouter;
|
||||||
use Joomla\CMS\Uri\Uri;
|
use Joomla\CMS\Uri\Uri;
|
||||||
use Joomla\Event\SubscriberInterface;
|
use Joomla\Event\SubscriberInterface;
|
||||||
|
|
||||||
class Plugin extends CMSPlugin implements SubscriberInterface
|
class Plugin extends CMSPlugin implements SubscriberInterface
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
* Affects constructor behavior. If true, language files will be loaded automatically.
|
|
||||||
*
|
|
||||||
* @var boolean
|
|
||||||
* @since 3.1
|
|
||||||
*/
|
|
||||||
protected $autoloadLanguage = false;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The application object
|
|
||||||
*
|
|
||||||
* @var CMSApplicationInterface
|
|
||||||
*
|
|
||||||
* @since 4.2.0
|
|
||||||
*/
|
|
||||||
private $application;
|
|
||||||
|
|
||||||
public static function getSubscribedEvents(): array
|
public static function getSubscribedEvents(): array
|
||||||
{
|
{
|
||||||
return ['onAfterInitialise' => 'onAfterInitialise'];
|
return ['onAfterInitialise' => 'attachOauthRouter'];
|
||||||
}
|
}
|
||||||
|
|
||||||
public function onAfterInitialise(): void
|
public function attachOauthRouter(): void
|
||||||
{
|
{
|
||||||
if (!$this->app->isClient('site')) {
|
/** @var \Joomla\CMS\Application\SiteApplication $app */
|
||||||
|
$app = $this->getApplication();
|
||||||
|
|
||||||
|
if (!$app->isClient('site')) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$uri = Uri::getInstance();
|
/** @var \Joomla\CMS\Router\SiteRouter $siteRouter */
|
||||||
$path = $uri->getPath();
|
$siteRouter = Factory::getContainer()->get(SiteRouter::class);
|
||||||
|
$siteRouter->attachParseRule([$this, 'parseOauthRoute'], $siteRouter::PROCESS_BEFORE);
|
||||||
|
}
|
||||||
|
|
||||||
// Адрес сервера аутентификации должен быть статичным,
|
/**
|
||||||
// чтобы гарантировать 100% доступность сервера
|
* @param \Joomla\CMS\Router\SiteRouter $router
|
||||||
if (str_starts_with($path, '/login/oauth/') === false) {
|
* @param \Joomla\CMS\Uri\Uri $uri
|
||||||
|
* @return void
|
||||||
|
* @since version
|
||||||
|
*/
|
||||||
|
public function parseOauthRoute(SiteRouter &$router, Uri &$uri): void
|
||||||
|
{
|
||||||
|
$route = trim($uri->getPath(), '/');
|
||||||
|
|
||||||
|
if (empty($route)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$parts = explode('/', $path);
|
// TODO: Переделать на ComponentRouter (пример в Joomla\CMS\Router\SiteRouterЖ::parseSefRoute())
|
||||||
|
// 1. Зарегистрировать роутер компонента $router->setComponentRouter()
|
||||||
if(empty($parts[2])){
|
// 2. Вызвать $router->getComponentRouter($component)
|
||||||
// TODO: Проверить, как стандартный роутер обработает этот вопрос и как отреагируют приложения на 404 от Joomla
|
if (!str_starts_with($route, 'login/oauth')) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$option = 'com_oauthserver';
|
$segments = explode('/', $route);
|
||||||
$task = $parts[2];
|
|
||||||
|
|
||||||
// TODO: Ставим в input option, task и view и запускаем компонент com_oauthserver
|
$uri->setVar('option', 'com_oauthserver');
|
||||||
|
$uri->setVar('task', 'login.' . $segments[2]);
|
||||||
|
$uri->setVar('view', 'default');
|
||||||
|
|
||||||
|
$uri->setPath('');
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user