summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Cady <d@jerkface.net>2016-01-20 23:13:58 -0500
committerAndrew Cady <d@jerkface.net>2016-01-20 23:13:58 -0500
commite5e066657123c6090ee1e673d87c7c24c2af71b5 (patch)
tree8bd897b36193bc6ba85f56d0fb9c180a95acedad
parentd6bb99752c20ffd7ea1679c651563963a216556c (diff)
whitespace
-rw-r--r--acme.hs35
1 files changed, 20 insertions, 15 deletions
diff --git a/acme.hs b/acme.hs
index 7863aa6..6b1fb74 100644
--- a/acme.hs
+++ b/acme.hs
@@ -1,7 +1,8 @@
1{-# LANGUAGE OverloadedStrings #-} 1{-# LANGUAGE FlexibleContexts #-}
2{-# LANGUAGE RecordWildCards #-} 2{-# LANGUAGE MultiParamTypeClasses #-}
3{-# LANGUAGE ScopedTypeVariables #-} 3{-# LANGUAGE OverloadedStrings #-}
4{-# LANGUAGE FlexibleContexts #-} 4{-# LANGUAGE RecordWildCards #-}
5{-# LANGUAGE ScopedTypeVariables #-}
5 6
6-------------------------------------------------------------------------------- 7--------------------------------------------------------------------------------
7-- | Get a certificate from Let's Encrypt using the ACME protocol. 8-- | Get a certificate from Let's Encrypt using the ACME protocol.
@@ -10,10 +11,13 @@
10 11
11module Main where 12module Main where
12 13
14import Control.Concurrent (threadDelay)
13import Control.Lens hiding ((.=)) 15import Control.Lens hiding ((.=))
14import Control.Monad 16import Control.Monad
17import Control.Monad.RWS.Strict
15import Crypto.Number.Serialize (i2osp) 18import Crypto.Number.Serialize (i2osp)
16import Data.Aeson (ToJSON (..), encode, object, (.=), Value) 19import Data.Aeson (ToJSON (..), Value, encode, object,
20 (.=))
17import Data.Aeson.Lens hiding (key) 21import Data.Aeson.Lens hiding (key)
18import qualified Data.Aeson.Lens as JSON 22import qualified Data.Aeson.Lens as JSON
19import Data.ByteString (ByteString) 23import Data.ByteString (ByteString)
@@ -22,11 +26,15 @@ import qualified Data.ByteString.Base64.URL as Base64
22import qualified Data.ByteString.Char8 as BC 26import qualified Data.ByteString.Char8 as BC
23import qualified Data.ByteString.Lazy as LB 27import qualified Data.ByteString.Lazy as LB
24import qualified Data.ByteString.Lazy.Char8 as LC 28import qualified Data.ByteString.Lazy.Char8 as LC
29import Data.Coerce
25import Data.Digest.Pure.SHA (bytestringDigest, sha256) 30import Data.Digest.Pure.SHA (bytestringDigest, sha256)
26import Data.Maybe 31import Data.Maybe
27import qualified Data.Text as T 32import qualified Data.Text as T
28import Data.Text.Encoding (decodeUtf8, encodeUtf8) 33import Data.Text.Encoding (decodeUtf8, encodeUtf8)
29import Network.Wreq (Response, responseHeader, responseBody, responseStatus, statusCode, statusMessage, defaults, checkStatus) 34import Network.Wreq (Response, checkStatus, defaults,
35 responseBody, responseHeader,
36 responseStatus, statusCode,
37 statusMessage)
30import qualified Network.Wreq.Session as WS 38import qualified Network.Wreq.Session as WS
31import OpenSSL 39import OpenSSL
32import OpenSSL.EVP.Digest 40import OpenSSL.EVP.Digest
@@ -37,14 +45,11 @@ import OpenSSL.RSA
37import Options.Applicative hiding (header) 45import Options.Applicative hiding (header)
38import qualified Options.Applicative as Opt 46import qualified Options.Applicative as Opt
39import System.Directory 47import System.Directory
48import System.Exit
40import System.Process (readProcess) 49import System.Process (readProcess)
41import Control.Monad.RWS.Strict
42import Data.Coerce
43import Control.Concurrent (threadDelay)
44import System.Exit
45 50
46directoryUrl :: String 51directoryUrl :: String
47directoryUrl = "https://acme-v01.api.letsencrypt.org/directory" 52directoryUrl = "https://acme-v01.api.letsencrypt.org/directory"
48 53
49main :: IO () 54main :: IO ()
50main = execParser opts >>= go 55main = execParser opts >>= go
@@ -53,11 +58,11 @@ main = execParser opts >>= go
53 detailedDescription = "This is a work in progress." 58 detailedDescription = "This is a work in progress."
54 59
55data CmdOpts = CmdOpts { 60data CmdOpts = CmdOpts {
56 optKeyFile :: String, 61 optKeyFile :: String,
57 optDomain :: String, 62 optDomain :: String,
58 optChallengeDir :: String, 63 optChallengeDir :: String,
59 optEmail :: Maybe String, 64 optEmail :: Maybe String,
60 optTerms :: Maybe String 65 optTerms :: Maybe String
61} 66}
62 67
63defaultTerms :: String 68defaultTerms :: String