summaryrefslogtreecommitdiff
path: root/acme.hs
diff options
context:
space:
mode:
authorAndrew Cady <d@jerkface.net>2016-01-24 00:10:58 -0500
committerAndrew Cady <d@jerkface.net>2016-01-24 00:13:57 -0500
commit05817369d9388d2175e942af79888ec01aa4b74a (patch)
treeceee298e6cc5944ef7fff385f5671bbbc87ee9fd /acme.hs
parent8e1377b22088c1c871915722e83746829419a0e6 (diff)
Remove unused imports, extensions, & definitions
Diffstat (limited to 'acme.hs')
-rw-r--r--acme.hs23
1 files changed, 6 insertions, 17 deletions
diff --git a/acme.hs b/acme.hs
index 795b822..d187f86 100644
--- a/acme.hs
+++ b/acme.hs
@@ -1,5 +1,4 @@
1{-# LANGUAGE FlexibleContexts #-} 1{-# LANGUAGE FlexibleContexts #-}
2{-# LANGUAGE MultiParamTypeClasses #-}
3{-# LANGUAGE OverloadedStrings #-} 2{-# LANGUAGE OverloadedStrings #-}
4{-# LANGUAGE RecordWildCards #-} 3{-# LANGUAGE RecordWildCards #-}
5{-# LANGUAGE ScopedTypeVariables #-} 4{-# LANGUAGE ScopedTypeVariables #-}
@@ -11,27 +10,25 @@
11 10
12module Main where 11module Main where
13 12
14import Control.Lens hiding ((.=), each) 13import Control.Lens hiding (each, (.=))
15import Control.Monad 14import Control.Monad
16import Control.Monad.RWS.Strict 15import Control.Monad.RWS.Strict
17import Crypto.Number.Serialize (i2osp) 16import Data.Aeson (Value)
18import Data.Aeson (ToJSON (..), Value, encode, object,
19 (.=))
20import Data.Aeson.Lens hiding (key) 17import Data.Aeson.Lens hiding (key)
21import qualified Data.Aeson.Lens as JSON 18import qualified Data.Aeson.Lens as JSON
22import Data.ByteString (ByteString) 19import Data.ByteString (ByteString)
23import qualified Data.ByteString as B 20import qualified Data.ByteString as B
24import qualified Data.ByteString.Base64.URL as Base64
25import qualified Data.ByteString.Char8 as BC 21import qualified Data.ByteString.Char8 as BC
26import qualified Data.ByteString.Lazy as LB 22import qualified Data.ByteString.Lazy as LB
27import qualified Data.ByteString.Lazy.Char8 as LC 23import qualified Data.ByteString.Lazy.Char8 as LC
28import Data.Coerce 24import Data.Coerce
29import Data.Digest.Pure.SHA (bytestringDigest, sha256) 25import Data.List
30import Data.Maybe 26import Data.Maybe
31import Data.String (fromString) 27import Data.String (fromString)
32import qualified Data.Text as T 28import qualified Data.Text as T
33import Data.Text.Encoding (decodeUtf8, encodeUtf8) 29import Data.Text.Encoding (decodeUtf8, encodeUtf8)
34import Data.Time.Clock.POSIX (getPOSIXTime) 30import Data.Time.Clock.POSIX (getPOSIXTime)
31import Network.ACME
35import Network.Wreq (Response, checkStatus, defaults, 32import Network.Wreq (Response, checkStatus, defaults,
36 responseBody, responseHeader, 33 responseBody, responseHeader,
37 responseStatus, statusCode, 34 responseStatus, statusCode,
@@ -40,19 +37,14 @@ import qualified Network.Wreq as W
40import qualified Network.Wreq.Session as WS 37import qualified Network.Wreq.Session as WS
41import OpenSSL 38import OpenSSL
42import OpenSSL.EVP.Digest 39import OpenSSL.EVP.Digest
43import OpenSSL.EVP.PKey
44import OpenSSL.EVP.Sign
45import OpenSSL.PEM 40import OpenSSL.PEM
46import OpenSSL.RSA 41import OpenSSL.RSA
47import OpenSSL.X509.Request 42import OpenSSL.X509.Request
48import Options.Applicative hiding (header) 43import Options.Applicative hiding (header)
49import qualified Options.Applicative as Opt 44import qualified Options.Applicative as Opt
45import Pipes
50import System.Directory 46import System.Directory
51 47
52import Network.ACME
53import Data.List
54import Pipes
55
56stagingDirectoryUrl, liveDirectoryUrl :: String 48stagingDirectoryUrl, liveDirectoryUrl :: String
57liveDirectoryUrl = "https://acme-v01.api.letsencrypt.org/directory" 49liveDirectoryUrl = "https://acme-v01.api.letsencrypt.org/directory"
58stagingDirectoryUrl = "https://acme-staging.api.letsencrypt.org/directory" 50stagingDirectoryUrl = "https://acme-staging.api.letsencrypt.org/directory"
@@ -129,14 +121,11 @@ genReq domainKeyFile domains@(domain:_) = withOpenSSL $ do
129 setSubjectName req [("CN", domain)] 121 setSubjectName req [("CN", domain)]
130 setVersion req 0 122 setVersion req 0
131 setPublicKey req pub 123 setPublicKey req pub
132 void $ addExtensions req [nidSubjectAltName %%% intercalate ", " (map ("DNS:" ++) domains)] 124 void $ addExtensions req [(nidSubjectAltName, intercalate ", " (map ("DNS:" ++) domains))]
133 signX509Req req priv (Just dig) 125 signX509Req req priv (Just dig)
134 writeX509ReqDER req 126 writeX509ReqDER req
135 where 127 where
136 nidKeyUsage = 83
137 nidSubjectAltName = 85 128 nidSubjectAltName = 85
138 (%%%) = (,)
139 infixr 0 %%%
140 129
141readKeyFile :: FilePath -> IO (Maybe Keys) 130readKeyFile :: FilePath -> IO (Maybe Keys)
142readKeyFile = readFile >=> readKeys 131readKeyFile = readFile >=> readKeys