summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndrew Cady <d@jerkface.net>2016-04-08 23:28:46 -0400
committerAndrew Cady <d@jerkface.net>2016-04-08 23:28:46 -0400
commit76cd49c6568bcf909f6ec31bfb8d6ed320e546bb (patch)
tree25cca906ee0b7ae04b51506cf9225a544e6daa9b /src
parent4a56b2af54b27dc7ae366fc14207eb100d8784a5 (diff)
Improve HttpProvisioner interface
These still need to be renamed
Diffstat (limited to 'src')
-rw-r--r--src/Network/ACME.hs16
1 files changed, 14 insertions, 2 deletions
diff --git a/src/Network/ACME.hs b/src/Network/ACME.hs
index 2312389..c7e1535 100644
--- a/src/Network/ACME.hs
+++ b/src/Network/ACME.hs
@@ -86,13 +86,25 @@ pollResults (link:links) = do
86 86
87type HttpProvisioner = DomainName -> ByteString -> ByteString -> ResIO () 87type HttpProvisioner = DomainName -> ByteString -> ByteString -> ResIO ()
88fileProvisioner :: (DomainName -> Maybe WritableDir) -> HttpProvisioner 88fileProvisioner :: (DomainName -> Maybe WritableDir) -> HttpProvisioner
89fileProvisioner challengeDir (challengeDir -> Just dir) tok thumbtoken = do 89fileProvisioner challengeDir (challengeDir -> Just dir) tok thumbtoken = provisionViaFile dir tok thumbtoken
90fileProvisioner _ dom _ _ = liftIO $ fail $ "fileProvisioner: no writable directory for domain: " ++ show dom
91
92type HttpProvisioner' = ByteString -> ByteString -> ResIO ()
93dispatchProvisioner :: (DomainName -> Maybe HttpProvisioner') -> HttpProvisioner
94dispatchProvisioner dispatch (dispatch -> Just provision) = provision
95dispatchProvisioner _ dom = const . const . liftIO $ fail errmsg
96 where errmsg = "No means specified to provision files over HTTP for domain: " ++ show dom
97
98dispatchProvisioner' :: [(DomainName, HttpProvisioner')] -> HttpProvisioner
99dispatchProvisioner' xs = dispatchProvisioner (`lookup` xs)
100
101provisionViaFile :: WritableDir -> HttpProvisioner'
102provisionViaFile dir tok thumbtoken = do
90 void $ allocate (return f) removeFile 103 void $ allocate (return f) removeFile
91 liftIO $ BC.writeFile f thumbtoken 104 liftIO $ BC.writeFile f thumbtoken
92 105
93 where 106 where
94 f = (coerce dir </>) (T.unpack $ decodeUtf8 tok) 107 f = (coerce dir </>) (T.unpack $ decodeUtf8 tok)
95fileProvisioner _ dom _ _ = liftIO $ fail $ "fileProvisioner: no writable directory for domain: " ++ show dom
96 108
97newtype WritableDir = WritableDir String 109newtype WritableDir = WritableDir String
98ensureWritableDir :: FilePath -> String -> IO WritableDir 110ensureWritableDir :: FilePath -> String -> IO WritableDir