From 6fe3bd340f0fed8910758a32bbd86ccee135bf18 Mon Sep 17 00:00:00 2001 From: Andrew Cady Date: Thu, 21 Jan 2016 22:37:29 -0500 Subject: helper function to replace "flip unless" ugliness --- acme.hs | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/acme.hs b/acme.hs index 199a441..dc11452 100644 --- a/acme.hs +++ b/acme.hs @@ -131,6 +131,10 @@ readKeys privKeyFile = do data ChallengeRequest = ChallengeRequest { crUri :: String, crToken :: ByteString, crThumbToken :: ByteString } +otherwiseM :: Monad m => m Bool -> m () -> m () +a `otherwiseM` b = a >>= flip unless b +infixl 0 `otherwiseM` + go :: CmdOpts -> IO () go CmdOpts{..} = do let terms = fromMaybe defaultTerms optTerms @@ -141,21 +145,21 @@ go CmdOpts{..} = do domainDir = fromMaybe optDomain optDomainDir privKeyFile = optKeyFile - doesFileExist privKeyFile >>= flip unless (genKey privKeyFile) + doesFileExist privKeyFile `otherwiseM` genKey privKeyFile - doesDirectoryExist optDomain >>= flip unless (createDirectory domainDir) - doesFileExist domainKeyFile >>= flip unless (genKey domainKeyFile) + doesDirectoryExist optDomain `otherwiseM` createDirectory domainDir + doesFileExist domainKeyFile `otherwiseM` genKey domainKeyFile keys <- readKeys privKeyFile - doesFileExist domainCSRFile >>= flip unless (genReq domainKeyFile optDomain >>= B.writeFile domainCSRFile) + doesFileExist domainCSRFile `otherwiseM` genReq domainKeyFile optDomain >>= writeFile domainCSRFile csrData <- B.readFile domainCSRFile ensureWritable optChallengeDir "challenge directory" ensureWritable domainDir "domain directory" - canProvision optDomain optChallengeDir >>= flip unless (error "Error: cannot provision files to web server via challenge directory") + canProvision optDomain optChallengeDir `otherwiseM` error "Error: cannot provision files to web server via challenge directory" runACME directoryUrl keys $ do forM_ optEmail $ register terms >=> statusReport @@ -170,6 +174,7 @@ go CmdOpts{..} = do () :: String -> String -> String a b = a ++ "/" ++ b +infixr 5 canProvision :: String -> FilePath -> IO Bool canProvision domain challengeDir = do -- cgit v1.2.3