packages feed

http-client-rustls 0.0.1.0 → 0.0.2.0

raw patch · 4 files changed

+32/−37 lines, 4 filesdep ~networkdep ~rustlsPVP ok

version bump matches the API change (PVP)

Dependency ranges changed: network, rustls

API changes (from Hackage documentation)

+ Network.HTTP.Client.Rustls: newRustlsManager :: MonadIO m => m Manager

Files

CHANGELOG.md view
@@ -1,5 +1,9 @@ # Revision history for http-client-rustls +## 0.0.2.0 -- 24.09.2024++ * Support rustls-0.2+ ## 0.0.1.0 -- 06.04.2024   * Support rustls-0.1
http-client-rustls.cabal view
@@ -1,6 +1,6 @@ cabal-version: 2.4 name: http-client-rustls-version: 0.0.1.0+version: 0.0.2.0 synopsis: http-client TLS backend using Rustls description:   Make HTTPS connections using [http-client](https://hackage.haskell.org/package/http-client)@@ -48,9 +48,9 @@     base >=4.16 && <5,     bytestring >=0.10 && <0.13,     http-client ^>=0.7.11,-    network ^>=3.1,+    network >=3.1 && <3.3,     resourcet ^>=1.2 || ^>=1.3,-    rustls ^>=0.1,+    rustls ^>=0.2,     text >=2.0 && <2.2,  test-suite tasty
src/Network/HTTP/Client/Rustls.hs view
@@ -2,42 +2,24 @@ -- [http-client](https://hackage.haskell.org/package/http-client) and -- [Rustls](https://github.com/rustls/rustls). ----- >>> import qualified Rustls -- >>> import qualified Network.HTTP.Client as HTTP--- >>> :{--- newRustlsManager :: IO HTTP.Manager--- newRustlsManager = do---   clientConfig <----     Rustls.buildClientConfig $---       Rustls.defaultClientConfigBuilder serverCertVerifier---   HTTP.newManager $ rustlsManagerSettings clientConfig---   where---     -- For now, rustls-ffi does not provide a built-in way to access---     -- the OS certificate store.---     serverCertVerifier =---       Rustls.ServerCertVerifier---         { Rustls.serverCertVerifierCertificates =---             pure $---               Rustls.PemCertificatesFromFile---                 "/etc/ssl/certs/ca-certificates.crt"---                 Rustls.PEMCertificateParsingStrict,---           Rustls.serverCertVerifierCRLs = []---         }--- >>> :}---+-- >>> import qualified Network.HTTP.Client.Rustls as HTTP -- >>> :{+-- example :: IO () -- example = do---   mgr <- newRustlsManager -- this should be shared across multiple requests+--   mgr <- HTTP.newRustlsManager -- this should be shared across multiple requests --   req <- HTTP.parseUrlThrow "https://example.org" --   res <- HTTP.httpLbs req mgr --   print $ HTTP.responseBody res -- :} module Network.HTTP.Client.Rustls-  ( rustlsManagerSettings,+  ( newRustlsManager,+    rustlsManagerSettings,   ) where  import Control.Exception qualified as E+import Control.Monad.IO.Class (MonadIO (..)) import Data.Acquire (ReleaseType (..)) import Data.Acquire.Internal (Acquire (..), Allocated (..)) import Data.ByteString.Builder.Extra qualified as B@@ -46,6 +28,13 @@ import Network.HTTP.Client.Internal qualified as HTTP import Network.Socket qualified as NS import Rustls qualified++-- | Create a new 'HTTP.Manager' using good TLS defaults and the OS certificate+-- store.+newRustlsManager :: (MonadIO m) => m HTTP.Manager+newRustlsManager = liftIO do+  clientConfig <- Rustls.buildClientConfig =<< Rustls.defaultClientConfigBuilder+  HTTP.newManager $ rustlsManagerSettings clientConfig  -- | Get TLS-enabled HTTP 'HTTP.ManagerSettings' from a Rustls -- 'Rustls.ClientConfig', consumable via 'HTTP.newManager'.
test/Main.hs view
@@ -62,19 +62,21 @@            let cp = Process.proc "minica" ["-domains", "example.org"]           _ <- Process.readCreateProcess (cp {Process.cwd = Just tmpDir}) ""+          builder <- Rustls.defaultClientConfigBuilder           mgr <-             HTTP.newManager . rustlsManagerSettings               =<< Rustls.buildClientConfig-                ( Rustls.defaultClientConfigBuilder-                    Rustls.ServerCertVerifier-                      { Rustls.serverCertVerifierCertificates =-                          pure $-                            Rustls.PemCertificatesFromFile-                              (tmpDir </> "minica.pem")-                              Rustls.PEMCertificateParsingStrict,-                        Rustls.serverCertVerifierCRLs = []-                      }-                )+                builder+                  { Rustls.clientConfigServerCertVerifier =+                      Rustls.ServerCertVerifier+                        { Rustls.serverCertVerifierCertificates =+                            pure $+                              Rustls.PemCertificatesFromFile+                                (tmpDir </> "minica.pem")+                                Rustls.PEMCertificateParsingStrict,+                          Rustls.serverCertVerifierCRLs = []+                        }+                  }           B.writeFile (tmpDir </> "file") $ B.replicate fileLength fileByte           procInfo <-             Process.createProcess $