diff options
author | Andrew Cady <d@jerkface.net> | 2016-01-24 00:10:58 -0500 |
---|---|---|
committer | Andrew Cady <d@jerkface.net> | 2016-01-24 00:13:57 -0500 |
commit | 05817369d9388d2175e942af79888ec01aa4b74a (patch) | |
tree | ceee298e6cc5944ef7fff385f5671bbbc87ee9fd | |
parent | 8e1377b22088c1c871915722e83746829419a0e6 (diff) |
Remove unused imports, extensions, & definitions
-rw-r--r-- | acme.hs | 23 | ||||
-rw-r--r-- | src/Network/ACME.hs | 25 |
2 files changed, 9 insertions, 39 deletions
@@ -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 | ||
12 | module Main where | 11 | module Main where |
13 | 12 | ||
14 | import Control.Lens hiding ((.=), each) | 13 | import Control.Lens hiding (each, (.=)) |
15 | import Control.Monad | 14 | import Control.Monad |
16 | import Control.Monad.RWS.Strict | 15 | import Control.Monad.RWS.Strict |
17 | import Crypto.Number.Serialize (i2osp) | 16 | import Data.Aeson (Value) |
18 | import Data.Aeson (ToJSON (..), Value, encode, object, | ||
19 | (.=)) | ||
20 | import Data.Aeson.Lens hiding (key) | 17 | import Data.Aeson.Lens hiding (key) |
21 | import qualified Data.Aeson.Lens as JSON | 18 | import qualified Data.Aeson.Lens as JSON |
22 | import Data.ByteString (ByteString) | 19 | import Data.ByteString (ByteString) |
23 | import qualified Data.ByteString as B | 20 | import qualified Data.ByteString as B |
24 | import qualified Data.ByteString.Base64.URL as Base64 | ||
25 | import qualified Data.ByteString.Char8 as BC | 21 | import qualified Data.ByteString.Char8 as BC |
26 | import qualified Data.ByteString.Lazy as LB | 22 | import qualified Data.ByteString.Lazy as LB |
27 | import qualified Data.ByteString.Lazy.Char8 as LC | 23 | import qualified Data.ByteString.Lazy.Char8 as LC |
28 | import Data.Coerce | 24 | import Data.Coerce |
29 | import Data.Digest.Pure.SHA (bytestringDigest, sha256) | 25 | import Data.List |
30 | import Data.Maybe | 26 | import Data.Maybe |
31 | import Data.String (fromString) | 27 | import Data.String (fromString) |
32 | import qualified Data.Text as T | 28 | import qualified Data.Text as T |
33 | import Data.Text.Encoding (decodeUtf8, encodeUtf8) | 29 | import Data.Text.Encoding (decodeUtf8, encodeUtf8) |
34 | import Data.Time.Clock.POSIX (getPOSIXTime) | 30 | import Data.Time.Clock.POSIX (getPOSIXTime) |
31 | import Network.ACME | ||
35 | import Network.Wreq (Response, checkStatus, defaults, | 32 | import 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 | |||
40 | import qualified Network.Wreq.Session as WS | 37 | import qualified Network.Wreq.Session as WS |
41 | import OpenSSL | 38 | import OpenSSL |
42 | import OpenSSL.EVP.Digest | 39 | import OpenSSL.EVP.Digest |
43 | import OpenSSL.EVP.PKey | ||
44 | import OpenSSL.EVP.Sign | ||
45 | import OpenSSL.PEM | 40 | import OpenSSL.PEM |
46 | import OpenSSL.RSA | 41 | import OpenSSL.RSA |
47 | import OpenSSL.X509.Request | 42 | import OpenSSL.X509.Request |
48 | import Options.Applicative hiding (header) | 43 | import Options.Applicative hiding (header) |
49 | import qualified Options.Applicative as Opt | 44 | import qualified Options.Applicative as Opt |
45 | import Pipes | ||
50 | import System.Directory | 46 | import System.Directory |
51 | 47 | ||
52 | import Network.ACME | ||
53 | import Data.List | ||
54 | import Pipes | ||
55 | |||
56 | stagingDirectoryUrl, liveDirectoryUrl :: String | 48 | stagingDirectoryUrl, liveDirectoryUrl :: String |
57 | liveDirectoryUrl = "https://acme-v01.api.letsencrypt.org/directory" | 49 | liveDirectoryUrl = "https://acme-v01.api.letsencrypt.org/directory" |
58 | stagingDirectoryUrl = "https://acme-staging.api.letsencrypt.org/directory" | 50 | stagingDirectoryUrl = "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 | ||
141 | readKeyFile :: FilePath -> IO (Maybe Keys) | 130 | readKeyFile :: FilePath -> IO (Maybe Keys) |
142 | readKeyFile = readFile >=> readKeys | 131 | readKeyFile = readFile >=> readKeys |
diff --git a/src/Network/ACME.hs b/src/Network/ACME.hs index 2481163..ccd0a8c 100644 --- a/src/Network/ACME.hs +++ b/src/Network/ACME.hs | |||
@@ -1,5 +1,3 @@ | |||
1 | {-# LANGUAGE FlexibleContexts #-} | ||
2 | {-# LANGUAGE MultiParamTypeClasses #-} | ||
3 | {-# LANGUAGE OverloadedStrings #-} | 1 | {-# LANGUAGE OverloadedStrings #-} |
4 | {-# LANGUAGE RecordWildCards #-} | 2 | {-# LANGUAGE RecordWildCards #-} |
5 | {-# LANGUAGE ScopedTypeVariables #-} | 3 | {-# LANGUAGE ScopedTypeVariables #-} |
@@ -17,47 +15,30 @@ module Network.ACME ( | |||
17 | signPayload, | 15 | signPayload, |
18 | ) where | 16 | ) where |
19 | 17 | ||
20 | import Control.Lens hiding ((.=)) | ||
21 | import Control.Monad | ||
22 | import Control.Monad.RWS.Strict | ||
23 | import Crypto.Number.Serialize (i2osp) | 18 | import Crypto.Number.Serialize (i2osp) |
24 | import Data.Aeson (ToJSON (..), Value, encode, object, | 19 | import Data.Aeson (ToJSON (..), encode, object, (.=)) |
25 | (.=)) | ||
26 | import Data.Aeson.Lens hiding (key) | ||
27 | import qualified Data.Aeson.Lens as JSON | ||
28 | import Data.ByteString (ByteString) | 20 | import Data.ByteString (ByteString) |
29 | import qualified Data.ByteString as B | 21 | import qualified Data.ByteString as B |
30 | import qualified Data.ByteString.Base64.URL as Base64 | 22 | import qualified Data.ByteString.Base64.URL as Base64 |
31 | import qualified Data.ByteString.Char8 as BC | 23 | import qualified Data.ByteString.Char8 as BC |
32 | import qualified Data.ByteString.Lazy as LB | 24 | import qualified Data.ByteString.Lazy as LB |
33 | import qualified Data.ByteString.Lazy.Char8 as LC | 25 | import qualified Data.ByteString.Lazy.Char8 as LC |
34 | import Data.Coerce | ||
35 | import Data.Digest.Pure.SHA (bytestringDigest, sha256) | 26 | import Data.Digest.Pure.SHA (bytestringDigest, sha256) |
36 | import Data.Maybe | 27 | import Data.Maybe |
37 | import Data.String (fromString) | 28 | import Data.Text.Encoding (decodeUtf8) |
38 | import qualified Data.Text as T | ||
39 | import Data.Text.Encoding (decodeUtf8, encodeUtf8) | ||
40 | import Data.Time.Clock.POSIX (getPOSIXTime) | ||
41 | import Network.Wreq (Response, checkStatus, defaults, | ||
42 | responseBody, responseHeader, | ||
43 | responseStatus, statusCode, | ||
44 | statusMessage) | ||
45 | import qualified Network.Wreq as W | ||
46 | import qualified Network.Wreq.Session as WS | ||
47 | import OpenSSL | 29 | import OpenSSL |
48 | import OpenSSL.EVP.Digest | 30 | import OpenSSL.EVP.Digest |
49 | import OpenSSL.EVP.PKey | 31 | import OpenSSL.EVP.PKey |
50 | import OpenSSL.EVP.Sign | 32 | import OpenSSL.EVP.Sign |
51 | import OpenSSL.PEM | 33 | import OpenSSL.PEM |
52 | import OpenSSL.RSA | 34 | import OpenSSL.RSA |
53 | import OpenSSL.X509.Request | ||
54 | 35 | ||
55 | data Keys = Keys RSAKeyPair RSAPubKey | 36 | data Keys = Keys RSAKeyPair RSAPubKey |
56 | readKeys :: String -> IO (Maybe Keys) | 37 | readKeys :: String -> IO (Maybe Keys) |
57 | readKeys privKeyData = do | 38 | readKeys privKeyData = do |
58 | keypair :: SomeKeyPair <- readPrivateKey privKeyData PwTTY | 39 | keypair :: SomeKeyPair <- readPrivateKey privKeyData PwTTY |
59 | let (priv :: Maybe RSAKeyPair) = toKeyPair keypair | 40 | let (priv :: Maybe RSAKeyPair) = toKeyPair keypair |
60 | pub :: Maybe RSAPubKey <- maybe (return Nothing) (fmap Just . rsaCopyPublic) priv | 41 | pub <- maybe (return Nothing) (fmap Just . rsaCopyPublic) priv |
61 | return $ Keys <$> priv <*> pub | 42 | return $ Keys <$> priv <*> pub |
62 | 43 | ||
63 | -------------------------------------------------------------------------------- | 44 | -------------------------------------------------------------------------------- |