LoginFailedListener.php 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. <?php
  2. declare(strict_types=1);
  3. /**
  4. * @copyright Copyright (c) 2020, Roeland Jago Douma <roeland@famdouma.nl>
  5. *
  6. * @author Christoph Wurst <christoph@winzerhof-wurst.at>
  7. * @author Roeland Jago Douma <roeland@famdouma.nl>
  8. *
  9. * @license GNU AGPL version 3 or any later version
  10. *
  11. * This program is free software: you can redistribute it and/or modify
  12. * it under the terms of the GNU Affero General Public License as
  13. * published by the Free Software Foundation, either version 3 of the
  14. * License, or (at your option) any later version.
  15. *
  16. * This program is distributed in the hope that it will be useful,
  17. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  18. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  19. * GNU Affero General Public License for more details.
  20. *
  21. * You should have received a copy of the GNU Affero General Public License
  22. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  23. *
  24. */
  25. namespace OC\Authentication\Listeners;
  26. use OC\Authentication\Events\LoginFailed;
  27. use OCP\Authentication\Events\LoginFailedEvent;
  28. use OCP\EventDispatcher\Event;
  29. use OCP\EventDispatcher\IEventDispatcher;
  30. use OCP\EventDispatcher\IEventListener;
  31. use OCP\IUserManager;
  32. use OCP\Util;
  33. /**
  34. * @template-implements IEventListener<\OC\Authentication\Events\LoginFailed>
  35. */
  36. class LoginFailedListener implements IEventListener {
  37. /** @var IEventDispatcher */
  38. private $dispatcher;
  39. /** @var IUserManager */
  40. private $userManager;
  41. public function __construct(IEventDispatcher $dispatcher, IUserManager $userManager) {
  42. $this->dispatcher = $dispatcher;
  43. $this->userManager = $userManager;
  44. }
  45. public function handle(Event $event): void {
  46. if (!($event instanceof LoginFailed)) {
  47. return;
  48. }
  49. $uid = $event->getLoginName();
  50. Util::emitHook(
  51. '\OCA\Files_Sharing\API\Server2Server',
  52. 'preLoginNameUsedAsUserName',
  53. ['uid' => &$uid]
  54. );
  55. if ($this->userManager->userExists($uid)) {
  56. $this->dispatcher->dispatchTyped(new LoginFailedEvent($uid));
  57. }
  58. }
  59. }