* @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Plugin\System\Webauthn\Field; use Exception; use Joomla\CMS\Factory; use Joomla\CMS\Form\FormField; use Joomla\CMS\Language\Text; use Joomla\CMS\Layout\FileLayout; use Joomla\CMS\User\UserFactoryInterface; use Joomla\Plugin\System\Webauthn\Extension\Webauthn; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * Custom Joomla Form Field to display the WebAuthn interface * * @since 4.0.0 */ class WebauthnField extends FormField { /** * Element name * * @var string * * @since 4.0.0 */ protected $type = 'Webauthn'; /** * Returns the input field's HTML * * @return string * @throws Exception * * @since 4.0.0 */ public function getInput() { $userId = $this->form->getData()->get('id', null); if (\is_null($userId)) { return Text::_('PLG_SYSTEM_WEBAUTHN_ERR_NOUSER'); } Text::script('PLG_SYSTEM_WEBAUTHN_ERR_NO_BROWSER_SUPPORT', true); Text::script('PLG_SYSTEM_WEBAUTHN_MANAGE_BTN_SAVE_LABEL', true); Text::script('PLG_SYSTEM_WEBAUTHN_MANAGE_BTN_CANCEL_LABEL', true); Text::script('PLG_SYSTEM_WEBAUTHN_MSG_SAVED_LABEL', true); Text::script('PLG_SYSTEM_WEBAUTHN_ERR_LABEL_NOT_SAVED', true); Text::script('PLG_SYSTEM_WEBAUTHN_ERR_XHR_INITCREATE', true); $app = Factory::getApplication(); /** @var Webauthn $plugin */ $plugin = $app->bootPlugin('webauthn', 'system'); $app->getDocument()->getWebAssetManager() ->registerAndUseScript('plg_system_webauthn.management', 'plg_system_webauthn/management.js', [], ['defer' => true], ['core']); $layoutFile = new FileLayout('plugins.system.webauthn.manage'); return $layoutFile->render([ 'user' => Factory::getContainer() ->get(UserFactoryInterface::class) ->loadUserById($userId), 'allow_add' => $userId == $app->getIdentity()->id, 'credentials' => $plugin->getAuthenticationHelper()->getCredentialsRepository()->getAll($userId), 'knownAuthenticators' => $plugin->getAuthenticationHelper()->getKnownAuthenticators(), 'attestationSupport' => $plugin->getAuthenticationHelper()->hasAttestationSupport(), ]); } }