![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/mautic.corals.io/app/bundles/UserBundle/Event/ |
<?php namespace Mautic\UserBundle\Event; use Mautic\PluginBundle\Integration\AbstractIntegration; use Mautic\UserBundle\Entity\User; use Mautic\UserBundle\Security\Authentication\Token\PluginToken; use Mautic\UserBundle\Security\Provider\UserProvider; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken; use Symfony\Component\Security\Core\User\ChainUserProvider; use Symfony\Component\Security\Core\User\UserProviderInterface; use Symfony\Contracts\EventDispatcher\Event; class AuthenticationEvent extends Event { /** * @var Response */ protected $response; /** * @var bool */ protected $isAuthenticated = false; /** * @var bool */ protected $forceFailedAuthentication = false; /** * @var UserProvider */ protected UserProviderInterface $userProvider; protected bool $isFormLogin; /** * Message to display to user if there is a failed authentication. * * @var string */ protected $failedAuthMessage; /** * @param string|User|null $user * @param bool $isLoginCheck Event executed from the mautic_sso_login_check route typically used as the SSO callback * @param string $authenticatingService Service Service requesting authentication * @param array<AbstractIntegration>|null $integrations */ public function __construct( protected $user, protected TokenInterface $token, UserProviderInterface $userProvider, protected Request $request, protected $isLoginCheck = false, protected $authenticatingService = null, protected $integrations = null ) { $this->isFormLogin = $token instanceof UsernamePasswordToken; if ($userProvider instanceof ChainUserProvider) { // Chain of user providers so let's find Mautic's $providers = $userProvider->getProviders(); foreach ($providers as $provider) { if ($provider instanceof UserProvider) { $userProvider = $provider; break; } } } $this->userProvider = $userProvider; } /** * Get user returned by username search. * * @return string|User|null */ public function getUser() { return $this->user; } /** * Set the user to be used after authentication. * * @param bool|true $saveUser * @param bool|true $createIfNotExists If true, the user will be created if it does not exist */ public function setUser(User $user, $saveUser = true, $createIfNotExists = true): void { if ($saveUser) { $user = $this->userProvider->saveUser($user, $createIfNotExists); } $this->user = $user; } /** * Get the token that has credentials, etc used to login. * * @return PluginToken */ public function getToken() { return $this->token; } public function setToken($service, TokenInterface $token): void { $this->token = $token; $this->authenticatingService = $service; $this->isAuthenticated = null !== $token->getUser(); $this->stopPropagation(); } /** * Get the username used. * * @return string */ public function getUsername() { return $this->token->getUserIdentifier(); } /** * Get user provider to find and/or create new users. * * @return UserProvider */ public function getUserProvider() { return $this->userProvider; } /** * Set if this user is successfully authenticated. * * @param string $service Service that authenticated the user; if using a Integration, it should match that of AbstractIntegration::getName(); * @param bool|true $createIfNotExists */ public function setIsAuthenticated($service, User $user = null, $createIfNotExists = true): void { $this->authenticatingService = $service; $this->isAuthenticated = true; if (null !== $user) { $this->setUser($user, $createIfNotExists); } // Authenticated so stop propagation $this->stopPropagation(); } /** * Check if the user has been authenticated. * * @return bool */ public function isAuthenticated() { return $this->isAuthenticated; } /** * Prevent any other authentication method from authorizing the user. * Mainly used to prevent a form login from trying to auth with the given password for a local user (think two-factor requirements). */ public function setIsFailedAuthentication(): void { $this->forceFailedAuthentication = true; // Authenticated so stop propagation $this->stopPropagation(); } /** * Set the message to display to the user for failing auth. */ public function setFailedAuthenticationMessage($message): void { $this->failedAuthMessage = $message; } /** * Returns message to display to user for failing auth. * * @return string */ public function getFailedAuthenticationMessage() { return $this->failedAuthMessage; } /** * Returns true if a plugin has forcefully failed authentication. * * @return bool */ public function isFailed() { return $this->forceFailedAuthentication; } /** * Get the service that authenticated the user. * * @return string */ public function getAuthenticatingService() { return $this->authenticatingService; } /** * Set a response such as a redirect. */ public function setResponse(Response $response): void { $this->response = $response; // A response has been requested so stop propagation $this->stopPropagation(); } /** * Get the response if set by the listener. * * @return Response|null */ public function getResponse() { return $this->response; } /** * Get the request. * * @return Request */ public function getRequest() { return $this->request; } /** * Check if this is a form login authentication request or pre-auth. */ public function isFormLogin(): bool { return $this->isFormLogin; } /** * Check if the event is executed as the result of accessing mautic_sso_login_check. * * @return bool */ public function isLoginCheck() { return $this->isLoginCheck; } /** * @return AbstractIntegration|bool */ public function getIntegration($integrationName) { return $this->integrations[$integrationName] ?? false; } }