Skip to content

Commit cccc4b9

Browse files
committed
fix: prevent guests from changing their email address
Signed-off-by: Robin Appelman <robin@icewind.nl>
1 parent f822233 commit cccc4b9

2 files changed

Lines changed: 50 additions & 0 deletions

File tree

lib/AppInfo/Application.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
use OCA\Guests\Listener\LoadAdditionalScriptsListener;
1616
use OCA\Guests\Listener\ShareAutoAcceptListener;
1717
use OCA\Guests\Listener\TalkIntegrationListener;
18+
use OCA\Guests\Listener\UserChangedListener;
1819
use OCA\Guests\Notifications\Notifier;
1920
use OCA\Guests\RestrictionManager;
2021
use OCA\Guests\UserBackend;
@@ -31,6 +32,7 @@
3132
use OCP\IUserManager;
3233
use OCP\Notification\IManager as INotificationManager;
3334
use OCP\Share\Events\ShareCreatedEvent;
35+
use OCP\User\Events\UserChangedEvent;
3436
use OCP\User\Events\UserFirstTimeLoggedInEvent;
3537

3638
class Application extends App implements IBootstrap {
@@ -47,6 +49,7 @@ public function register(IRegistrationContext $context): void {
4749
$context->registerEventListener(ShareCreatedEvent::class, ShareAutoAcceptListener::class);
4850
$context->registerEventListener(BeforeTemplateRenderedEvent::class, TalkIntegrationListener::class);
4951
$context->registerEventListener(BeforeUserManagementRenderedEvent::class, BeforeUserManagementRenderedListener::class);
52+
$context->registerEventListener(UserChangedEvent::class, UserChangedListener::class);
5053
}
5154

5255
public function boot(IBootContext $context): void {
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
/**
5+
* SPDX-FileCopyrightText: 2025 Robin Appelman <robin@icewind.nl>
6+
* SPDX-License-Identifier: AGPL-3.0-or-later
7+
*/
8+
9+
namespace OCA\Guests\Listener;
10+
11+
use OCA\Guests\GuestManager;
12+
use OCP\EventDispatcher\Event;
13+
use OCP\EventDispatcher\IEventListener;
14+
use OCP\IUserSession;
15+
use OCP\User\Events\UserChangedEvent;
16+
17+
/**
18+
* Block guests from changing their email address
19+
*/
20+
class UserChangedListener implements IEventListener {
21+
public function __construct(
22+
private readonly IUserSession $userSession,
23+
private readonly GuestManager $guestManager,
24+
) {
25+
}
26+
27+
public function handle(Event $event): void {
28+
if (!$event instanceof UserChangedEvent) {
29+
return;
30+
}
31+
if ($event->getFeature() !== 'eMailAddress') {
32+
return;
33+
}
34+
$user = $event->getUser();
35+
if ($this->userSession->getUser() !== $user) {
36+
return;
37+
}
38+
if (!$this->guestManager->isGuest($user)) {
39+
return;
40+
}
41+
if (strtolower($event->getValue()) === strtolower($user->getUID())) {
42+
return;
43+
}
44+
$user->setSystemEMailAddress(strtolower($user->getUID()));
45+
$event->stopPropagation();
46+
}
47+
}

0 commit comments

Comments
 (0)