diff --git a/integrations/nextcloud/snappymail/lib/AppInfo/Application.php b/integrations/nextcloud/snappymail/lib/AppInfo/Application.php index df40033cf..d764520ca 100644 --- a/integrations/nextcloud/snappymail/lib/AppInfo/Application.php +++ b/integrations/nextcloud/snappymail/lib/AppInfo/Application.php @@ -7,6 +7,7 @@ use OCA\SnappyMail\Controller\FetchController; use OCA\SnappyMail\Controller\PageController; use OCA\SnappyMail\Dashboard\UnreadMailWidget; use OCA\SnappyMail\Search\Provider; +use OCA\SnappyMail\Listeners\AccessTokenUpdatedListener; use OCP\AppFramework\App; use OCP\AppFramework\Bootstrap\IBootstrap; @@ -16,6 +17,7 @@ use OCP\IL10N; use OCP\IUser; use OCP\User\Events\PostLoginEvent; use OCP\User\Events\BeforeUserLoggedOutEvent; +use OCA\OIDCLogin\Events\AccessTokenUpdatedEvent; class Application extends App implements IBootstrap { @@ -62,6 +64,7 @@ class Application extends App implements IBootstrap ); $context->registerSearchProvider(Provider::class); + $context->registerEventListener(AccessTokenUpdatedEvent::class, AccessTokenUpdatedListener::class); // TODO: Not working yet, needs a Vue UI // $context->registerDashboardWidget(UnreadMailWidget::class); diff --git a/integrations/nextcloud/snappymail/lib/Listeners/AccessTokenUpdatedListener.php b/integrations/nextcloud/snappymail/lib/Listeners/AccessTokenUpdatedListener.php new file mode 100644 index 000000000..7b94359a7 --- /dev/null +++ b/integrations/nextcloud/snappymail/lib/Listeners/AccessTokenUpdatedListener.php @@ -0,0 +1,45 @@ +userSession = $userSession; + $this->session = $session; + $this->appManager = $appManager; + } + + public function handle(Event $event): void { + if (!($event instanceof AccessTokenUpdatedEvent) || !$this->userSession->isLoggedIn() || !$this->session->exists('is_oidc')) { + return; + } + // just-in-case checks(also maybe useful for selfhosters) + if (!$this->appManager->isEnabledForUser(self::SNAPPYMAIL_APP_ID) || !$this->appManager->isEnabledForUser(self::OIDC_LOGIN_APP_ID)) { + return; + } + $accessToken = $event->getAccessToken(); + if (!$accessToken) { + return; + } + + $username = $this->userSession->getUser()->getUID(); + $this->session->set('snappymail-nc-uid', $username); + } +}