diff options
author | Joey Hess <joeyh@joeyh.name> | 2017-04-28 18:50:41 -0400 |
---|---|---|
committer | Joey Hess <joeyh@joeyh.name> | 2017-04-28 18:50:41 -0400 |
commit | f65034502f2b94f2474c65ee968e9eb9861c2d93 (patch) | |
tree | 87f97a9b38bf9af3ba32636d341019986a61be10 /Role/Developer.hs | |
parent | 175d89cb3d6914ddda68f3294ab172e29784d16d (diff) | |
download | debug-me-f65034502f2b94f2474c65ee968e9eb9861c2d93.tar.gz |
reorder "Using gpg to sign the debug-me session key" message before session start
Diffstat (limited to 'Role/Developer.hs')
-rw-r--r-- | Role/Developer.hs | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/Role/Developer.hs b/Role/Developer.hs index c48c131..9400ddf 100644 --- a/Role/Developer.hs +++ b/Role/Developer.hs @@ -49,10 +49,12 @@ run' runner url = do developer :: TMVar (TVar DeveloperState) -> TMChan (Message Entered) -> TMChan AnyMessage -> SessionID -> IO () developer dsv ichan ochan sid = withSessionLogger sid $ \logger -> do + sk <- genMySessionKey + spk <- myPublicKey sk (GpgSign True) (controlinput, controloutput) <- openControlWindow - (devstate, startoutput) <- processSessionStart ochan logger dsv + (devstate, startoutput) <- processSessionStart sk ochan logger dsv emitOutput startoutput - ok <- authUser ichan ochan devstate logger + ok <- authUser spk ichan ochan devstate logger if ok then inRawMode $ void $ sendTtyInput ichan devstate logger @@ -171,10 +173,9 @@ sendTtyOutput ochan devstate controlinput logger = go -- | Present our session key to the user. -- Wait for them to accept or reject it, while displaying any Seen data -- in the meantime. -authUser :: TMChan (Message Entered) -> TMChan AnyMessage -> TVar DeveloperState -> Logger -> IO Bool -authUser ichan ochan devstate logger = do +authUser :: PerhapsSigned PublicKey -> TMChan (Message Entered) -> TMChan AnyMessage -> TVar DeveloperState -> Logger -> IO Bool +authUser spk ichan ochan devstate logger = do ds <- atomically $ readTVar devstate - spk <- myPublicKey (developerSessionKey ds) (GpgSign True) let msg = ControlMessage $ mkSigned (developerSessionKey ds) (Control (SessionKey spk)) atomically $ writeTMChan ichan msg @@ -341,8 +342,8 @@ isLegalSeen act@(Activity (Seen (Val b)) (Just hp) _ _) ds ts -- | Start by reading the initial two messages from the user, -- their session key and the startup message. -processSessionStart :: TMChan AnyMessage -> Logger -> TMVar (TVar DeveloperState) -> IO (TVar DeveloperState, Output) -processSessionStart ochan logger dsv = do +processSessionStart :: MySessionKey -> TMChan AnyMessage -> Logger -> TMVar (TVar DeveloperState) -> IO (TVar DeveloperState, Output) +processSessionStart sk ochan logger dsv = do sessionmsg <- fromMaybe (error "Did not get session initialization message") <$> atomically (readTMChan ochan) logger sessionmsg @@ -356,7 +357,6 @@ processSessionStart ochan logger dsv = do then return sv else error "Badly signed session initialization message" _ -> error $ "Unexpected session initialization message: " ++ show sessionmsg - sk <- genMySessionKey ts <- getPOSIXTime st <- newTVarIO $ DeveloperState { lastSeen = hash () |