* @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Plugin\System\Webauthn\PluginTraits; use Joomla\CMS\Event\Plugin\System\Webauthn\AjaxInitCreate; use Joomla\CMS\Factory; use Joomla\CMS\User\User; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * Ajax handler for akaction=initcreate * * Returns the Public Key Creation Options to start the attestation ceremony on the browser. * * @since 4.2.0 */ trait AjaxHandlerInitCreate { /** * Returns the Public Key Creation Options to start the attestation ceremony on the browser. * * @param AjaxInitCreate $event The event we are handling * * @return void * @throws \Exception * @since 4.2.0 */ public function onAjaxWebauthnInitcreate(AjaxInitCreate $event): void { // Make sure I have a valid user $user = Factory::getApplication()->getIdentity(); if (!($user instanceof User) || $user->guest) { $event->addResult(new \stdClass()); return; } // I need the server to have either GMP or BCComp support to attest new authenticators if (function_exists('gmp_intval') === false && function_exists('bccomp') === false) { $event->addResult(new \stdClass()); return; } $session = $this->getApplication()->getSession(); $session->set('plg_system_webauthn.registration_user_id', $user->id); $event->addResult($this->authenticationHelper->getPubKeyCreationOptions($user)); } }