Current File : /home/pacjaorg/public_html/nsa/libraries/src/Helper/AuthenticationHelper.php
<?php
/**
 * Joomla! Content Management System
 *
 * @copyright  (C) 2016 Open Source Matters, Inc. <https://www.joomla.org>
 * @license    GNU General Public License version 2 or later; see LICENSE.txt
 */

namespace Joomla\CMS\Helper;

\defined('JPATH_PLATFORM') or die;

use Exception;
use Joomla\CMS\Application\CMSApplication;
use Joomla\CMS\Factory;
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Plugin\PluginHelper;

/**
 * Authentication helper class
 *
 * @since  3.6.3
 */
abstract class AuthenticationHelper
{
	/**
	 * Get the Two Factor Authentication Methods available.
	 *
	 * @return  array  Two factor authentication methods.
	 *
	 * @since   3.6.3
	 */
	public static function getTwoFactorMethods()
	{
		// Get all the Two Factor Authentication plugins.
		PluginHelper::importPlugin('twofactorauth');

		// Trigger onUserTwofactorIdentify event and return the two factor enabled plugins.
		$identities = Factory::getApplication()->triggerEvent('onUserTwofactorIdentify', array());

		// Generate array with two factor auth methods.
		$options = array(
			HTMLHelper::_('select.option', 'none', Text::_('JGLOBAL_OTPMETHOD_NONE'), 'value', 'text'),
		);

		if (!empty($identities))
		{
			foreach ($identities as $identity)
			{
				if (!\is_object($identity))
				{
					continue;
				}

				$options[] = HTMLHelper::_('select.option', $identity->method, $identity->title, 'value', 'text');
			}
		}

		return $options;
	}

	/**
	 * Get additional login buttons to add in a login module. These buttons can be used for
	 * authentication methods external to Joomla such as WebAuthn, login with social media
	 * providers, login with third party providers or even login with third party Single Sign On
	 * (SSO) services.
	 *
	 * Button definitions are returned by the onUserLoginButtons event handlers in plugins. By
	 * default, only system and user plugins are taken into account. The former because they are
	 * always loaded. The latter are explicitly loaded in this method.
	 *
	 * The onUserLoginButtons event handlers must conform to the following method definition:
	 *
	 * public function onUserLoginButtons(string $formId): array
	 *
	 * The onUserLoginButtons event handlers must return a simple array containing 0 or more button
	 * definitions.
	 *
	 * Each button definition is a hash array with the following keys:
	 *
	 * * `label`   The translation string used as the label and title of the button. Required
	 * * `id`      The HTML ID of the button. Required.
	 * * `tooltip` (optional) The translation string used as the alt tag of the button's image
	 * * `onclick` (optional) The onclick attribute, used to fire a JavaScript event. Not
	 *             recommended.
	 * * `data-*`  (optional) Data attributes to pass verbatim. Use these and JavaScript to handle
	 *             the button.
	 * * `icon`    (optional) A CSS class for an optional icon displayed before the label; has
	 *             precedence over 'image'
	 * * `image`   (optional) An image path for an optional icon displayed before the label
	 * * `class`   (optional) CSS class(es) to be added to the button
	 *
	 * You can find a real world implementation of the onUserLoginButtons plugin event in the
	 * system/webauthn plugin.
	 *
	 * You can find a real world implementation of consuming the output of this method in the
	 * modules/mod_login module.
	 *
	 * Third party developers implementing a login module or a login form in their component are
	 * strongly advised to call this method and consume its results to display additional login
	 * buttons. Not doing that means that you are not fully compatible with Joomla 4.
	 *
	 * @param   string  $formId  The HTML ID of the login form container. Use it to filter when and
	 *                           where to show your additional login button(s)
	 *
	 * @return  array  Button definitions.
	 *
	 * @since   4.0.0
	 */
	public static function getLoginButtons(string $formId): array
	{
		// Get all the User plugins.
		PluginHelper::importPlugin('user');

		// Trigger the onUserLoginButtons event and return the button definitions.
		try
		{
			/** @var CMSApplication $app */
			$app = Factory::getApplication();
		}
		catch (Exception $e)
		{
			return [];
		}

		$results        = $app->triggerEvent('onUserLoginButtons', [$formId]);
		$buttons        = [];

		foreach ($results as $result)
		{
			// Did we get garbage back from the plugin?
			if (!is_array($result) || empty($result))
			{
				continue;
			}

			// Did the developer accidentally return a single button definition instead of an array?
			if (array_key_exists('label', $result))
			{
				$result = [$result];
			}

			// Process each button, making sure it conforms to the required definition
			foreach ($result as $item)
			{
				// Force mandatory fields
				$defaultButtonDefinition = [
					'label'   => '',
					'tooltip' => '',
					'icon'    => '',
					'image'   => '',
					'class'   => '',
					'id'      => '',
					'onclick' => '',
				];

				$button = array_merge($defaultButtonDefinition, $item);

				// Unset anything that doesn't conform to a button definition
				foreach (array_keys($button) as $key)
				{
					if (substr($key, 0, 5) == 'data-')
					{
						continue;
					}

					if (!in_array($key, ['label', 'tooltip', 'icon', 'image', 'svg', 'class', 'id', 'onclick']))
					{
						unset($button[$key]);
					}
				}

				// We need a label and an ID as the bare minimum
				if (empty($button['label']) || empty($button['id']))
				{
					continue;
				}

				$buttons[] = $button;
			}
		}

		return $buttons;
	}
}
Site is undergoing maintenance

PACJA Events

Maintenance mode is on

Site will be available soon. Thank you for your patience!