@@ -20,15 +20,17 @@ import {
20
20
import { SignatureV4 } from "./SignatureV4" ;
21
21
import { iso8601 } from "./utilDate" ;
22
22
23
- const signer = new SignatureV4 ( {
23
+ const signerInit = {
24
24
service : "foo" ,
25
25
region : "us-bar-1" ,
26
26
sha256 : Sha256 ,
27
27
credentials : {
28
28
accessKeyId : "foo" ,
29
29
secretAccessKey : "bar" ,
30
30
} ,
31
- } ) ;
31
+ } ;
32
+
33
+ const signer = new SignatureV4 ( signerInit ) ;
32
34
33
35
const minimalRequest = new HttpRequest ( {
34
36
method : "POST" ,
@@ -64,6 +66,27 @@ describe("SignatureV4", () => {
64
66
} ) ;
65
67
} ) ;
66
68
69
+ it ( "should support overriding region and service in the signer instance" , async ( ) => {
70
+ const signer = new SignatureV4 ( {
71
+ ...signerInit ,
72
+ service : "qux" ,
73
+ region : "us-foo-1" ,
74
+ } ) ;
75
+ const { query } = await signer . presign ( minimalRequest , {
76
+ ...presigningOptions ,
77
+ signingService : signerInit . service ,
78
+ signingRegion : signerInit . region ,
79
+ } ) ;
80
+ expect ( query ) . toEqual ( {
81
+ [ ALGORITHM_QUERY_PARAM ] : ALGORITHM_IDENTIFIER ,
82
+ [ CREDENTIAL_QUERY_PARAM ] : "foo/20000101/us-bar-1/foo/aws4_request" ,
83
+ [ AMZ_DATE_QUERY_PARAM ] : "20000101T000000Z" ,
84
+ [ EXPIRES_QUERY_PARAM ] : presigningOptions . expiresIn . toString ( ) ,
85
+ [ SIGNED_HEADERS_QUERY_PARAM ] : HOST_HEADER ,
86
+ [ SIGNATURE_QUERY_PARAM ] : "46f0091f3e84cbd4552a184f43830a4f8b42fd18ceaefcdc2c225be1efd9e00e" ,
87
+ } ) ;
88
+ } ) ;
89
+
67
90
it ( "should default expires to 3600 seconds if not explicitly passed" , async ( ) => {
68
91
const { query } = await signer . presign ( minimalRequest ) ;
69
92
expect ( query ) . toMatchObject ( {
@@ -313,6 +336,22 @@ describe("SignatureV4", () => {
313
336
) ;
314
337
} ) ;
315
338
339
+ it ( "should support overriding region and service in the signer instance" , async ( ) => {
340
+ const signer = new SignatureV4 ( {
341
+ ...signerInit ,
342
+ service : "qux" ,
343
+ region : "us-foo-1" ,
344
+ } ) ;
345
+ const { headers } = await signer . sign ( minimalRequest , {
346
+ signingDate : new Date ( "2000-01-01T00:00:00.000Z" ) ,
347
+ signingService : signerInit . service ,
348
+ signingRegion : signerInit . region ,
349
+ } ) ;
350
+ expect ( headers [ AUTH_HEADER ] ) . toBe (
351
+ "AWS4-HMAC-SHA256 Credential=foo/20000101/us-bar-1/foo/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=1e3b24fcfd7655c0c245d99ba7b6b5ca6174eab903ebfbda09ce457af062ad30"
352
+ ) ;
353
+ } ) ;
354
+
316
355
it ( "should sign requests without host header" , async ( ) => {
317
356
const request = minimalRequest . clone ( ) ;
318
357
delete request . headers [ HOST_HEADER ] ;
@@ -556,37 +595,78 @@ describe("SignatureV4", () => {
556
595
} ) ;
557
596
558
597
describe ( "#sign (string)" , ( ) => {
598
+ const signerInit = {
599
+ service : "s3" ,
600
+ region : "us-east-1" ,
601
+ credentials : {
602
+ accessKeyId : "AKIAIOSFODNN7EXAMPLE" ,
603
+ secretAccessKey : "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" ,
604
+ } ,
605
+ sha256 : Sha256 ,
606
+ } ;
607
+
559
608
it ( "should produce signatures matching known outputs" , async ( ) => {
560
609
// Example copied from https://github.com/aws/aws-sdk-php/blob/3.42.0/tests/S3/PostObjectV4Test.php#L37
561
- const signer = new SignatureV4 ( {
562
- service : "s3" ,
563
- region : "us-east-1" ,
564
- credentials : {
565
- accessKeyId : "AKIAIOSFODNN7EXAMPLE" ,
566
- secretAccessKey : "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" ,
567
- } ,
568
- sha256 : Sha256 ,
569
- } ) ;
610
+ const signer = new SignatureV4 ( signerInit ) ;
570
611
const signingDate = new Date ( "2015-12-29T00:00:00Z" ) ;
571
612
const stringToSign =
572
613
"eyJleHBpcmF0aW9uIjoiMjAxNS0xMi0yOVQwMTowMDowMFoiLCJjb25kaXRpb25zIjpbeyJidWNrZXQiOiJzaWd2NGV4YW1wbGVidWNrZXQifSxbInN0YXJ0cy13aXRoIiwiJGtleSIsInVzZXJcL3VzZXIxXC8iXSx7ImFjbCI6InB1YmxpYy1yZWFkIn0seyJzdWNjZXNzX2FjdGlvbl9yZWRpcmVjdCI6Imh0dHA6XC9cL3NpZ3Y0ZXhhbXBsZWJ1Y2tldC5zMy5hbWF6b25hd3MuY29tXC9zdWNjZXNzZnVsX3VwbG9hZC5odG1sIn0sWyJzdGFydHMtd2l0aCIsIiRDb250ZW50LVR5cGUiLCJpbWFnZVwvIl0seyJ4LWFtei1tZXRhLXV1aWQiOiIxNDM2NTEyMzY1MTI3NCJ9LHsieC1hbXotc2VydmVyLXNpZGUtZW5jcnlwdGlvbiI6IkFFUzI1NiJ9LFsic3RhcnRzLXdpdGgiLCIkeC1hbXotbWV0YS10YWciLCIiXSx7IlgtQW16LURhdGUiOiIyMDE1MTIyOVQwMDAwWiJ9LHsiWC1BbXotQ3JlZGVudGlhbCI6IkFLSUFJT1NGT0ROTjdFWEFNUExFXC8yMDE1MTIyOVwvdXMtZWFzdC0xXC9zM1wvYXdzNF9yZXF1ZXN0In0seyJYLUFtei1BbGdvcml0aG0iOiJBV1M0LUhNQUMtU0hBMjU2In1dfQ==" ;
573
614
expect ( await signer . sign ( stringToSign , { signingDate } ) ) . toBe (
574
615
"683963a1575bb197c642490ac60f3f08cda08233cd3a163ad31b554e9327a3ff"
575
616
) ;
576
617
} ) ;
618
+
619
+ it ( "should support overriding region and service in the signer instance" , async ( ) => {
620
+ const signer = new SignatureV4 ( {
621
+ ...signerInit ,
622
+ service : "qux" ,
623
+ region : "us-foo-1" ,
624
+ } ) ;
625
+ const signingDate = new Date ( "2015-12-29T00:00:00Z" ) ;
626
+ const stringToSign =
627
+ "eyJleHBpcmF0aW9uIjoiMjAxNS0xMi0yOVQwMTowMDowMFoiLCJjb25kaXRpb25zIjpbeyJidWNrZXQiOiJzaWd2NGV4YW1wbGVidWNrZXQifSxbInN0YXJ0cy13aXRoIiwiJGtleSIsInVzZXJcL3VzZXIxXC8iXSx7ImFjbCI6InB1YmxpYy1yZWFkIn0seyJzdWNjZXNzX2FjdGlvbl9yZWRpcmVjdCI6Imh0dHA6XC9cL3NpZ3Y0ZXhhbXBsZWJ1Y2tldC5zMy5hbWF6b25hd3MuY29tXC9zdWNjZXNzZnVsX3VwbG9hZC5odG1sIn0sWyJzdGFydHMtd2l0aCIsIiRDb250ZW50LVR5cGUiLCJpbWFnZVwvIl0seyJ4LWFtei1tZXRhLXV1aWQiOiIxNDM2NTEyMzY1MTI3NCJ9LHsieC1hbXotc2VydmVyLXNpZGUtZW5jcnlwdGlvbiI6IkFFUzI1NiJ9LFsic3RhcnRzLXdpdGgiLCIkeC1hbXotbWV0YS10YWciLCIiXSx7IlgtQW16LURhdGUiOiIyMDE1MTIyOVQwMDAwWiJ9LHsiWC1BbXotQ3JlZGVudGlhbCI6IkFLSUFJT1NGT0ROTjdFWEFNUExFXC8yMDE1MTIyOVwvdXMtZWFzdC0xXC9zM1wvYXdzNF9yZXF1ZXN0In0seyJYLUFtei1BbGdvcml0aG0iOiJBV1M0LUhNQUMtU0hBMjU2In1dfQ==" ;
628
+ expect (
629
+ await signer . sign ( stringToSign , {
630
+ signingDate,
631
+ signingRegion : signerInit . region ,
632
+ signingService : signerInit . service ,
633
+ } )
634
+ ) . toBe ( "683963a1575bb197c642490ac60f3f08cda08233cd3a163ad31b554e9327a3ff" ) ;
635
+ } ) ;
577
636
} ) ;
578
637
579
638
describe ( "#sign (event)" , ( ) => {
580
639
//adopt to Ruby SDK: https://github.com/aws/aws-sdk-ruby/blob/3c47c05aa77bdbb7b803a3ff932b3a89c32276ac/gems/aws-sigv4/spec/signer_spec.rb#L274
640
+ const signerInit = {
641
+ service : "SERVICE" ,
642
+ region : "REGION" ,
643
+ credentials : {
644
+ accessKeyId : "akid" ,
645
+ secretAccessKey : "secret" ,
646
+ } ,
647
+ sha256 : Sha256 ,
648
+ } ;
649
+
581
650
it ( "support event signing" , async ( ) => {
582
- const signer = new SignatureV4 ( {
583
- service : "SERVICE" ,
584
- region : "REGION" ,
585
- credentials : {
586
- accessKeyId : "akid" ,
587
- secretAccessKey : "secret" ,
651
+ const signer = new SignatureV4 ( signerInit ) ;
652
+ const eventSignature = await signer . sign (
653
+ {
654
+ headers : Uint8Array . from ( [ 5 , 58 , 100 , 97 , 116 , 101 , 8 , 0 , 0 , 1 , 103 , 247 , 125 , 87 , 112 ] ) ,
655
+ payload : "foo" as any ,
588
656
} ,
589
- sha256 : Sha256 ,
657
+ {
658
+ signingDate : new Date ( 1369353600000 ) ,
659
+ priorSignature : "" ,
660
+ }
661
+ ) ;
662
+ expect ( eventSignature ) . toEqual ( "204bb5e2713e95354680e9522986d3ac0304aeafd33397f39e6540ca51ffe226" ) ;
663
+ } ) ;
664
+
665
+ it ( "should support overriding region and service in the signer instance" , async ( ) => {
666
+ const signer = new SignatureV4 ( {
667
+ ...signerInit ,
668
+ service : "qux" ,
669
+ // region: "us-foo-1",
590
670
} ) ;
591
671
const eventSignature = await signer . sign (
592
672
{
@@ -596,6 +676,8 @@ describe("SignatureV4", () => {
596
676
{
597
677
signingDate : new Date ( 1369353600000 ) ,
598
678
priorSignature : "" ,
679
+ // signingRegion: signerInit.region,
680
+ signingService : signerInit . service ,
599
681
}
600
682
) ;
601
683
expect ( eventSignature ) . toEqual ( "204bb5e2713e95354680e9522986d3ac0304aeafd33397f39e6540ca51ffe226" ) ;
0 commit comments