diff --git a/src/Simplex/Messaging/Agent.hs b/src/Simplex/Messaging/Agent.hs index c19d4aeea..8a4428763 100644 --- a/src/Simplex/Messaging/Agent.hs +++ b/src/Simplex/Messaging/Agent.hs @@ -102,8 +102,10 @@ module Simplex.Messaging.Agent reconnectSMPServer, registerNtfToken, verifyNtfToken, + verifySavedNtfToken, checkNtfToken, deleteNtfToken, + deleteSavedNtfToken, getNtfToken, getNtfTokenData, toggleConnectionNtfs, @@ -628,6 +630,11 @@ verifyNtfToken :: AgentClient -> NetworkRequestMode -> DeviceToken -> C.CbNonce verifyNtfToken c = withAgentEnv c .:: verifyNtfToken' c {-# INLINE verifyNtfToken #-} +-- | Verify saved device notifications token +verifySavedNtfToken :: AgentClient -> NetworkRequestMode -> ByteString -> AE () +verifySavedNtfToken c = withAgentEnv c .: verifySavedNtfToken' c +{-# INLINE verifySavedNtfToken #-} + checkNtfToken :: AgentClient -> NetworkRequestMode -> DeviceToken -> AE NtfTknStatus checkNtfToken c = withAgentEnv c .: checkNtfToken' c {-# INLINE checkNtfToken #-} @@ -636,6 +643,10 @@ deleteNtfToken :: AgentClient -> DeviceToken -> AE () deleteNtfToken c = withAgentEnv c . deleteNtfToken' c {-# INLINE deleteNtfToken #-} +deleteSavedNtfToken :: AgentClient -> AE () +deleteSavedNtfToken c = withAgentEnv c $ deleteSavedNtfToken' c +{-# INLINE deleteSavedNtfToken #-} + getNtfToken :: AgentClient -> AE (DeviceToken, NtfTknStatus, NotificationsMode, NtfServer) getNtfToken c = withAgentEnv c $ getNtfToken' c {-# INLINE getNtfToken #-} @@ -2544,6 +2555,19 @@ verifyNtfToken' c nm deviceToken nonce code = when (ntfMode == NMInstant) $ initializeNtfSubs c _ -> throwE $ CMD PROHIBITED "verifyNtfToken: no token" +verifySavedNtfToken' :: AgentClient -> NetworkRequestMode -> ByteString -> AM () +verifySavedNtfToken' c nm code = + withStore' c getSavedNtfToken >>= \case + Just tkn@NtfToken {ntfTokenId = Just tknId, ntfMode} -> do + let code' = NtfRegCode code + toStatus <- + withToken c nm tkn (Just (NTConfirmed, NTAVerify code')) (NTActive, Just NTACheck) $ + agentNtfVerifyToken c nm tknId tkn code' + when (toStatus == NTActive) $ do + lift $ setCronInterval c nm tknId tkn + when (ntfMode == NMInstant) $ initializeNtfSubs c + _ -> throwE $ CMD PROHIBITED "verifySavedNtfToken: no token" + setCronInterval :: AgentClient -> NetworkRequestMode -> NtfTokenId -> NtfToken -> AM' () setCronInterval c nm tknId tkn = do cron <- asks $ ntfCron . config @@ -2572,6 +2596,15 @@ deleteNtfToken' c deviceToken = deleteNtfSubs c NSCSmpDelete _ -> throwE $ CMD PROHIBITED "deleteNtfToken: no token" + +deleteSavedNtfToken' :: AgentClient -> AM () +deleteSavedNtfToken' c = + withStore' c getSavedNtfToken >>= \case + Just tkn -> do + deleteToken c tkn + deleteNtfSubs c NSCSmpDelete + _ -> throwE $ CMD PROHIBITED "deleteSavedNtfToken: no token" + getNtfToken' :: AgentClient -> AM (DeviceToken, NtfTknStatus, NotificationsMode, NtfServer) getNtfToken' c = withStore' c getSavedNtfToken >>= \case