summaryrefslogtreecommitdiff
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
parent8e1377b22088c1c871915722e83746829419a0e6 (diff)
Remove unused imports, extensions, & definitions
-rw-r--r--acme.hs23
-rw-r--r--src/Network/ACME.hs25
2 files changed, 9 insertions, 39 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
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
20import Control.Lens hiding ((.=))
21import Control.Monad
22import Control.Monad.RWS.Strict
23import Crypto.Number.Serialize (i2osp) 18import Crypto.Number.Serialize (i2osp)
24import Data.Aeson (ToJSON (..), Value, encode, object, 19import Data.Aeson (ToJSON (..), encode, object, (.=))
25 (.=))
26import Data.Aeson.Lens hiding (key)
27import qualified Data.Aeson.Lens as JSON
28import Data.ByteString (ByteString) 20import Data.ByteString (ByteString)
29import qualified Data.ByteString as B 21import qualified Data.ByteString as B
30import qualified Data.ByteString.Base64.URL as Base64 22import qualified Data.ByteString.Base64.URL as Base64
31import qualified Data.ByteString.Char8 as BC 23import qualified Data.ByteString.Char8 as BC
32import qualified Data.ByteString.Lazy as LB 24import qualified Data.ByteString.Lazy as LB
33import qualified Data.ByteString.Lazy.Char8 as LC 25import qualified Data.ByteString.Lazy.Char8 as LC
34import Data.Coerce
35import Data.Digest.Pure.SHA (bytestringDigest, sha256) 26import Data.Digest.Pure.SHA (bytestringDigest, sha256)
36import Data.Maybe 27import Data.Maybe
37import Data.String (fromString) 28import Data.Text.Encoding (decodeUtf8)
38import qualified Data.Text as T
39import Data.Text.Encoding (decodeUtf8, encodeUtf8)
40import Data.Time.Clock.POSIX (getPOSIXTime)
41import Network.Wreq (Response, checkStatus, defaults,
42 responseBody, responseHeader,
43 responseStatus, statusCode,
44 statusMessage)
45import qualified Network.Wreq as W
46import qualified Network.Wreq.Session as WS
47import OpenSSL 29import OpenSSL
48import OpenSSL.EVP.Digest 30import OpenSSL.EVP.Digest
49import OpenSSL.EVP.PKey 31import OpenSSL.EVP.PKey
50import OpenSSL.EVP.Sign 32import OpenSSL.EVP.Sign
51import OpenSSL.PEM 33import OpenSSL.PEM
52import OpenSSL.RSA 34import OpenSSL.RSA
53import OpenSSL.X509.Request
54 35
55data Keys = Keys RSAKeyPair RSAPubKey 36data Keys = Keys RSAKeyPair RSAPubKey
56readKeys :: String -> IO (Maybe Keys) 37readKeys :: String -> IO (Maybe Keys)
57readKeys privKeyData = do 38readKeys 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--------------------------------------------------------------------------------