first commit

This commit is contained in:
2025-06-17 11:53:18 +02:00
commit 9f0f7ba12b
8804 changed files with 1369176 additions and 0 deletions

View File

@ -0,0 +1,94 @@
<?php
/**
* @package Joomla.Plugin
* @subpackage System.privacyconsent
*
* @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('_JEXEC') or die;
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Router\Route;
extract($displayData);
/**
* Layout variables
* -----------------
* @var string $autocomplete Autocomplete attribute for the field.
* @var boolean $autofocus Is autofocus enabled?
* @var string $class Classes for the input.
* @var boolean $disabled Is this field disabled?
* @var string $group Group the field belongs to. <fields> section in form XML.
* @var boolean $hidden Is this field hidden in the form?
* @var string $hint Placeholder for the field.
* @var string $id DOM id of the field.
* @var string $label Label of the field.
* @var string $labelclass Classes to apply to the label.
* @var boolean $multiple Does this field support multiple values?
* @var string $name Name of the input field.
* @var string $onchange Onchange attribute for the field.
* @var string $onclick Onclick attribute for the field.
* @var string $pattern Pattern (Reg Ex) of value of the form field.
* @var boolean $readonly Is this field read only?
* @var boolean $repeat Allows extensions to duplicate elements.
* @var boolean $required Is this field required?
* @var integer $size Size attribute of the input.
* @var boolean $spellcheck Spellcheck state for the form field.
* @var string $validate Validation rules to apply.
* @var string $value Value attribute of the field.
* @var array $options Options available for this field.
* @var array $privacynote The privacy note that needs to be displayed
* @var array $translateLabel Should the label be translated?
* @var array $translateHint Should the hint be translated?
* @var array $privacyArticle The Article ID holding the Privacy Article.
* @var object $article The Article object.
* @var object $privacyLink Link to the privacy article or menu item.
*/
// Get the label text from the XML element, defaulting to the element name.
$text = $label ? (string) $label : (string) $name;
$text = $translateLabel ? Text::_($text) : $text;
// Set required to true as this field is not displayed at all if not required.
$required = true;
// Build the class for the label.
$class = 'required';
$class = !empty($labelclass) ? $class . ' ' . $labelclass : $class;
if ($privacyLink) {
$attribs = [
'data-bs-toggle' => 'modal',
'data-bs-target' => '#consentModal',
'class' => 'required',
];
$link = HTMLHelper::_('link', Route::_($privacyLink . '&tmpl=component'), $text, $attribs);
echo HTMLHelper::_(
'bootstrap.renderModal',
'consentModal',
[
'url' => Route::_($privacyLink . '&tmpl=component'),
'title' => $text,
'height' => '100%',
'width' => '100%',
'bodyHeight' => 70,
'modalWidth' => 80,
'footer' => '<button type="button" class="btn btn-secondary" data-bs-dismiss="modal" aria-hidden="true">'
. Text::_('JLIB_HTML_BEHAVIOR_CLOSE') . '</button>',
]
);
} else {
$link = '<span class="' . $class . '">' . $text . '</span>';
}
// Add the label text and star.
$label = $link . '<span class="star" aria-hidden="true">&#160;*</span>';
echo $label;

View File

@ -0,0 +1,47 @@
<?php
/**
* @package Joomla.Plugin
* @subpackage System.privacyconsent
*
* @copyright (C) 2019 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('_JEXEC') or die;
extract($displayData);
/**
* Layout variables
* -----------------
* @var string $autocomplete Autocomplete attribute for the field.
* @var boolean $autofocus Is autofocus enabled?
* @var string $class Classes for the input.
* @var boolean $disabled Is this field disabled?
* @var string $group Group the field belongs to. <fields> section in form XML.
* @var boolean $hidden Is this field hidden in the form?
* @var string $hint Placeholder for the field.
* @var string $id DOM id of the field.
* @var string $label Label of the field.
* @var string $labelclass Classes to apply to the label.
* @var boolean $multiple Does this field support multiple values?
* @var string $name Name of the input field.
* @var string $onchange Onchange attribute for the field.
* @var string $onclick Onclick attribute for the field.
* @var string $pattern Pattern (Reg Ex) of value of the form field.
* @var boolean $readonly Is this field read only?
* @var boolean $repeat Allows extensions to duplicate elements.
* @var boolean $required Is this field required?
* @var integer $size Size attribute of the input.
* @var boolean $spellcheck Spellcheck state for the form field.
* @var string $validate Validation rules to apply.
* @var string $value Value attribute of the field.
* @var array $options Options available for this field.
* @var string $privacynote The privacy note that needs to be displayed
* @var array $translateLabel Should the label be translated?
* @var array $translateHint Should the hint be translated?
* @var array $privacyArticle The Article ID holding the Privacy Article
*/
echo '<div class="alert alert-info">' . $privacynote . '</div>';

View File

