@@ -104,7 +104,7 @@ sign_v4(AccessKeyID, SecretAccessKey, Region, Service, DateTime, Method, URL, He
104104 Method :: binary (),
105105 URL :: binary (),
106106 Headers :: headers (),
107- Body :: binary (),
107+ Body :: iodata (),
108108 Options :: [Option ],
109109 Option ::
110110 {uri_encode_path , boolean ()}
@@ -119,7 +119,7 @@ sign_v4(AccessKeyID, SecretAccessKey, Region, Service, DateTime, Method, URL, He
119119 is_binary (Method ),
120120 is_binary (URL ),
121121 is_list (Headers ),
122- is_binary (Body ),
122+ ( is_binary (Body ) orelse is_list ( Body ) ),
123123 is_list (Options ) ->
124124 URIEncodePath = proplists :get_value (uri_encode_path , Options , true ),
125125
@@ -699,6 +699,32 @@ sign_v4_reference_example_4_test() ->
699699
700700 ? assertEqual (Actual , Expected ).
701701
702+ sign_v4_iolist_body_test () ->
703+ AccessKeyID = <<" AKIAIOSFODNN7EXAMPLE" >>,
704+ SecretAccessKey = <<" wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" >>,
705+ Region = <<" us-east-1" >>,
706+ Service = <<" s3" >>,
707+ DateTime = {{2013 , 5 , 24 }, {0 , 0 , 0 }},
708+ Method = <<" PUT" >>,
709+ URL = <<" https://examplebucket.s3.amazonaws.com/test%24file.text" >>,
710+ Headers = [
711+ {<<" Host" >>, <<" examplebucket.s3.amazonaws.com" >>},
712+ {<<" Date" >>, <<" Fri, 24 May 2013 00:00:00 GMT" >>},
713+ {<<" X-Amz-Storage-Class" >>, <<" REDUCED_REDUNDANCY" >>}],
714+ Body = [<<" Welcome " >>, <<" to " >>, <<" Amazon S3." >>],
715+
716+ Actual = sign_v4 (AccessKeyID , SecretAccessKey , Region , Service , DateTime , Method , URL , Headers , Body , [{uri_encode_path , false }]),
717+
718+ Expected = [
719+ {<<" Authorization" >>, <<" AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20130524/us-east-1/s3/aws4_request,SignedHeaders=date;host;x-amz-content-sha256;x-amz-date;x-amz-storage-class,Signature=98ad721746da40c64f1a55b78f14c238d841ea1380cd77a1b5971af0ece108bd" >>},
720+ {<<" X-Amz-Content-SHA256" >>, <<" 44ce7dd67c959e0d3524ffac1771dfbba87d2b6b4b4e99e42034a8b803f8b072" >>},
721+ {<<" X-Amz-Date" >>, <<" 20130524T000000Z" >>},
722+ {<<" Host" >>, <<" examplebucket.s3.amazonaws.com" >>},
723+ {<<" Date" >>, <<" Fri, 24 May 2013 00:00:00 GMT" >>},
724+ {<<" X-Amz-Storage-Class" >>, <<" REDUCED_REDUNDANCY" >>}],
725+
726+ ? assertEqual (Actual , Expected ).
727+
702728sign_v4_unsigned_payload_test () ->
703729 AccessKeyID = <<" AKIAIOSFODNN7EXAMPLE" >>,
704730 SecretAccessKey = <<" wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" >>,
0 commit comments