From 7bd66e967c802f084a7078600e8c97e4bea23b46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pavel=20Konvi=C4=8Dka?= Date: Tue, 28 Jul 2026 14:12:50 +0200 Subject: [PATCH] feat(firebase): Silent sync of firebase token with backend knownTokens --- src/Model/Services/JsComponents.php | 6 ++++++ src/UI/Presenters/BasePresenterTrait.php | 13 +++++++++++++ 2 files changed, 19 insertions(+) diff --git a/src/Model/Services/JsComponents.php b/src/Model/Services/JsComponents.php index ecae851..3d3fac0 100644 --- a/src/Model/Services/JsComponents.php +++ b/src/Model/Services/JsComponents.php @@ -11,6 +11,12 @@ public function setFirebaseLink(string $key, string $value): static return $this; } + public function setFirebaseKnownTokens(array $tokens): static + { + $this->components['notifications']['knownTokens'] = array_values($tokens); + return $this; + } + public function setFirebaseConfig(array $firebaseConfig): void { $this->components['notifications'] = [ diff --git a/src/UI/Presenters/BasePresenterTrait.php b/src/UI/Presenters/BasePresenterTrait.php index 4c34c1a..782714d 100644 --- a/src/UI/Presenters/BasePresenterTrait.php +++ b/src/UI/Presenters/BasePresenterTrait.php @@ -44,6 +44,11 @@ protected function beforeRender(): void $this->_jsComponents->setFirebaseLink('setFirebaseTokenLink', $this->getPresenter()->link('setFirebaseToken!', ['firebaseToken' => '__firebaseToken__'])); $this->_jsComponents->setFirebaseLink('removeFirebaseTokenLink', $this->getPresenter()->link('removeFirebaseToken!', ['firebaseToken' => '__firebaseToken__'])); $this->_jsComponents->setFirebaseLink('removeAllFirebaseTokensLink', $this->getPresenter()->link('removeAllFirebaseTokens!')); + $this->_jsComponents->setFirebaseLink('syncFirebaseTokenLink', $this->getPresenter()->link('syncFirebaseToken!', ['firebaseToken' => '__firebaseToken__'])); + $identity = $this->getUser()->isLoggedIn() ? $this->getUser()->getIdentity() : null; + $this->_jsComponents->setFirebaseKnownTokens( + $identity !== null && method_exists($identity, 'getFirebaseTokens') ? $identity->getFirebaseTokens() : [] + ); $this->getTemplate()->jsComponentsConfig = $this->_jsComponents->generateConfig(); // Keycloak — dynamický frame-src CSP header pro silent SSO iframe @@ -173,6 +178,14 @@ public function handleSetFirebaseToken(string $firebaseToken): void $this->flashMessageSuccess('fcadmin.firebase.notifications.flashes.success'); } + public function handleSyncFirebaseToken(string $firebaseToken): void + { + $this->getUser()->getIdentity() + ->addFirebaseToken($firebaseToken); + + $this->em->flush(); + } + public function handleRemoveFirebaseToken(string $firebaseToken): void { $this->getUser()->getIdentity()