summaryrefslogtreecommitdiffhomepage
path: root/PrevActivity.hs
diff options
context:
space:
mode:
Diffstat (limited to 'PrevActivity.hs')
-rw-r--r--PrevActivity.hs33
1 files changed, 23 insertions, 10 deletions
diff --git a/PrevActivity.hs b/PrevActivity.hs
index 0836c8b..74203fd 100644
--- a/PrevActivity.hs
+++ b/PrevActivity.hs
@@ -19,7 +19,10 @@ removeHashes msg = MissingHashes $ case msg of
Developer (ActivityMessage a) -> Developer (go a)
_ -> msg
where
- go a = ActivityMessage $ a { prevActivity = Nothing }
+ go a = ActivityMessage $ a
+ { prevActivity = Nothing
+ , prevEntered = Nothing
+ }
type RecentActivity = STM (SigVerifier, [Hash])
@@ -29,17 +32,27 @@ type RecentActivity = STM (SigVerifier, [Hash])
-- point the message's signature will verify.
restoreHashes :: RecentActivity -> MissingHashes AnyMessage -> STM AnyMessage
restoreHashes ra (MissingHashes msg) = case msg of
- User (ActivityMessage act) ->
- User . ActivityMessage <$> (go act =<< ra)
+ User (ActivityMessage act) ->
+ User . ActivityMessage <$> find act
Developer (ActivityMessage act) ->
- Developer . ActivityMessage <$> (go act =<< ra)
+ Developer . ActivityMessage <$> find act
User (ControlMessage {}) -> return msg
Developer (ControlMessage {}) -> return msg
where
- go act (_, []) = return act
- go act (sigverifier, (h:hs)) = do
- let act' = act { prevActivity = Just h }
- if verifySigned sigverifier act'
- then return act'
- else go act (sigverifier, hs)
+ find act = do
+ (sigverifier, l) <- ra
+ let l' = Nothing : map Just l
+ let ll = do
+ ah <- l'
+ eh <- l'
+ return $ act
+ { prevActivity = ah
+ , prevEntered = eh
+ }
+ go act sigverifier ll
+ go act _ [] = return act
+ go act sigverifier (l:ls) = do
+ if verifySigned sigverifier l
+ then return l
+ else go act sigverifier ls