Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 33 additions & 0 deletions src/Simplex/Messaging/Agent.hs
Original file line number Diff line number Diff line change
Expand Up @@ -102,8 +102,10 @@ module Simplex.Messaging.Agent
reconnectSMPServer,
registerNtfToken,
verifyNtfToken,
verifySavedNtfToken,
checkNtfToken,
deleteNtfToken,
deleteSavedNtfToken,
getNtfToken,
getNtfTokenData,
toggleConnectionNtfs,
Expand Down Expand Up @@ -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 #-}
Expand All @@ -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 #-}
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
Loading