mirror of
https://github.com/the-djmaze/snappymail.git
synced 2024-09-20 07:35:55 +08:00
access token updated listener
This commit is contained in:
parent
ba400a9c4f
commit
44c040707c
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue