diff options
author | Luka Trovic <luka@nextcloud.com> | 2025-02-06 14:36:11 +0100 |
---|---|---|
committer | backportbot[bot] <backportbot[bot]@users.noreply.github.com> | 2025-02-06 18:27:10 +0000 |
commit | 57971afad58fb6fabb8a5bfa46b5459e74032583 (patch) | |
tree | b79dd5afcc51bbbb25e070fe2467c979433e761c | |
parent | 0f96d72e1439e3d7f3b8b0b4e7c023b360a5bd63 (diff) | |
download | nextcloud-server-backport/50697/stable31.tar.gz nextcloud-server-backport/50697/stable31.zip |
feat(admin_audit): write admin audit log for AnyLoginFailedEventbackport/50697/stable31
Signed-off-by: Luka Trovic <luka@nextcloud.com>
-rw-r--r-- | apps/admin_audit/lib/AppInfo/Application.php | 2 | ||||
-rw-r--r-- | apps/admin_audit/lib/Listener/AuthEventListener.php | 18 | ||||
-rw-r--r-- | lib/public/Authentication/Events/AnyLoginFailedEvent.php | 8 |
3 files changed, 27 insertions, 1 deletions
diff --git a/apps/admin_audit/lib/AppInfo/Application.php b/apps/admin_audit/lib/AppInfo/Application.php index de45bb9bcdd..201a8fe255a 100644 --- a/apps/admin_audit/lib/AppInfo/Application.php +++ b/apps/admin_audit/lib/AppInfo/Application.php @@ -34,6 +34,7 @@ use OCP\AppFramework\App; use OCP\AppFramework\Bootstrap\IBootContext; use OCP\AppFramework\Bootstrap\IBootstrap; use OCP\AppFramework\Bootstrap\IRegistrationContext; +use OCP\Authentication\Events\AnyLoginFailedEvent; use OCP\Authentication\TwoFactorAuth\TwoFactorProviderChallengeFailed; use OCP\Authentication\TwoFactorAuth\TwoFactorProviderChallengePassed; use OCP\Console\ConsoleEvent; @@ -105,6 +106,7 @@ class Application extends App implements IBootstrap { $context->registerEventListener(UserLoggedInWithCookieEvent::class, AuthEventListener::class); $context->registerEventListener(UserLoggedInEvent::class, AuthEventListener::class); $context->registerEventListener(BeforeUserLoggedOutEvent::class, AuthEventListener::class); + $context->registerEventListener(AnyLoginFailedEvent::class, AuthEventListener::class); // File events $context->registerEventListener(BeforePreviewFetchedEvent::class, FileEventListener::class); diff --git a/apps/admin_audit/lib/Listener/AuthEventListener.php b/apps/admin_audit/lib/Listener/AuthEventListener.php index 2b31a271d23..88be8555a4d 100644 --- a/apps/admin_audit/lib/Listener/AuthEventListener.php +++ b/apps/admin_audit/lib/Listener/AuthEventListener.php @@ -10,6 +10,7 @@ declare(strict_types=1); namespace OCA\AdminAudit\Listener; use OCA\AdminAudit\Actions\Action; +use OCP\Authentication\Events\AnyLoginFailedEvent; use OCP\EventDispatcher\Event; use OCP\EventDispatcher\IEventListener; use OCP\User\Events\BeforeUserLoggedInEvent; @@ -18,7 +19,7 @@ use OCP\User\Events\UserLoggedInEvent; use OCP\User\Events\UserLoggedInWithCookieEvent; /** - * @template-implements IEventListener<BeforeUserLoggedInEvent|UserLoggedInWithCookieEvent|UserLoggedInEvent|BeforeUserLoggedOutEvent> + * @template-implements IEventListener<BeforeUserLoggedInEvent|UserLoggedInWithCookieEvent|UserLoggedInEvent|BeforeUserLoggedOutEvent|AnyLoginFailedEvent> */ class AuthEventListener extends Action implements IEventListener { public function handle(Event $event): void { @@ -28,6 +29,8 @@ class AuthEventListener extends Action implements IEventListener { $this->userLoggedIn($event); } elseif ($event instanceof BeforeUserLoggedOutEvent) { $this->beforeUserLogout($event); + } elseif ($event instanceof AnyLoginFailedEvent) { + $this->anyLoginFailed($event); } } @@ -64,4 +67,17 @@ class AuthEventListener extends Action implements IEventListener { [] ); } + + private function anyLoginFailed(AnyLoginFailedEvent $event): void { + $this->log( + 'Login failed: "%s"', + [ + 'loginName' => $event->getLoginName() + ], + [ + 'loginName', + ], + true + ); + } } diff --git a/lib/public/Authentication/Events/AnyLoginFailedEvent.php b/lib/public/Authentication/Events/AnyLoginFailedEvent.php index fce12e04b8d..e39a39372cb 100644 --- a/lib/public/Authentication/Events/AnyLoginFailedEvent.php +++ b/lib/public/Authentication/Events/AnyLoginFailedEvent.php @@ -31,12 +31,20 @@ class AnyLoginFailedEvent extends Event { /** * @since 26.0.0 + * @deprecated 31.0.0 Use getLoginName() instead */ public function geLoginName(): string { return $this->loginName; } /** + * @since 31.0.0 + */ + public function getLoginName(): string { + return $this->loginName; + } + + /** * @since 26.0.0 */ public function getPassword(): ?string { |