@ -0,0 +1,149 @@
<?php
/**
* @package Joomla.Plugin
* @subpackage System.webauthn
*
* @copyright (C) 2020 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('_JEXEC') or die;
use Joomla\CMS\Factory;
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Layout\FileLayout;
use Joomla\CMS\User\User;
use Webauthn\PublicKeyCredentialSource;
/**
* Passwordless Login management interface
*
* Generic data
*
* @var FileLayout $this The Joomla layout renderer
* @var array $displayData The data in array format. DO NOT USE.
*
* Layout specific data
*
* @var User $user The Joomla user whose passwordless login we are managing
* @var bool $allow_add Are we allowed to add passwordless login methods
* @var array $credentials The already stored credentials for the user
* @var string $error Any error messages
* @var array $knownAuthenticators Known authenticator metadata
* @var boolean $attestationSupport Is authenticator attestation supported in the plugin?
*/
// Extract the data. Do not remove until the unset() line.
try {
$app = Factory::getApplication();
$loggedInUser = $app->getIdentity();
$app->getDocument()->getWebAssetManager()
->registerAndUseStyle('plg_system_webauthn.backend', 'plg_system_webauthn/backend.css');
} catch (Exception $e) {
$loggedInUser = new User();
}
$defaultDisplayData = [
'user' => $loggedInUser,
'allow_add' => false,
'credentials' => [],
'error' => '',
'knownAuthenticators' => [],
'attestationSupport' => true,
];
extract(array_merge($defaultDisplayData, $displayData));
if ($displayData['allow_add'] === false) {
$error = Text::_('PLG_SYSTEM_WEBAUTHN_CANNOT_ADD_FOR_A_USER');
$allow_add = false;
}
// Ensure the GMP or BCmath extension is loaded in PHP - as this is required by third party library
if ($allow_add && function_exists('gmp_intval') === false && function_exists('bccomp') === false) {
$error = Text::_('PLG_SYSTEM_WEBAUTHN_REQUIRES_GMP');
$allow_add = false;
}
Text::script('JGLOBAL_CONFIRM_DELETE');
HTMLHelper::_('bootstrap.tooltip', '.plg_system_webauth-has-tooltip');
?>
<div class="plg_system_webauthn" id="plg_system_webauthn-management-interface">
<?php
if (is_string($error) && !empty($error)) : ?>
<div class="alert alert-danger">
<?php echo htmlentities($error) ?>
</div>
<?php endif; ?>
<table class="table table-striped">
<caption class="visually-hidden">
<?php echo Text::_('PLG_SYSTEM_WEBAUTHN_TABLE_CAPTION'); ?>,
</caption>
<thead class="table-dark">
<tr>
<th <?php if ($attestationSupport) :
?>colspan="2"<?php
endif; ?> scope="col">
<?php echo Text::_('PLG_SYSTEM_WEBAUTHN_MANAGE_FIELD_KEYLABEL_LABEL') ?>
</th>
<th scope="col"><?php echo Text::_('PLG_SYSTEM_WEBAUTHN_MANAGE_HEADER_ACTIONS_LABEL') ?></th>
</tr>
</thead>
<tbody>
<?php
foreach ($credentials as $method) : ?>
<tr data-credential_id="<?php echo $method['id'] ?>">
<?php
if ($attestationSupport) :
$aaguid = ($method['credential'] instanceof PublicKeyCredentialSource) ? $method['credential']->getAaguid() : '';
$authMetadata = $knownAuthenticators[$aaguid->toString()] ?? $knownAuthenticators[''];
?>
<td class="text-center">
<img class="plg_system_webauth-has-tooltip bg-secondary"
style="max-width: 6em; max-height: 3em"
src="<?php echo $authMetadata->icon ?>"
alt="<?php echo $authMetadata->description ?>"
title="<?php echo $authMetadata->description ?>">
</td>
<?php endif; ?>
<th scope="row" class="webauthnManagementCell"><?php echo htmlentities($method['label']) ?></th>
<td class="webauthnManagementCell">
<button class="plg_system_webauthn-manage-edit btn btn-secondary">
<span class="icon-edit" aria-hidden="true"></span>
<?php echo Text::_('PLG_SYSTEM_WEBAUTHN_MANAGE_BTN_EDIT_LABEL') ?>
</button>
<button class="plg_system_webauthn-manage-delete btn btn-danger">
<span class="icon-minus" aria-hidden="true"></span>
<?php echo Text::_('PLG_SYSTEM_WEBAUTHN_MANAGE_BTN_DELETE_LABEL') ?>
</button>
</td>
</tr>
<?php endforeach; ?>
<?php
if (empty($credentials)) : ?>
<tr>
<td colspan="<?php echo $attestationSupport ? '3' : '2'; ?>">
<?php echo Text::_('PLG_SYSTEM_WEBAUTHN_MANAGE_HEADER_NOMETHODS_LABEL') ?>
</td>
</tr>
<?php endif; ?>
</tbody>
</table>
<?php
if ($allow_add) : ?>
<p class="plg_system_webauthn-manage-add-container">
<button
type="button"
id="plg_system_webauthn-manage-add"
class="btn btn-success w-100">
<span class="icon-plus" aria-hidden="true"></span>
<?php echo Text::_('PLG_SYSTEM_WEBAUTHN_MANAGE_BTN_ADD_LABEL') ?>
</button>
</p>
<?php endif; ?>
</div>