aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLuka Trovic <luka@nextcloud.com>2025-02-06 14:36:11 +0100
committerbackportbot[bot] <backportbot[bot]@users.noreply.github.com>2025-02-06 18:27:10 +0000
commit57971afad58fb6fabb8a5bfa46b5459e74032583 (patch)
treeb79dd5afcc51bbbb25e070fe2467c979433e761c
parent0f96d72e1439e3d7f3b8b0b4e7c023b360a5bd63 (diff)
downloadnextcloud-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.php2
-rw-r--r--apps/admin_audit/lib/Listener/AuthEventListener.php18
-rw-r--r--lib/public/Authentication/Events/AnyLoginFailedEvent.php8
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 {