diff options
| author | Roman Smrž <roman.smrz@seznam.cz> | 2026-01-11 22:03:46 +0100 |
|---|---|---|
| committer | Roman Smrž <roman.smrz@seznam.cz> | 2026-01-19 21:44:46 +0100 |
| commit | d4c94f07d62129e1ad738eca8c2e516e509062f3 (patch) | |
| tree | 829b13a821a77415411becae45b76bbc4b180f81 | |
| parent | af27ce1399b7b7836593bb236e93c99a2ec39716 (diff) | |
Pass token to the invite service
| -rw-r--r-- | src/Main.hs | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/src/Main.hs b/src/Main.hs index ed19f41..16821b8 100644 --- a/src/Main.hs +++ b/src/Main.hs @@ -22,6 +22,7 @@ import Erebos.DirectMessage import Erebos.Discovery import Erebos.Error import Erebos.Identity +import Erebos.Invite import Erebos.Network import Erebos.Object import Erebos.PubKey @@ -55,7 +56,7 @@ data GlobalState = GlobalState data CurrentConversation = NoCurrentConversation | SelectedConversation Conversation - | WaitingForPeerConversation RefDigest + | WaitingForPeerConversation RefDigest InviteToken initGlobalState :: IO GlobalState initGlobalState = do @@ -164,6 +165,7 @@ setup = do , someService @DiscoveryService Proxy , someService @DirectMessage Proxy , someService @SyncService Proxy + , someService @InviteService Proxy ] peerList <- JS.getElementById "peer_list" @@ -196,7 +198,7 @@ setup = do case res of Right _ -> return () Left err -> JS.consoleLog $ "Failed to send message: " <> showErebosError err - WaitingForPeerConversation _ -> JS.consoleLog "waiting for peer to start conversation" + WaitingForPeerConversation _ _ -> JS.consoleLog "waiting for peer to start conversation" processUrlParams gs server @@ -208,10 +210,10 @@ processUrlParams GlobalState {..} server = do '#' : str -> do let params = parseQuery $ BC.pack str if - | Just _ <- lookup "inv" params + | Just token <- parseInviteToken . decodeUtf8 =<< id =<< lookup "inv" params , Just from <- readRefDigest =<< id =<< lookup "from" params -> do - void $ swapMVar currentConversationVar $ WaitingForPeerConversation from + void $ swapMVar currentConversationVar $ WaitingForPeerConversation from token runExceptT (discoverySearch server from) >>= \case Right () -> return () Left err -> JS.consoleLog $ "Failed to search for " <> show from <> ": " <> showErebosError err @@ -348,8 +350,11 @@ watchPeers gs@GlobalState {..} server htmlList = do modifyMVar_ peerListVar update readMVar currentConversationVar >>= \case - WaitingForPeerConversation dgst + WaitingForPeerConversation dgst token | dgst `elem` identityDigests pidf -> do + Just h <- reloadHead globalHead + (either (fail . showErebosError) return =<<) $ runExceptT $ flip runReaderT h $ do + acceptInvite dgst token selectConversation gs =<< runReaderT (directMessageConversation $ finalOwner pidf) globalHead _ -> return () |