packages feed

ec2-signature 2.0 → 3.0

raw patch · 4 files changed

+7/−100 lines, 4 filesdep +http-querystringdep −QuickCheckdep −containersdep −hspec

Dependencies added: http-querystring

Dependencies removed: QuickCheck, containers, hspec

Files

Network/HTTP/Rest/Signature/EC2.hs view
@@ -1,19 +1,18 @@ module Network.HTTP.Rest.Signature.EC2-    ( -- * Types-      QueryString+    ( -- * Re-exports+      module Network.HTTP.QueryString+      -- * Types     , Method     , Endpoint     , Path     , SecretKey     , SignatureMethod(..)       -- * Building signature-    , toString-    , queryString-    , queryStringFromMap     , stringToSign     , stringToSign'     , signature     , signature'     ) where +import Network.HTTP.QueryString import Network.HTTP.Rest.Signature.EC2.Internal
Network/HTTP/Rest/Signature/EC2/Internal.hs view
@@ -2,60 +2,19 @@  import Data.ByteString (ByteString) import qualified Data.ByteString as BS-import Data.ByteString.Char8 () import qualified Data.ByteString.Lazy as BL import qualified Data.ByteString.Base64 as Base64 import qualified Data.Digest.Pure.SHA as SHA-import Data.List-import Data.Map (Map)-import qualified Data.Map as Map import Data.Monoid import qualified Network.HTTP.Types as HTTP --- | A query string for HTTP.------ > "param1=value1&param2=value2"-data QueryString =-    QueryString { rawData :: [(ByteString, ByteString)] }-  deriving (Eq)--instance Monoid QueryString where-    mempty = QueryString []-    mappend a b = QueryString $ rawData a `merge` rawData b--merge :: Ord a => [a] -> [a] -> [a]-merge [] bs = bs-merge as [] = as-merge (a:as) (b:bs)-    | a <= b    = a:merge as (b:bs)-    | otherwise = b:merge (a:as) bs+import Network.HTTP.QueryString  type Method = ByteString type Endpoint = ByteString type Path = ByteString type SecretKey = ByteString data SignatureMethod = HmacSHA256---- | Convert a parameter list to 'QueryString'.------ >>> toString $ queryString [("param1", "value1"), ("param2", "value2")]--- "param1=value1&param2=value2"-queryString :: [(ByteString, ByteString)] -> QueryString-queryString = QueryString . sort---- | Convert a parameter map to 'QueryString'.-queryStringFromMap :: Map ByteString ByteString -> QueryString-queryStringFromMap = queryString . Map.toList--toString :: QueryString -> ByteString-toString = BS.intercalate "&" . map concatWithEqual . rawData-  where-    concatWithEqual ("", _)    = error "name is null."-    concatWithEqual (key, val) = mconcat-        [ HTTP.urlEncode True key-        , "="-        , HTTP.urlEncode True val-        ]  -- | Make a string for making signature. --
ec2-signature.cabal view
@@ -1,5 +1,5 @@ name:                ec2-signature-version:             2.0+version:             3.0 synopsis:            The Amazon EC2 style signature calculator. description:         The Amazon EC2 style signature calculator.                      <http://docs.aws.amazon.com/general/latest/gr/signature-version-2.html>@@ -21,9 +21,9 @@   build-depends:       base == 4.*                      , bytestring                      , base64-bytestring-                     , containers                      , SHA                      , http-types+                     , http-querystring  test-suite doctest   type:              exitcode-stdio-1.0@@ -32,22 +32,6 @@   ghc-options:       -Wall   build-depends:       base == 4.*                      , doctest--test-suite spec-  type:              exitcode-stdio-1.0-  hs-source-dirs:    ., test-  main-is:           Spec.hs-  ghc-options:       -Wall-  extensions:        OverloadedStrings-  build-depends:       base == 4.*-                     , bytestring-                     , base64-bytestring-                     , containers-                     , SHA-                     , http-types-                     , hspec-                     , QuickCheck-                     , bytestring  source-repository head     type:            git
− test/Spec.hs
@@ -1,35 +0,0 @@-{-# OPTIONS_GHC -fno-warn-orphans #-}--import Control.Applicative-import Data.ByteString (ByteString)-import qualified Data.ByteString.Char8 as BC-import Data.Monoid-import Test.Hspec-import Test.Hspec.QuickCheck-import Test.QuickCheck--import Network.HTTP.Rest.Signature.EC2.Internal--instance Arbitrary ByteString where-    arbitrary = BC.pack <$> arbitrary--data KeyString = Key { unpack :: ByteString }--instance Arbitrary KeyString where-    arbitrary = Key . BC.pack <$> ((:) <$> arbitrary <*> arbitrary)--instance Arbitrary QueryString where-    arbitrary = queryString . map f <$> arbitrary-      where-        f (a, b) = (unpack a, b)--instance Show QueryString where-    show = show . rawData--main :: IO ()-main = hspec $ do-    describe "QueryString" $ do-        prop "mappend" prop_mappend--prop_mappend :: QueryString -> QueryString -> Bool-prop_mappend a b = (a <> b) == queryString (rawData a ++ rawData b)