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 +4/−5
- Network/HTTP/Rest/Signature/EC2/Internal.hs +1/−42
- ec2-signature.cabal +2/−18
- test/Spec.hs +0/−35
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¶m2=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¶m2=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)