first commit
This commit is contained in:
91
plugins/system/webauthn/services/provider.php
Normal file
91
plugins/system/webauthn/services/provider.php
Normal file
@ -0,0 +1,91 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Joomla.Plugin
|
||||
* @subpackage System.Webauthn
|
||||
*
|
||||
* @copyright (C) 2022 Open Source Matters, Inc. <https://www.joomla.org>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
\defined('_JEXEC') || die;
|
||||
|
||||
use Joomla\Application\ApplicationInterface;
|
||||
use Joomla\Application\SessionAwareWebApplicationInterface;
|
||||
use Joomla\CMS\Extension\PluginInterface;
|
||||
use Joomla\CMS\Factory;
|
||||
use Joomla\CMS\Plugin\PluginHelper;
|
||||
use Joomla\Database\DatabaseInterface;
|
||||
use Joomla\DI\Container;
|
||||
use Joomla\DI\ServiceProviderInterface;
|
||||
use Joomla\Event\DispatcherInterface;
|
||||
use Joomla\Plugin\System\Webauthn\Authentication;
|
||||
use Joomla\Plugin\System\Webauthn\CredentialRepository;
|
||||
use Joomla\Plugin\System\Webauthn\Extension\Webauthn;
|
||||
use Joomla\Plugin\System\Webauthn\MetadataRepository;
|
||||
use Joomla\Registry\Registry;
|
||||
use Webauthn\MetadataService\MetadataStatementRepository;
|
||||
use Webauthn\PublicKeyCredentialSourceRepository;
|
||||
|
||||
return new class () implements ServiceProviderInterface {
|
||||
/**
|
||||
* Registers the service provider with a DI container.
|
||||
*
|
||||
* @param Container $container The DI container.
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @since 4.2.0
|
||||
*/
|
||||
public function register(Container $container)
|
||||
{
|
||||
$container->set(
|
||||
PluginInterface::class,
|
||||
function (Container $container) {
|
||||
$app = Factory::getApplication();
|
||||
$session = $container->has('session') ? $container->get('session') : $this->getSession($app);
|
||||
|
||||
$db = $container->get(DatabaseInterface::class);
|
||||
$credentialsRepository = $container->has(PublicKeyCredentialSourceRepository::class)
|
||||
? $container->get(PublicKeyCredentialSourceRepository::class)
|
||||
: new CredentialRepository($db);
|
||||
|
||||
$metadataRepository = null;
|
||||
$params = new Registry($config['params'] ?? '{}');
|
||||
|
||||
if ($params->get('attestationSupport', 0) == 1) {
|
||||
$metadataRepository = $container->has(MetadataStatementRepository::class)
|
||||
? $container->get(MetadataStatementRepository::class)
|
||||
: new MetadataRepository();
|
||||
}
|
||||
|
||||
$authenticationHelper = $container->has(Authentication::class)
|
||||
? $container->get(Authentication::class)
|
||||
: new Authentication($app, $session, $credentialsRepository, $metadataRepository);
|
||||
|
||||
$plugin = new Webauthn(
|
||||
$container->get(DispatcherInterface::class),
|
||||
(array) PluginHelper::getPlugin('system', 'webauthn'),
|
||||
$authenticationHelper
|
||||
);
|
||||
$plugin->setApplication($app);
|
||||
|
||||
return $plugin;
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the current application session object
|
||||
*
|
||||
* @param ApplicationInterface $app The application we are running in
|
||||
*
|
||||
* @return \Joomla\Session\SessionInterface|null
|
||||
*
|
||||
* @since 4.2.0
|
||||
*/
|
||||
private function getSession(ApplicationInterface $app)
|
||||
{
|
||||
return $app instanceof SessionAwareWebApplicationInterface ? $app->getSession() : null;
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user