packages feed

minio-hs 1.3.0 → 1.3.1

raw patch · 5 files changed

+62/−30 lines, 5 filesdep +connectiondep +http-client-tlsPVP ok

version bump matches the API change (PVP)

Dependencies added: connection, http-client-tls

API changes (from Hackage documentation)

+ Network.Minio: disableTLSCertValidation :: ConnectInfo -> ConnectInfo
+ Network.Minio: isConnectInfoSecure :: ConnectInfo -> Bool

Files

CHANGELOG.md view
@@ -1,6 +1,11 @@ Changelog ========== +## Version 1.3.1++* Add TLS helpers to check if server uses TLS, and to disable+  certificate validation for easier testing (#121)+ ## Version 1.3.0  * Retry requests that timeout using full-jitter backoff (#119)
examples/BucketExists.hs view
@@ -17,11 +17,11 @@ -- limitations under the License. -- -{-# Language OverloadedStrings #-}-import Network.Minio+{-# LANGUAGE OverloadedStrings #-}+import           Network.Minio -import Control.Monad.IO.Class (liftIO)-import Prelude+import           Control.Monad.IO.Class (liftIO)+import           Prelude  -- | The following example uses minio's play server at -- https://play.min.io:9000.  The endpoint and associated@@ -39,5 +39,5 @@     liftIO $ putStrLn $ "Does " ++ show bucket ++ " exist? - " ++ show foundBucket    case res1 of-    Left e -> putStrLn $ "bucketExists failed." ++ show e+    Left e   -> putStrLn $ "bucketExists failed." ++ show e     Right () -> return ()
minio-hs.cabal view
@@ -1,5 +1,5 @@ name:                minio-hs-version:             1.3.0+version:             1.3.1 synopsis:            A MinIO Haskell Library for Amazon S3 compatible cloud                      storage. description:         The MinIO Haskell client library provides simple APIs to@@ -56,6 +56,7 @@                      , case-insensitive >= 1.2                      , conduit >= 1.3                      , conduit-extra >= 1.3+                     , connection                      , containers >= 0.5                      , cryptonite >= 0.25                      , cryptonite-conduit >= 0.2@@ -64,6 +65,7 @@                      , exceptions                      , filepath >= 1.4                      , http-client >= 0.5+                     , http-client-tls                      , http-conduit >= 2.3                      , http-types >= 0.12                      , ini@@ -142,6 +144,7 @@   build-depends:       base >= 4.7 && < 5                      , minio-hs                      , protolude >= 0.1.6+                     , QuickCheck                      , aeson                      , base64-bytestring                      , binary@@ -149,6 +152,7 @@                      , case-insensitive                      , conduit                      , conduit-extra+                     , connection                      , containers                      , cryptonite                      , cryptonite-conduit@@ -157,11 +161,11 @@                      , exceptions                      , filepath                      , http-client+                     , http-client-tls                      , http-conduit                      , http-types                      , ini                      , memory-                     , QuickCheck                      , raw-strings-qq >= 1                      , resourcet                      , retry@@ -187,6 +191,7 @@   build-depends:       base >= 4.7 && < 5                      , minio-hs                      , protolude >= 0.1.6+                     , QuickCheck                      , aeson                      , base64-bytestring                      , binary@@ -194,19 +199,20 @@                      , case-insensitive                      , conduit                      , conduit-extra+                     , connection                      , containers                      , cryptonite                      , cryptonite-conduit-                     , filepath                      , digest                      , directory                      , exceptions+                     , filepath                      , http-client+                     , http-client-tls                      , http-conduit                      , http-types                      , ini                      , memory-                     , QuickCheck                      , raw-strings-qq >= 1                      , resourcet                      , retry
src/Network/Minio.hs view
@@ -39,6 +39,8 @@   , setRegion   , setCreds   , setCredsFrom+  , isConnectInfoSecure+  , disableTLSCertValidation   , MinioConn   , mkMinioConn 
src/Network/Minio/Data.hs view
@@ -37,7 +37,9 @@ import qualified Data.Text.Encoding           as TE import           Data.Time                    (defaultTimeLocale, formatTime) import           GHC.Show                     (Show (show))+import qualified Network.Connection           as Conn import           Network.HTTP.Client          (defaultManagerSettings)+import qualified Network.HTTP.Client.TLS      as TLS import qualified Network.HTTP.Conduit         as NC import           Network.HTTP.Types           (ByteRange, Header, Method, Query,                                                hRange)@@ -94,28 +96,30 @@ -- `IsString` instance to provide a URL, for example: -- -- > let c :: ConnectInfo = "https://play.min.io:9000"-data ConnectInfo = ConnectInfo {-    connectHost               :: Text-  , connectPort               :: Int-  , connectAccessKey          :: Text-  , connectSecretKey          :: Text-  , connectIsSecure           :: Bool-  , connectRegion             :: Region-  , connectAutoDiscoverRegion :: Bool-  } deriving (Eq, Show)-+data ConnectInfo =+    ConnectInfo { connectHost                     :: Text+                , connectPort                     :: Int+                , connectAccessKey                :: Text+                , connectSecretKey                :: Text+                , connectIsSecure                 :: Bool+                , connectRegion                   :: Region+                , connectAutoDiscoverRegion       :: Bool+                , connectDisableTLSCertValidation :: Bool+                } deriving (Eq, Show)  instance IsString ConnectInfo where-    fromString str = let req = NC.parseRequest_ str-                     in ConnectInfo-      { connectHost = TE.decodeUtf8 $ NC.host req-                        , connectPort = NC.port req-                        , connectAccessKey = ""-                        , connectSecretKey = ""-                        , connectIsSecure = NC.secure req-                        , connectRegion = ""-                        , connectAutoDiscoverRegion = True-                        }+    fromString str =+        let req = NC.parseRequest_ str+        in ConnectInfo+           { connectHost = TE.decodeUtf8 $ NC.host req+           , connectPort = NC.port req+           , connectAccessKey = ""+           , connectSecretKey = ""+           , connectIsSecure = NC.secure req+           , connectRegion = ""+           , connectAutoDiscoverRegion = True+           , connectDisableTLSCertValidation = False+           }  -- | Contains access key and secret key to access object storage. data Credentials = Credentials { cAccessKey :: Text@@ -187,6 +191,18 @@                                 , connectAutoDiscoverRegion = False                                 } +-- | Check if the connection to object storage server is secure+-- (i.e. uses TLS)+isConnectInfoSecure :: ConnectInfo -> Bool+isConnectInfoSecure = connectIsSecure++-- | Disable TLS certificate validation completely! This makes TLS+-- insecure! Use only for testing with self-signed or temporary+-- certificates. Note that this option has no effect, if you provide+-- your own Manager in `mkMinioConn`.+disableTLSCertValidation :: ConnectInfo -> ConnectInfo+disableTLSCertValidation c = c { connectDisableTLSCertValidation = True }+ getHostAddr :: ConnectInfo -> ByteString getHostAddr ci = if | port == 80 || port == 443 -> toS host                     | otherwise -> toS $@@ -955,7 +971,10 @@ -- object storage is accessed. connect :: ConnectInfo -> IO MinioConn connect ci = do-  let settings | connectIsSecure ci = NC.tlsManagerSettings+  let settings | connectIsSecure ci && connectDisableTLSCertValidation ci =+                 let badTlsSettings = Conn.TLSSettingsSimple True False False+                 in TLS.mkManagerSettings badTlsSettings Nothing+               | connectIsSecure ci = NC.tlsManagerSettings                | otherwise = defaultManagerSettings   mgr <- NC.newManager settings   mkMinioConn ci mgr