access token updated listener

This commit is contained in:
Avinash Gusain 2024-05-31 11:40:31 +05:30
parent ba400a9c4f
commit 44c040707c
2 changed files with 48 additions and 0 deletions

View file

@ -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);

View file

@ -0,0 +1,45 @@
<?php
declare(strict_types=1);
namespace OCA\SnappyMail\Listeners;
use OCA\OIDCLogin\Events\AccessTokenUpdatedEvent;
use OCP\App\IAppManager;
use OCP\EventDispatcher\Event;
use OCP\EventDispatcher\IEventListener;
use OCP\ISession;
use OCP\IUserSession;
class AccessTokenUpdatedListener implements IEventListener {
private IUserSession $userSession;
private ISession $session;
private IAppManager $appManager;
private const SNAPPYMAIL_APP_ID = 'snappymail';
private const OIDC_LOGIN_APP_ID = 'oidc_login';
public function __construct(IUserSession $userSession, ISession $session, IAppManager $appManager) {
$this->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);
}
}