keep webapp snappy by generating ssh keypair in the background

This commit is contained in:
Joey Hess 2012-09-11 15:51:27 -04:00
parent 99d52f26bc
commit ade511f6e3

View file

@ -87,19 +87,24 @@ getInprogressPairR _ = noPairing
-} -}
startPairing :: PairStage -> IO () -> (AlertButton -> Alert) -> Maybe UUID -> Text -> Secret -> Widget startPairing :: PairStage -> IO () -> (AlertButton -> Alert) -> Maybe UUID -> Text -> Secret -> Widget
startPairing stage oncancel alert muuid displaysecret secret = do startPairing stage oncancel alert muuid displaysecret secret = do
keypair <- liftIO $ genSshKeyPair
dstatus <- daemonStatus <$> lift getYesod dstatus <- daemonStatus <$> lift getYesod
urlrender <- lift getUrlRender urlrender <- lift getUrlRender
reldir <- fromJust . relDir <$> lift getYesod
{- Generating a ssh key pair can take a while, so do it in the
- background. -}
void $ liftIO $ forkIO $ do
keypair <- genSshKeyPair
pairdata <- PairData pairdata <- PairData
<$> liftIO getHostname <$> getHostname
<*> liftIO getUserName <*> getUserName
<*> (fromJust . relDir <$> lift getYesod) <*> pure reldir
<*> pure (sshPubKey keypair) <*> pure (sshPubKey keypair)
<*> liftIO (maybe genUUID return muuid) <*> (maybe genUUID return muuid)
liftIO $ do
let sender = multicastPairMsg Nothing secret pairdata let sender = multicastPairMsg Nothing secret pairdata
let pip = PairingInProgress secret Nothing keypair pairdata stage let pip = PairingInProgress secret Nothing keypair pairdata stage
startSending dstatus pip stage $ sendrequests sender dstatus urlrender startSending dstatus pip stage $ sendrequests sender dstatus urlrender
lift $ redirect $ InprogressPairR $ toSecretReminder displaysecret lift $ redirect $ InprogressPairR $ toSecretReminder displaysecret
where where
{- Sends pairing messages until the thread is killed, {- Sends pairing messages until the thread is killed,