From c79a03a3af181c77b61014f3b2be574ed0e62cfb Mon Sep 17 00:00:00 2001 From: Gregor Kleen Date: Fri, 3 Jul 2020 10:37:09 +0200 Subject: [PATCH] fix: build --- src/Lib/Prelude.hs | 3 ++- src/Network/Minio/Data.hs | 12 +++++++----- src/Network/Minio/Data/ByteString.hs | 2 +- src/Network/Minio/PresignedOperations.hs | 3 ++- src/Network/Minio/S3API.hs | 3 ++- src/Network/Minio/Sign/V4.hs | 18 ++++++++++-------- 6 files changed, 24 insertions(+), 17 deletions(-) diff --git a/src/Lib/Prelude.hs b/src/Lib/Prelude.hs index a6b6cf7..d57e70d 100644 --- a/src/Lib/Prelude.hs +++ b/src/Lib/Prelude.hs @@ -44,13 +44,14 @@ import UnliftIO as Exports throwIO, try, ) +import qualified Data.Text.Encoding as T -- | Apply a function on both elements of a pair both :: (a -> b) -> (a, a) -> (b, b) both f (a, b) = (f a, f b) showBS :: Show a => a -> ByteString -showBS a = toUtf8 (show a :: Text) +showBS a = T.encodeUtf8 (show a :: Text) toStrictBS :: LByteString -> ByteString toStrictBS = LB.toStrict diff --git a/src/Network/Minio/Data.hs b/src/Network/Minio/Data.hs index b4d12b2..9aa49b7 100644 --- a/src/Network/Minio/Data.hs +++ b/src/Network/Minio/Data.hs @@ -221,9 +221,9 @@ disableTLSCertValidation c = c {connectDisableTLSCertValidation = True} getHostAddr :: ConnectInfo -> ByteString getHostAddr ci = if - | port == 80 || port == 443 -> toUtf8 host + | port == 80 || port == 443 -> TE.encodeUtf8 host | otherwise -> - toUtf8 $ + TE.encodeUtf8 $ T.concat [host, ":", Lib.Prelude.show port] where port = connectPort ci @@ -1034,7 +1034,7 @@ defaultS3ReqInfo = getS3Path :: Maybe Bucket -> Maybe Object -> ByteString getS3Path b o = - let segments = map toUtf8 $ catMaybes $ b : bool [] [o] (isJust b) + let segments = map TE.encodeUtf8 $ catMaybes $ b : bool [] [o] (isJust b) in B.concat ["/", B.intercalate "/" segments] -- | Time to expire for a presigned URL. It interpreted as a number of @@ -1054,10 +1054,12 @@ newtype Minio a = Minio Monad, MonadIO, MonadReader MinioConn, - MonadResource, - MonadUnliftIO + MonadResource ) +instance MonadUnliftIO Minio where + askUnliftIO = (\(U.UnliftIO unliftIO) -> U.UnliftIO $ \(Minio f) -> unliftIO f) <$> Minio U.askUnliftIO + -- | MinioConn holds connection info and a connection pool to allow -- for efficient resource re-use. data MinioConn = MinioConn diff --git a/src/Network/Minio/Data/ByteString.hs b/src/Network/Minio/Data/ByteString.hs index 00ddb22..d9f7765 100644 --- a/src/Network/Minio/Data/ByteString.hs +++ b/src/Network/Minio/Data/ByteString.hs @@ -25,7 +25,7 @@ import qualified Data.ByteString as B import qualified Data.ByteString.Builder as BB import qualified Data.ByteString.Char8 as BC8 import qualified Data.ByteString.Lazy as LB -import Data.Char (isAsciiLower, isAsciiUpper) +import Data.Char (isAsciiLower, isAsciiUpper, isSpace, isDigit, toUpper) import qualified Data.Text as T import Lib.Prelude import Numeric (showHex) diff --git a/src/Network/Minio/PresignedOperations.hs b/src/Network/Minio/PresignedOperations.hs index 9c7f37f..e743e17 100644 --- a/src/Network/Minio/PresignedOperations.hs +++ b/src/Network/Minio/PresignedOperations.hs @@ -40,6 +40,7 @@ import qualified Data.Aeson as Json import Data.ByteString.Builder (byteString, toLazyByteString) import qualified Data.HashMap.Strict as H import qualified Data.Text as T +import qualified Data.Text.Encoding as TE import qualified Data.Time as Time import Lib.Prelude import qualified Network.HTTP.Conduit as NC @@ -331,7 +332,7 @@ presignedPostPolicy p = do mkPair (PPCEquals k v) = Just (k, v) mkPair _ = Nothing formFromPolicy = - H.map toUtf8 $ H.fromList $ catMaybes $ + H.map TE.encodeUtf8 $ H.fromList $ catMaybes $ mkPair <$> conditions ppWithCreds formData = formFromPolicy `H.union` signData -- compute POST upload URL diff --git a/src/Network/Minio/S3API.hs b/src/Network/Minio/S3API.hs index f016951..02abd4f 100644 --- a/src/Network/Minio/S3API.hs +++ b/src/Network/Minio/S3API.hs @@ -93,6 +93,7 @@ where import qualified Data.ByteString as BS import qualified Data.Text as T +import qualified Data.Text.Encoding as TE import Lib.Prelude import qualified Network.HTTP.Conduit as NC import qualified Network.HTTP.Types as HT @@ -370,7 +371,7 @@ putObjectPart bucket object uploadId partNumber headers payload = do srcInfoToHeaders :: SourceInfo -> [HT.Header] srcInfoToHeaders srcInfo = ( "x-amz-copy-source", - toUtf8 $ + TE.encodeUtf8 $ T.concat [ "/", srcBucket srcInfo, diff --git a/src/Network/Minio/Sign/V4.hs b/src/Network/Minio/Sign/V4.hs index 6f3e7aa..4d57a7b 100644 --- a/src/Network/Minio/Sign/V4.hs +++ b/src/Network/Minio/Sign/V4.hs @@ -36,6 +36,8 @@ import Network.Minio.Data.Crypto import Network.Minio.Data.Time import Network.Minio.Errors import Text.Printf (printf) +import qualified Data.Text.Encoding as TE +import qualified Data.Text as T -- these headers are not included in the string to sign when signing a -- request @@ -92,7 +94,7 @@ mkAuthHeader accessKey scope signedHeaderKeys sign = let authValue = B.concat [ "AWS4-HMAC-SHA256 Credential=", - toUtf8 accessKey, + TE.encodeUtf8 accessKey, "/", scope, ", SignedHeaders=", @@ -119,8 +121,8 @@ signV4 !sp !req = let region = fromMaybe "" $ spRegion sp ts = spTimeStamp sp scope = mkScope ts region - accessKey = toUtf8 $ spAccessKey sp - secretKey = toUtf8 $ spSecretKey sp + accessKey = TE.encodeUtf8 $ spAccessKey sp + secretKey = TE.encodeUtf8 $ spSecretKey sp expiry = spExpirySecs sp sha256Hdr = ( "x-amz-content-sha256", @@ -179,8 +181,8 @@ mkScope :: UTCTime -> Text -> ByteString mkScope ts region = B.intercalate "/" - [ toUtf8 $ Time.formatTime Time.defaultTimeLocale "%Y%m%d" ts, - toUtf8 region, + [ TE.encodeUtf8 . T.pack $ Time.formatTime Time.defaultTimeLocale "%Y%m%d" ts, + TE.encodeUtf8 region, "s3", "aws4_request" ] @@ -239,7 +241,7 @@ mkSigningKey :: UTCTime -> Text -> ByteString -> ByteString mkSigningKey ts region !secretKey = hmacSHA256RawBS "aws4_request" . hmacSHA256RawBS "s3" - . hmacSHA256RawBS (toUtf8 region) + . hmacSHA256RawBS (TE.encodeUtf8 region) . hmacSHA256RawBS (awsDateFormatBS ts) $ B.concat ["AWS4", secretKey] @@ -256,7 +258,7 @@ signV4PostPolicy :: signV4PostPolicy !postPolicyJSON !sp = let stringToSign = Base64.encode postPolicyJSON region = fromMaybe "" $ spRegion sp - signingKey = mkSigningKey (spTimeStamp sp) region $ toUtf8 $ spSecretKey sp + signingKey = mkSigningKey (spTimeStamp sp) region $ TE.encodeUtf8 $ spSecretKey sp signature = computeSignature stringToSign signingKey in Map.fromList [ ("x-amz-signature", signature), @@ -332,7 +334,7 @@ signV4Stream !payloadLength !sp !req = stringToSign = mkStringToSign ts scope canonicalReq -- 1.3 Compute signature -- 1.3.1 compute signing key - signingKey = mkSigningKey ts region $ toUtf8 secretKey + signingKey = mkSigningKey ts region $ TE.encodeUtf8 secretKey -- 1.3.2 Compute signature seedSignature = computeSignature stringToSign signingKey -- 1.3.3 Compute Auth Header