diff options
author | Andrew Cady <d@jerkface.net> | 2016-04-08 23:28:46 -0400 |
---|---|---|
committer | Andrew Cady <d@jerkface.net> | 2016-04-08 23:28:46 -0400 |
commit | 76cd49c6568bcf909f6ec31bfb8d6ed320e546bb (patch) | |
tree | 25cca906ee0b7ae04b51506cf9225a544e6daa9b /src | |
parent | 4a56b2af54b27dc7ae366fc14207eb100d8784a5 (diff) |
Improve HttpProvisioner interface
These still need to be renamed
Diffstat (limited to 'src')
-rw-r--r-- | src/Network/ACME.hs | 16 |
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 | ||
87 | type HttpProvisioner = DomainName -> ByteString -> ByteString -> ResIO () | 87 | type HttpProvisioner = DomainName -> ByteString -> ByteString -> ResIO () |
88 | fileProvisioner :: (DomainName -> Maybe WritableDir) -> HttpProvisioner | 88 | fileProvisioner :: (DomainName -> Maybe WritableDir) -> HttpProvisioner |
89 | fileProvisioner challengeDir (challengeDir -> Just dir) tok thumbtoken = do | 89 | fileProvisioner challengeDir (challengeDir -> Just dir) tok thumbtoken = provisionViaFile dir tok thumbtoken |
90 | fileProvisioner _ dom _ _ = liftIO $ fail $ "fileProvisioner: no writable directory for domain: " ++ show dom | ||
91 | |||
92 | type HttpProvisioner' = ByteString -> ByteString -> ResIO () | ||
93 | dispatchProvisioner :: (DomainName -> Maybe HttpProvisioner') -> HttpProvisioner | ||
94 | dispatchProvisioner dispatch (dispatch -> Just provision) = provision | ||
95 | dispatchProvisioner _ dom = const . const . liftIO $ fail errmsg | ||
96 | where errmsg = "No means specified to provision files over HTTP for domain: " ++ show dom | ||
97 | |||
98 | dispatchProvisioner' :: [(DomainName, HttpProvisioner')] -> HttpProvisioner | ||
99 | dispatchProvisioner' xs = dispatchProvisioner (`lookup` xs) | ||
100 | |||
101 | provisionViaFile :: WritableDir -> HttpProvisioner' | ||
102 | provisionViaFile 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) |
95 | fileProvisioner _ dom _ _ = liftIO $ fail $ "fileProvisioner: no writable directory for domain: " ++ show dom | ||
96 | 108 | ||
97 | newtype WritableDir = WritableDir String | 109 | newtype WritableDir = WritableDir String |
98 | ensureWritableDir :: FilePath -> String -> IO WritableDir | 110 | ensureWritableDir :: FilePath -> String -> IO WritableDir |