├── .gitignore ├── .travis.yml ├── test ├── aws-sig-v4-test-suite │ ├── get-utf8 │ │ ├── get-utf8.req │ │ ├── get-utf8.sts │ │ ├── get-utf8.creq │ │ ├── get-utf8.authz │ │ └── get-utf8.sreq │ ├── get-vanilla │ │ ├── get-vanilla.req │ │ ├── get-vanilla.sts │ │ ├── get-vanilla.creq │ │ ├── get-vanilla.authz │ │ └── get-vanilla.sreq │ ├── post-vanilla │ │ ├── post-vanilla.req │ │ ├── post-vanilla.sts │ │ ├── post-vanilla.creq │ │ ├── post-vanilla.authz │ │ └── post-vanilla.sreq │ ├── get-vanilla-query │ │ ├── get-vanilla-query.req │ │ ├── get-vanilla-query.sts │ │ ├── get-vanilla-query.creq │ │ ├── get-vanilla-query.authz │ │ └── get-vanilla-query.sreq │ ├── normalize-path │ │ ├── get-slash │ │ │ ├── get-slash.req │ │ │ ├── get-slash.sts │ │ │ ├── get-slash.creq │ │ │ ├── get-slash.authz │ │ │ └── get-slash.sreq │ │ ├── get-relative │ │ │ ├── get-relative.req │ │ │ ├── get-relative.sts │ │ │ ├── get-relative.creq │ │ │ ├── get-relative.authz │ │ │ └── get-relative.sreq │ │ ├── get-slashes │ │ │ ├── get-slashes.req │ │ │ ├── get-slashes.sts │ │ │ ├── get-slashes.creq │ │ │ ├── get-slashes.authz │ │ │ └── get-slashes.sreq │ │ ├── get-space │ │ │ ├── get-space.req │ │ │ ├── get-space.sts │ │ │ ├── get-space.authz │ │ │ ├── get-space.creq │ │ │ └── get-space.sreq │ │ ├── get-slash-dot-slash │ │ │ ├── get-slash-dot-slash.req │ │ │ ├── get-slash-dot-slash.sts │ │ │ ├── get-slash-dot-slash.creq │ │ │ ├── get-slash-dot-slash.authz │ │ │ └── get-slash-dot-slash.sreq │ │ ├── get-slash-pointless-dot │ │ │ ├── get-slash-pointless-dot.req │ │ │ ├── get-slash-pointless-dot.sts │ │ │ ├── get-slash-pointless-dot.creq │ │ │ ├── get-slash-pointless-dot.authz │ │ │ └── get-slash-pointless-dot.sreq │ │ ├── get-relative-relative │ │ │ ├── get-relative-relative.req │ │ │ ├── get-relative-relative.sts │ │ │ ├── get-relative-relative.creq │ │ │ ├── get-relative-relative.authz │ │ │ └── get-relative-relative.sreq │ │ └── normalize-path.txt │ ├── post-header-key-case │ │ ├── post-header-key-case.req │ │ ├── post-header-key-case.sts │ │ ├── post-header-key-case.creq │ │ ├── post-header-key-case.authz │ │ └── post-header-key-case.sreq │ ├── get-vanilla-utf8-query │ │ ├── get-vanilla-utf8-query.req │ │ ├── get-vanilla-utf8-query.sts │ │ ├── get-vanilla-utf8-query.creq │ │ ├── get-vanilla-utf8-query.authz │ │ └── get-vanilla-utf8-query.sreq │ ├── post-vanilla-query │ │ ├── post-vanilla-query.req │ │ ├── post-vanilla-query.sts │ │ ├── post-vanilla-query.authz │ │ ├── post-vanilla-query.creq │ │ └── post-vanilla-query.sreq │ ├── post-sts-token │ │ ├── post-sts-header-after │ │ │ ├── post-sts-header-after.req │ │ │ ├── post-sts-header-after.sts │ │ │ ├── post-sts-header-after.creq │ │ │ ├── post-sts-header-after.authz │ │ │ └── post-sts-header-after.sreq │ │ ├── post-sts-header-before │ │ │ ├── post-sts-header-before.sts │ │ │ ├── post-sts-header-before.authz │ │ │ ├── post-sts-header-before.req │ │ │ ├── post-sts-header-before.creq │ │ │ └── post-sts-header-before.sreq │ │ └── readme.txt │ ├── post-header-key-sort │ │ ├── post-header-key-sort.req │ │ ├── post-header-key-sort.sts │ │ ├── post-header-key-sort.authz │ │ ├── post-header-key-sort.creq │ │ └── post-header-key-sort.sreq │ ├── get-vanilla-empty-query-key │ │ ├── get-vanilla-empty-query-key.req │ │ ├── get-vanilla-empty-query-key.sts │ │ ├── get-vanilla-empty-query-key.creq │ │ ├── get-vanilla-empty-query-key.authz │ │ └── get-vanilla-empty-query-key.sreq │ ├── post-header-value-case │ │ ├── post-header-value-case.req │ │ ├── post-header-value-case.sts │ │ ├── post-header-value-case.authz │ │ ├── post-header-value-case.creq │ │ └── post-header-value-case.sreq │ ├── post-vanilla-empty-query-value │ │ ├── post-vanilla-empty-query-value.req │ │ ├── post-vanilla-empty-query-value.sts │ │ ├── post-vanilla-empty-query-value.creq │ │ ├── post-vanilla-empty-query-value.authz │ │ └── post-vanilla-empty-query-value.sreq │ ├── get-vanilla-query-order-key │ │ ├── get-vanilla-query-order-key.req │ │ ├── get-vanilla-query-order-key.sts │ │ ├── get-vanilla-query-order-key.authz │ │ ├── get-vanilla-query-order-key.creq │ │ └── get-vanilla-query-order-key.sreq │ ├── get-vanilla-query-order-value │ │ ├── get-vanilla-query-order-value.req │ │ ├── get-vanilla-query-order-value.sts │ │ ├── get-vanilla-query-order-value.authz │ │ ├── get-vanilla-query-order-value.creq │ │ └── get-vanilla-query-order-value.sreq │ ├── get-header-value-trim │ │ ├── get-header-value-trim.req │ │ ├── get-header-value-trim.sts │ │ ├── get-header-value-trim.authz │ │ ├── get-header-value-trim.creq │ │ └── get-header-value-trim.sreq │ ├── get-unreserved │ │ ├── get-unreserved.req │ │ ├── get-unreserved.sts │ │ ├── get-unreserved.authz │ │ ├── get-unreserved.creq │ │ └── get-unreserved.sreq │ ├── get-vanilla-query-order-key-case │ │ ├── get-vanilla-query-order-key-case.req │ │ ├── get-vanilla-query-order-key-case.sts │ │ ├── get-vanilla-query-order-key-case.authz │ │ ├── get-vanilla-query-order-key-case.creq │ │ └── get-vanilla-query-order-key-case.sreq │ ├── get-header-value-multiline │ │ ├── get-header-value-multiline.req │ │ ├── get-header-value-multiline.sts │ │ ├── get-header-value-multiline.authz │ │ ├── get-header-value-multiline.creq │ │ └── get-header-value-multiline.sreq │ ├── get-header-key-duplicate │ │ ├── get-header-key-duplicate.req │ │ ├── get-header-key-duplicate.sts │ │ ├── get-header-key-duplicate.authz │ │ ├── get-header-key-duplicate.creq │ │ └── get-header-key-duplicate.sreq │ ├── get-header-value-order │ │ ├── get-header-value-order.sts │ │ ├── get-header-value-order.req │ │ ├── get-header-value-order.authz │ │ ├── get-header-value-order.creq │ │ └── get-header-value-order.sreq │ ├── get-vanilla-query-unreserved │ │ ├── get-vanilla-query-unreserved.sts │ │ ├── get-vanilla-query-unreserved.authz │ │ ├── get-vanilla-query-unreserved.req │ │ ├── get-vanilla-query-unreserved.creq │ │ └── get-vanilla-query-unreserved.sreq │ ├── post-x-www-form-urlencoded │ │ ├── post-x-www-form-urlencoded.req │ │ ├── post-x-www-form-urlencoded.sts │ │ ├── post-x-www-form-urlencoded.authz │ │ ├── post-x-www-form-urlencoded.creq │ │ └── post-x-www-form-urlencoded.sreq │ └── post-x-www-form-urlencoded-parameters │ │ ├── post-x-www-form-urlencoded-parameters.sts │ │ ├── post-x-www-form-urlencoded-parameters.req │ │ ├── post-x-www-form-urlencoded-parameters.authz │ │ ├── post-x-www-form-urlencoded-parameters.creq │ │ └── post-x-www-form-urlencoded-parameters.sreq ├── test.js └── suite.js ├── package.json ├── LICENSE.md ├── README.md ├── index.js └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .idea 3 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - "node" 4 | - "lts/*" -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-utf8/get-utf8.req: -------------------------------------------------------------------------------- 1 | GET /ሴ HTTP/1.1 2 | Host:example.amazonaws.com 3 | X-Amz-Date:20150830T123600Z -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-vanilla/get-vanilla.req: -------------------------------------------------------------------------------- 1 | GET / HTTP/1.1 2 | Host:example.amazonaws.com 3 | X-Amz-Date:20150830T123600Z -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/post-vanilla/post-vanilla.req: -------------------------------------------------------------------------------- 1 | POST / HTTP/1.1 2 | Host:example.amazonaws.com 3 | X-Amz-Date:20150830T123600Z -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-vanilla-query/get-vanilla-query.req: -------------------------------------------------------------------------------- 1 | GET / HTTP/1.1 2 | Host:example.amazonaws.com 3 | X-Amz-Date:20150830T123600Z -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/normalize-path/get-slash/get-slash.req: -------------------------------------------------------------------------------- 1 | GET // HTTP/1.1 2 | Host:example.amazonaws.com 3 | X-Amz-Date:20150830T123600Z -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/post-header-key-case/post-header-key-case.req: -------------------------------------------------------------------------------- 1 | POST / HTTP/1.1 2 | Host:example.amazonaws.com 3 | X-Amz-Date:20150830T123600Z -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/normalize-path/get-relative/get-relative.req: -------------------------------------------------------------------------------- 1 | GET /example/.. HTTP/1.1 2 | Host:example.amazonaws.com 3 | X-Amz-Date:20150830T123600Z -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/normalize-path/get-slashes/get-slashes.req: -------------------------------------------------------------------------------- 1 | GET //example// HTTP/1.1 2 | Host:example.amazonaws.com 3 | X-Amz-Date:20150830T123600Z -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/normalize-path/get-space/get-space.req: -------------------------------------------------------------------------------- 1 | GET /example space/ HTTP/1.1 2 | Host:example.amazonaws.com 3 | X-Amz-Date:20150830T123600Z -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-vanilla-utf8-query/get-vanilla-utf8-query.req: -------------------------------------------------------------------------------- 1 | GET /?ሴ=bar HTTP/1.1 2 | Host:example.amazonaws.com 3 | X-Amz-Date:20150830T123600Z -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/post-vanilla-query/post-vanilla-query.req: -------------------------------------------------------------------------------- 1 | POST /?Param1=value1 HTTP/1.1 2 | Host:example.amazonaws.com 3 | X-Amz-Date:20150830T123600Z -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/normalize-path/get-slash-dot-slash/get-slash-dot-slash.req: -------------------------------------------------------------------------------- 1 | GET /./ HTTP/1.1 2 | Host:example.amazonaws.com 3 | X-Amz-Date:20150830T123600Z -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/post-sts-token/post-sts-header-after/post-sts-header-after.req: -------------------------------------------------------------------------------- 1 | POST / HTTP/1.1 2 | Host:example.amazonaws.com 3 | X-Amz-Date:20150830T123600Z -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/post-header-key-sort/post-header-key-sort.req: -------------------------------------------------------------------------------- 1 | POST / HTTP/1.1 2 | Host:example.amazonaws.com 3 | My-Header1:value1 4 | X-Amz-Date:20150830T123600Z -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-vanilla-empty-query-key/get-vanilla-empty-query-key.req: -------------------------------------------------------------------------------- 1 | GET /?Param1=value1 HTTP/1.1 2 | Host:example.amazonaws.com 3 | X-Amz-Date:20150830T123600Z -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/post-header-value-case/post-header-value-case.req: -------------------------------------------------------------------------------- 1 | POST / HTTP/1.1 2 | Host:example.amazonaws.com 3 | My-Header1:VALUE1 4 | X-Amz-Date:20150830T123600Z -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/normalize-path/get-slash-pointless-dot/get-slash-pointless-dot.req: -------------------------------------------------------------------------------- 1 | GET /./example HTTP/1.1 2 | Host:example.amazonaws.com 3 | X-Amz-Date:20150830T123600Z -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/post-vanilla-empty-query-value/post-vanilla-empty-query-value.req: -------------------------------------------------------------------------------- 1 | POST /?Param1=value1 HTTP/1.1 2 | Host:example.amazonaws.com 3 | X-Amz-Date:20150830T123600Z -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-vanilla-query-order-key/get-vanilla-query-order-key.req: -------------------------------------------------------------------------------- 1 | GET /?Param1=value2&Param1=Value1 HTTP/1.1 2 | Host:example.amazonaws.com 3 | X-Amz-Date:20150830T123600Z -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/normalize-path/get-relative-relative/get-relative-relative.req: -------------------------------------------------------------------------------- 1 | GET /example1/example2/../.. HTTP/1.1 2 | Host:example.amazonaws.com 3 | X-Amz-Date:20150830T123600Z -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-utf8/get-utf8.sts: -------------------------------------------------------------------------------- 1 | AWS4-HMAC-SHA256 2 | 20150830T123600Z 3 | 20150830/us-east-1/service/aws4_request 4 | 2a0a97d02205e45ce2e994789806b19270cfbbb0921b278ccf58f5249ac42102 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-vanilla-query-order-value/get-vanilla-query-order-value.req: -------------------------------------------------------------------------------- 1 | GET /?Param1=value2&Param1=value1 HTTP/1.1 2 | Host:example.amazonaws.com 3 | X-Amz-Date:20150830T123600Z -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-header-value-trim/get-header-value-trim.req: -------------------------------------------------------------------------------- 1 | GET / HTTP/1.1 2 | Host:example.amazonaws.com 3 | My-Header1: value1 4 | My-Header2: "a b c" 5 | X-Amz-Date:20150830T123600Z -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-unreserved/get-unreserved.req: -------------------------------------------------------------------------------- 1 | GET /-._~0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz HTTP/1.1 2 | Host:example.amazonaws.com 3 | X-Amz-Date:20150830T123600Z -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-vanilla-query-order-key-case/get-vanilla-query-order-key-case.req: -------------------------------------------------------------------------------- 1 | GET /?Param2=value2&Param1=value1 HTTP/1.1 2 | Host:example.amazonaws.com 3 | X-Amz-Date:20150830T123600Z -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-vanilla/get-vanilla.sts: -------------------------------------------------------------------------------- 1 | AWS4-HMAC-SHA256 2 | 20150830T123600Z 3 | 20150830/us-east-1/service/aws4_request 4 | bb579772317eb040ac9ed261061d46c1f17a8133879d6129b6e1c25292927e63 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/post-vanilla/post-vanilla.sts: -------------------------------------------------------------------------------- 1 | AWS4-HMAC-SHA256 2 | 20150830T123600Z 3 | 20150830/us-east-1/service/aws4_request 4 | 553f88c9e4d10fc9e109e2aeb65f030801b70c2f6468faca261d401ae622fc87 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-header-value-multiline/get-header-value-multiline.req: -------------------------------------------------------------------------------- 1 | GET / HTTP/1.1 2 | Host:example.amazonaws.com 3 | My-Header1:value1 4 | value2 5 | value3 6 | X-Amz-Date:20150830T123600Z -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-unreserved/get-unreserved.sts: -------------------------------------------------------------------------------- 1 | AWS4-HMAC-SHA256 2 | 20150830T123600Z 3 | 20150830/us-east-1/service/aws4_request 4 | 6a968768eefaa713e2a6b16b589a8ea192661f098f37349f4e2c0082757446f9 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-vanilla-query/get-vanilla-query.sts: -------------------------------------------------------------------------------- 1 | AWS4-HMAC-SHA256 2 | 20150830T123600Z 3 | 20150830/us-east-1/service/aws4_request 4 | bb579772317eb040ac9ed261061d46c1f17a8133879d6129b6e1c25292927e63 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/normalize-path/get-slash/get-slash.sts: -------------------------------------------------------------------------------- 1 | AWS4-HMAC-SHA256 2 | 20150830T123600Z 3 | 20150830/us-east-1/service/aws4_request 4 | bb579772317eb040ac9ed261061d46c1f17a8133879d6129b6e1c25292927e63 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/normalize-path/get-space/get-space.sts: -------------------------------------------------------------------------------- 1 | AWS4-HMAC-SHA256 2 | 20150830T123600Z 3 | 20150830/us-east-1/service/aws4_request 4 | 63ee75631ed7234ae61b5f736dfc7754cdccfedbff4b5128a915706ee9390d86 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/post-vanilla-query/post-vanilla-query.sts: -------------------------------------------------------------------------------- 1 | AWS4-HMAC-SHA256 2 | 20150830T123600Z 3 | 20150830/us-east-1/service/aws4_request 4 | 9d659678c1756bb3113e2ce898845a0a79dbbc57b740555917687f1b3340fbbd -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-header-key-duplicate/get-header-key-duplicate.req: -------------------------------------------------------------------------------- 1 | GET / HTTP/1.1 2 | Host:example.amazonaws.com 3 | My-Header1:value2 4 | My-Header1:value2 5 | My-Header1:value1 6 | X-Amz-Date:20150830T123600Z -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/normalize-path/get-relative/get-relative.sts: -------------------------------------------------------------------------------- 1 | AWS4-HMAC-SHA256 2 | 20150830T123600Z 3 | 20150830/us-east-1/service/aws4_request 4 | bb579772317eb040ac9ed261061d46c1f17a8133879d6129b6e1c25292927e63 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/normalize-path/get-slashes/get-slashes.sts: -------------------------------------------------------------------------------- 1 | AWS4-HMAC-SHA256 2 | 20150830T123600Z 3 | 20150830/us-east-1/service/aws4_request 4 | cb96b4ac96d501f7c5c15bc6d67b3035061cfced4af6585ad927f7e6c985c015 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/post-header-key-case/post-header-key-case.sts: -------------------------------------------------------------------------------- 1 | AWS4-HMAC-SHA256 2 | 20150830T123600Z 3 | 20150830/us-east-1/service/aws4_request 4 | 553f88c9e4d10fc9e109e2aeb65f030801b70c2f6468faca261d401ae622fc87 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/post-header-key-sort/post-header-key-sort.sts: -------------------------------------------------------------------------------- 1 | AWS4-HMAC-SHA256 2 | 20150830T123600Z 3 | 20150830/us-east-1/service/aws4_request 4 | 9368318c2967cf6de74404b30c65a91e8f6253e0a8659d6d5319f1a812f87d65 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-header-value-order/get-header-value-order.sts: -------------------------------------------------------------------------------- 1 | AWS4-HMAC-SHA256 2 | 20150830T123600Z 3 | 20150830/us-east-1/service/aws4_request 4 | 31ce73cd3f3d9f66977ad3dd957dc47af14df92fcd8509f59b349e9137c58b86 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-header-value-trim/get-header-value-trim.sts: -------------------------------------------------------------------------------- 1 | AWS4-HMAC-SHA256 2 | 20150830T123600Z 3 | 20150830/us-east-1/service/aws4_request 4 | a726db9b0df21c14f559d0a978e563112acb1b9e05476f0a6a1c7d68f28605c7 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-vanilla-utf8-query/get-vanilla-utf8-query.sts: -------------------------------------------------------------------------------- 1 | AWS4-HMAC-SHA256 2 | 20150830T123600Z 3 | 20150830/us-east-1/service/aws4_request 4 | eb30c5bed55734080471a834cc727ae56beb50e5f39d1bff6d0d38cb192a7073 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-vanilla/get-vanilla.creq: -------------------------------------------------------------------------------- 1 | GET 2 | / 3 | 4 | host:example.amazonaws.com 5 | x-amz-date:20150830T123600Z 6 | 7 | host;x-amz-date 8 | e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/post-header-value-case/post-header-value-case.sts: -------------------------------------------------------------------------------- 1 | AWS4-HMAC-SHA256 2 | 20150830T123600Z 3 | 20150830/us-east-1/service/aws4_request 4 | d51ced243e649e3de6ef63afbbdcbca03131a21a7103a1583706a64618606a93 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-header-key-duplicate/get-header-key-duplicate.sts: -------------------------------------------------------------------------------- 1 | AWS4-HMAC-SHA256 2 | 20150830T123600Z 3 | 20150830/us-east-1/service/aws4_request 4 | dc7f04a3abfde8d472b0ab1a418b741b7c67174dad1551b4117b15527fbe966c -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-utf8/get-utf8.creq: -------------------------------------------------------------------------------- 1 | GET 2 | /%E1%88%B4 3 | 4 | host:example.amazonaws.com 5 | x-amz-date:20150830T123600Z 6 | 7 | host;x-amz-date 8 | e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/post-vanilla/post-vanilla.creq: -------------------------------------------------------------------------------- 1 | POST 2 | / 3 | 4 | host:example.amazonaws.com 5 | x-amz-date:20150830T123600Z 6 | 7 | host;x-amz-date 8 | e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-header-value-multiline/get-header-value-multiline.sts: -------------------------------------------------------------------------------- 1 | AWS4-HMAC-SHA256 2 | 20150830T123600Z 3 | 20150830/us-east-1/service/aws4_request 4 | b7b6cbfd8a0430b78891e986784da2630c8a135a8595cec25b26ea94f926ee55 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-utf8/get-utf8.authz: -------------------------------------------------------------------------------- 1 | AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;x-amz-date, Signature=8318018e0b0f223aa2bbf98705b62bb787dc9c0e678f255a891fd03141be5d85 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-vanilla-empty-query-key/get-vanilla-empty-query-key.sts: -------------------------------------------------------------------------------- 1 | AWS4-HMAC-SHA256 2 | 20150830T123600Z 3 | 20150830/us-east-1/service/aws4_request 4 | 1e24db194ed7d0eec2de28d7369675a243488e08526e8c1c73571282f7c517ab -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-vanilla-query-order-key/get-vanilla-query-order-key.sts: -------------------------------------------------------------------------------- 1 | AWS4-HMAC-SHA256 2 | 20150830T123600Z 3 | 20150830/us-east-1/service/aws4_request 4 | 704b4cef673542d84cdff252633f065e8daeba5f168b77116f8b1bcaf3d38f89 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-vanilla-query-unreserved/get-vanilla-query-unreserved.sts: -------------------------------------------------------------------------------- 1 | AWS4-HMAC-SHA256 2 | 20150830T123600Z 3 | 20150830/us-east-1/service/aws4_request 4 | c30d4703d9f799439be92736156d47ccfb2d879ddf56f5befa6d1d6aab979177 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-vanilla-query/get-vanilla-query.creq: -------------------------------------------------------------------------------- 1 | GET 2 | / 3 | 4 | host:example.amazonaws.com 5 | x-amz-date:20150830T123600Z 6 | 7 | host;x-amz-date 8 | e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/normalize-path/get-slash-dot-slash/get-slash-dot-slash.sts: -------------------------------------------------------------------------------- 1 | AWS4-HMAC-SHA256 2 | 20150830T123600Z 3 | 20150830/us-east-1/service/aws4_request 4 | bb579772317eb040ac9ed261061d46c1f17a8133879d6129b6e1c25292927e63 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/normalize-path/get-slash/get-slash.creq: -------------------------------------------------------------------------------- 1 | GET 2 | / 3 | 4 | host:example.amazonaws.com 5 | x-amz-date:20150830T123600Z 6 | 7 | host;x-amz-date 8 | e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/post-x-www-form-urlencoded/post-x-www-form-urlencoded.req: -------------------------------------------------------------------------------- 1 | POST / HTTP/1.1 2 | Content-Type:application/x-www-form-urlencoded 3 | Host:example.amazonaws.com 4 | X-Amz-Date:20150830T123600Z 5 | 6 | Param1=value1 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/post-x-www-form-urlencoded/post-x-www-form-urlencoded.sts: -------------------------------------------------------------------------------- 1 | AWS4-HMAC-SHA256 2 | 20150830T123600Z 3 | 20150830/us-east-1/service/aws4_request 4 | 42a5e5bb34198acb3e84da4f085bb7927f2bc277ca766e6d19c73c2154021281 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-header-value-order/get-header-value-order.req: -------------------------------------------------------------------------------- 1 | GET / HTTP/1.1 2 | Host:example.amazonaws.com 3 | My-Header1:value4 4 | My-Header1:value1 5 | My-Header1:value3 6 | My-Header1:value2 7 | X-Amz-Date:20150830T123600Z -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-vanilla-query-order-value/get-vanilla-query-order-value.sts: -------------------------------------------------------------------------------- 1 | AWS4-HMAC-SHA256 2 | 20150830T123600Z 3 | 20150830/us-east-1/service/aws4_request 4 | c968629d70850097a2d8781c9bf7edcb988b04cac14cca9be4acc3595f884606 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-vanilla/get-vanilla.authz: -------------------------------------------------------------------------------- 1 | AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;x-amz-date, Signature=5fa00fa31553b73ebf1942676e86291e8372ff2a2260956d9b8aae1d763fbf31 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/normalize-path/get-relative-relative/get-relative-relative.sts: -------------------------------------------------------------------------------- 1 | AWS4-HMAC-SHA256 2 | 20150830T123600Z 3 | 20150830/us-east-1/service/aws4_request 4 | bb579772317eb040ac9ed261061d46c1f17a8133879d6129b6e1c25292927e63 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/normalize-path/get-relative/get-relative.creq: -------------------------------------------------------------------------------- 1 | GET 2 | / 3 | 4 | host:example.amazonaws.com 5 | x-amz-date:20150830T123600Z 6 | 7 | host;x-amz-date 8 | e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/normalize-path/get-slash-pointless-dot/get-slash-pointless-dot.sts: -------------------------------------------------------------------------------- 1 | AWS4-HMAC-SHA256 2 | 20150830T123600Z 3 | 20150830/us-east-1/service/aws4_request 4 | 214d50c111a8edc4819da6a636336472c916b5240f51e9a51b5c3305180cf702 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/post-sts-token/post-sts-header-after/post-sts-header-after.sts: -------------------------------------------------------------------------------- 1 | AWS4-HMAC-SHA256 2 | 20150830T123600Z 3 | 20150830/us-east-1/service/aws4_request 4 | 553f88c9e4d10fc9e109e2aeb65f030801b70c2f6468faca261d401ae622fc87 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/post-sts-token/post-sts-header-before/post-sts-header-before.sts: -------------------------------------------------------------------------------- 1 | AWS4-HMAC-SHA256 2 | 20150830T123600Z 3 | 20150830/us-east-1/service/aws4_request 4 | c237e1b440d4c63c32ca95b5b99481081cb7b13c7e40434868e71567c1a882f6 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/post-vanilla-empty-query-value/post-vanilla-empty-query-value.sts: -------------------------------------------------------------------------------- 1 | AWS4-HMAC-SHA256 2 | 20150830T123600Z 3 | 20150830/us-east-1/service/aws4_request 4 | 9d659678c1756bb3113e2ce898845a0a79dbbc57b740555917687f1b3340fbbd -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-unreserved/get-unreserved.authz: -------------------------------------------------------------------------------- 1 | AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;x-amz-date, Signature=07ef7494c76fa4850883e2b006601f940f8a34d404d0cfa977f52a65bbf5f24f -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-vanilla-query-order-key-case/get-vanilla-query-order-key-case.sts: -------------------------------------------------------------------------------- 1 | AWS4-HMAC-SHA256 2 | 20150830T123600Z 3 | 20150830/us-east-1/service/aws4_request 4 | 816cd5b414d056048ba4f7c5386d6e0533120fb1fcfa93762cf0fc39e2cf19e0 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/post-header-key-case/post-header-key-case.creq: -------------------------------------------------------------------------------- 1 | POST 2 | / 3 | 4 | host:example.amazonaws.com 5 | x-amz-date:20150830T123600Z 6 | 7 | host;x-amz-date 8 | e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/post-vanilla/post-vanilla.authz: -------------------------------------------------------------------------------- 1 | AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;x-amz-date, Signature=5da7c1a2acd57cee7505fc6676e4e544621c30862966e37dddb68e92efbe5d6b -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/normalize-path/get-slash/get-slash.authz: -------------------------------------------------------------------------------- 1 | AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;x-amz-date, Signature=5fa00fa31553b73ebf1942676e86291e8372ff2a2260956d9b8aae1d763fbf31 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/normalize-path/get-slashes/get-slashes.creq: -------------------------------------------------------------------------------- 1 | GET 2 | /example/ 3 | 4 | host:example.amazonaws.com 5 | x-amz-date:20150830T123600Z 6 | 7 | host;x-amz-date 8 | e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/normalize-path/get-space/get-space.authz: -------------------------------------------------------------------------------- 1 | AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;x-amz-date, Signature=652487583200325589f1fba4c7e578f72c47cb61beeca81406b39ddec1366741 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/normalize-path/get-space/get-space.creq: -------------------------------------------------------------------------------- 1 | GET 2 | /example%20space/ 3 | 4 | host:example.amazonaws.com 5 | x-amz-date:20150830T123600Z 6 | 7 | host;x-amz-date 8 | e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-vanilla-query/get-vanilla-query.authz: -------------------------------------------------------------------------------- 1 | AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;x-amz-date, Signature=5fa00fa31553b73ebf1942676e86291e8372ff2a2260956d9b8aae1d763fbf31 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/normalize-path/get-slash-dot-slash/get-slash-dot-slash.creq: -------------------------------------------------------------------------------- 1 | GET 2 | / 3 | 4 | host:example.amazonaws.com 5 | x-amz-date:20150830T123600Z 6 | 7 | host;x-amz-date 8 | e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/normalize-path/get-slashes/get-slashes.authz: -------------------------------------------------------------------------------- 1 | AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;x-amz-date, Signature=9a624bd73a37c9a373b5312afbebe7a714a789de108f0bdfe846570885f57e84 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/post-vanilla-query/post-vanilla-query.authz: -------------------------------------------------------------------------------- 1 | AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;x-amz-date, Signature=28038455d6de14eafc1f9222cf5aa6f1a96197d7deb8263271d420d138af7f11 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/post-vanilla-query/post-vanilla-query.creq: -------------------------------------------------------------------------------- 1 | POST 2 | / 3 | Param1=value1 4 | host:example.amazonaws.com 5 | x-amz-date:20150830T123600Z 6 | 7 | host;x-amz-date 8 | e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/post-x-www-form-urlencoded-parameters/post-x-www-form-urlencoded-parameters.sts: -------------------------------------------------------------------------------- 1 | AWS4-HMAC-SHA256 2 | 20150830T123600Z 3 | 20150830/us-east-1/service/aws4_request 4 | 2e1cf7ed91881a30569e46552437e4156c823447bf1781b921b5d486c568dd1c -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-vanilla-utf8-query/get-vanilla-utf8-query.creq: -------------------------------------------------------------------------------- 1 | GET 2 | / 3 | %E1%88%B4=bar 4 | host:example.amazonaws.com 5 | x-amz-date:20150830T123600Z 6 | 7 | host;x-amz-date 8 | e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/normalize-path/get-relative-relative/get-relative-relative.creq: -------------------------------------------------------------------------------- 1 | GET 2 | / 3 | 4 | host:example.amazonaws.com 5 | x-amz-date:20150830T123600Z 6 | 7 | host;x-amz-date 8 | e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/normalize-path/get-relative/get-relative.authz: -------------------------------------------------------------------------------- 1 | AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;x-amz-date, Signature=5fa00fa31553b73ebf1942676e86291e8372ff2a2260956d9b8aae1d763fbf31 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/post-header-key-case/post-header-key-case.authz: -------------------------------------------------------------------------------- 1 | AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;x-amz-date, Signature=5da7c1a2acd57cee7505fc6676e4e544621c30862966e37dddb68e92efbe5d6b -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/post-sts-token/post-sts-header-after/post-sts-header-after.creq: -------------------------------------------------------------------------------- 1 | POST 2 | / 3 | 4 | host:example.amazonaws.com 5 | x-amz-date:20150830T123600Z 6 | 7 | host;x-amz-date 8 | e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-vanilla-utf8-query/get-vanilla-utf8-query.authz: -------------------------------------------------------------------------------- 1 | AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;x-amz-date, Signature=2cdec8eed098649ff3a119c94853b13c643bcf08f8b0a1d91e12c9027818dd04 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-vanilla-empty-query-key/get-vanilla-empty-query-key.creq: -------------------------------------------------------------------------------- 1 | GET 2 | / 3 | Param1=value1 4 | host:example.amazonaws.com 5 | x-amz-date:20150830T123600Z 6 | 7 | host;x-amz-date 8 | e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/normalize-path/get-slash-dot-slash/get-slash-dot-slash.authz: -------------------------------------------------------------------------------- 1 | AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;x-amz-date, Signature=5fa00fa31553b73ebf1942676e86291e8372ff2a2260956d9b8aae1d763fbf31 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/normalize-path/get-slash-pointless-dot/get-slash-pointless-dot.creq: -------------------------------------------------------------------------------- 1 | GET 2 | /example 3 | 4 | host:example.amazonaws.com 5 | x-amz-date:20150830T123600Z 6 | 7 | host;x-amz-date 8 | e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/post-header-key-sort/post-header-key-sort.authz: -------------------------------------------------------------------------------- 1 | AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;my-header1;x-amz-date, Signature=c5410059b04c1ee005303aed430f6e6645f61f4dc9e1461ec8f8916fdf18852c -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/post-x-www-form-urlencoded-parameters/post-x-www-form-urlencoded-parameters.req: -------------------------------------------------------------------------------- 1 | POST / HTTP/1.1 2 | Content-Type:application/x-www-form-urlencoded; charset=utf8 3 | Host:example.amazonaws.com 4 | X-Amz-Date:20150830T123600Z 5 | 6 | Param1=value1 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-header-value-order/get-header-value-order.authz: -------------------------------------------------------------------------------- 1 | AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;my-header1;x-amz-date, Signature=08c7e5a9acfcfeb3ab6b2185e75ce8b1deb5e634ec47601a50643f830c755c01 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-vanilla-empty-query-key/get-vanilla-empty-query-key.authz: -------------------------------------------------------------------------------- 1 | AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;x-amz-date, Signature=a67d582fa61cc504c4bae71f336f98b97f1ea3c7a6bfe1b6e45aec72011b9aeb -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-vanilla-query-order-key/get-vanilla-query-order-key.authz: -------------------------------------------------------------------------------- 1 | AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;x-amz-date, Signature=eedbc4e291e521cf13422ffca22be7d2eb8146eecf653089df300a15b2382bd1 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-vanilla-query-order-value/get-vanilla-query-order-value.authz: -------------------------------------------------------------------------------- 1 | AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;x-amz-date, Signature=5772eed61e12b33fae39ee5e7012498b51d56abc0abb7c60486157bd471c4694 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-vanilla-query-unreserved/get-vanilla-query-unreserved.authz: -------------------------------------------------------------------------------- 1 | AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;x-amz-date, Signature=9c3e54bfcdf0b19771a7f523ee5669cdf59bc7cc0884027167c21bb143a40197 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/normalize-path/get-relative-relative/get-relative-relative.authz: -------------------------------------------------------------------------------- 1 | AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;x-amz-date, Signature=5fa00fa31553b73ebf1942676e86291e8372ff2a2260956d9b8aae1d763fbf31 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/post-header-key-sort/post-header-key-sort.creq: -------------------------------------------------------------------------------- 1 | POST 2 | / 3 | 4 | host:example.amazonaws.com 5 | my-header1:value1 6 | x-amz-date:20150830T123600Z 7 | 8 | host;my-header1;x-amz-date 9 | e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/post-header-value-case/post-header-value-case.authz: -------------------------------------------------------------------------------- 1 | AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;my-header1;x-amz-date, Signature=cdbc9802e29d2942e5e10b5bccfdd67c5f22c7c4e8ae67b53629efa58b974b7d -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/post-sts-token/post-sts-header-after/post-sts-header-after.authz: -------------------------------------------------------------------------------- 1 | AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;x-amz-date, Signature=5da7c1a2acd57cee7505fc6676e4e544621c30862966e37dddb68e92efbe5d6b -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/post-vanilla-empty-query-value/post-vanilla-empty-query-value.creq: -------------------------------------------------------------------------------- 1 | POST 2 | / 3 | Param1=value1 4 | host:example.amazonaws.com 5 | x-amz-date:20150830T123600Z 6 | 7 | host;x-amz-date 8 | e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-header-key-duplicate/get-header-key-duplicate.authz: -------------------------------------------------------------------------------- 1 | AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;my-header1;x-amz-date, Signature=c9d5ea9f3f72853aea855b47ea873832890dbdd183b4468f858259531a5138ea -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-header-value-multiline/get-header-value-multiline.authz: -------------------------------------------------------------------------------- 1 | AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;my-header1;x-amz-date, Signature=ba17b383a53190154eb5fa66a1b836cc297cc0a3d70a5d00705980573d8ff790 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/normalize-path/get-slash-pointless-dot/get-slash-pointless-dot.authz: -------------------------------------------------------------------------------- 1 | AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;x-amz-date, Signature=ef75d96142cf21edca26f06005da7988e4f8dc83a165a80865db7089db637ec5 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/post-header-value-case/post-header-value-case.creq: -------------------------------------------------------------------------------- 1 | POST 2 | / 3 | 4 | host:example.amazonaws.com 5 | my-header1:VALUE1 6 | x-amz-date:20150830T123600Z 7 | 8 | host;my-header1;x-amz-date 9 | e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/post-vanilla-empty-query-value/post-vanilla-empty-query-value.authz: -------------------------------------------------------------------------------- 1 | AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;x-amz-date, Signature=28038455d6de14eafc1f9222cf5aa6f1a96197d7deb8263271d420d138af7f11 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-header-value-trim/get-header-value-trim.authz: -------------------------------------------------------------------------------- 1 | AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;my-header1;my-header2;x-amz-date, Signature=acc3ed3afb60bb290fc8d2dd0098b9911fcaa05412b367055dee359757a9c736 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-vanilla-query-order-key-case/get-vanilla-query-order-key-case.authz: -------------------------------------------------------------------------------- 1 | AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;x-amz-date, Signature=b97d918cfa904a5beff61c982a1b6f458b799221646efd99d3219ec94cdf2500 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-vanilla-query-order-key/get-vanilla-query-order-key.creq: -------------------------------------------------------------------------------- 1 | GET 2 | / 3 | Param1=Value1&Param1=value2 4 | host:example.amazonaws.com 5 | x-amz-date:20150830T123600Z 6 | 7 | host;x-amz-date 8 | e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/post-x-www-form-urlencoded/post-x-www-form-urlencoded.authz: -------------------------------------------------------------------------------- 1 | AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=content-type;host;x-amz-date, Signature=ff11897932ad3f4e8b18135d722051e5ac45fc38421b1da7b9d196a0fe09473a -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-vanilla-query-order-value/get-vanilla-query-order-value.creq: -------------------------------------------------------------------------------- 1 | GET 2 | / 3 | Param1=value1&Param1=value2 4 | host:example.amazonaws.com 5 | x-amz-date:20150830T123600Z 6 | 7 | host;x-amz-date 8 | e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-unreserved/get-unreserved.creq: -------------------------------------------------------------------------------- 1 | GET 2 | /-._~0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 3 | 4 | host:example.amazonaws.com 5 | x-amz-date:20150830T123600Z 6 | 7 | host;x-amz-date 8 | e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-vanilla-query-order-key-case/get-vanilla-query-order-key-case.creq: -------------------------------------------------------------------------------- 1 | GET 2 | / 3 | Param1=value1&Param2=value2 4 | host:example.amazonaws.com 5 | x-amz-date:20150830T123600Z 6 | 7 | host;x-amz-date 8 | e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-header-key-duplicate/get-header-key-duplicate.creq: -------------------------------------------------------------------------------- 1 | GET 2 | / 3 | 4 | host:example.amazonaws.com 5 | my-header1:value2,value2,value1 6 | x-amz-date:20150830T123600Z 7 | 8 | host;my-header1;x-amz-date 9 | e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-header-value-multiline/get-header-value-multiline.creq: -------------------------------------------------------------------------------- 1 | GET 2 | / 3 | 4 | host:example.amazonaws.com 5 | my-header1:value1,value2,value3 6 | x-amz-date:20150830T123600Z 7 | 8 | host;my-header1;x-amz-date 9 | e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-header-value-order/get-header-value-order.creq: -------------------------------------------------------------------------------- 1 | GET 2 | / 3 | 4 | host:example.amazonaws.com 5 | my-header1:value4,value1,value3,value2 6 | x-amz-date:20150830T123600Z 7 | 8 | host;my-header1;x-amz-date 9 | e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-vanilla-query-unreserved/get-vanilla-query-unreserved.req: -------------------------------------------------------------------------------- 1 | GET /?-._~0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz=-._~0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz HTTP/1.1 2 | Host:example.amazonaws.com 3 | X-Amz-Date:20150830T123600Z -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/post-sts-token/post-sts-header-before/post-sts-header-before.authz: -------------------------------------------------------------------------------- 1 | AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;x-amz-date;x-amz-security-token, Signature=85d96828115b5dc0cfc3bd16ad9e210dd772bbebba041836c64533a82be05ead -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/post-x-www-form-urlencoded-parameters/post-x-www-form-urlencoded-parameters.authz: -------------------------------------------------------------------------------- 1 | AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=content-type;host;x-amz-date, Signature=1a72ec8f64bd914b0e42e42607c7fbce7fb2c7465f63e3092b3b0d39fa77a6fe -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-header-value-trim/get-header-value-trim.creq: -------------------------------------------------------------------------------- 1 | GET 2 | / 3 | 4 | host:example.amazonaws.com 5 | my-header1:value1 6 | my-header2:"a b c" 7 | x-amz-date:20150830T123600Z 8 | 9 | host;my-header1;my-header2;x-amz-date 10 | e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/post-x-www-form-urlencoded/post-x-www-form-urlencoded.creq: -------------------------------------------------------------------------------- 1 | POST 2 | / 3 | 4 | content-type:application/x-www-form-urlencoded 5 | host:example.amazonaws.com 6 | x-amz-date:20150830T123600Z 7 | 8 | content-type;host;x-amz-date 9 | 9095672bbd1f56dfc5b65f3e153adc8731a4a654192329106275f4c7b24d0b6e -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-utf8/get-utf8.sreq: -------------------------------------------------------------------------------- 1 | GET /ሴ HTTP/1.1 2 | Host:example.amazonaws.com 3 | X-Amz-Date:20150830T123600Z 4 | Authorization: AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;x-amz-date, Signature=8318018e0b0f223aa2bbf98705b62bb787dc9c0e678f255a891fd03141be5d85 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-vanilla/get-vanilla.sreq: -------------------------------------------------------------------------------- 1 | GET / HTTP/1.1 2 | Host:example.amazonaws.com 3 | X-Amz-Date:20150830T123600Z 4 | Authorization: AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;x-amz-date, Signature=5fa00fa31553b73ebf1942676e86291e8372ff2a2260956d9b8aae1d763fbf31 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/post-vanilla/post-vanilla.sreq: -------------------------------------------------------------------------------- 1 | POST / HTTP/1.1 2 | Host:example.amazonaws.com 3 | X-Amz-Date:20150830T123600Z 4 | Authorization: AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;x-amz-date, Signature=5da7c1a2acd57cee7505fc6676e4e544621c30862966e37dddb68e92efbe5d6b -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-vanilla-query/get-vanilla-query.sreq: -------------------------------------------------------------------------------- 1 | GET / HTTP/1.1 2 | Host:example.amazonaws.com 3 | X-Amz-Date:20150830T123600Z 4 | Authorization: AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;x-amz-date, Signature=5fa00fa31553b73ebf1942676e86291e8372ff2a2260956d9b8aae1d763fbf31 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/normalize-path/get-slash/get-slash.sreq: -------------------------------------------------------------------------------- 1 | GET // HTTP/1.1 2 | Host:example.amazonaws.com 3 | X-Amz-Date:20150830T123600Z 4 | Authorization: AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;x-amz-date, Signature=5fa00fa31553b73ebf1942676e86291e8372ff2a2260956d9b8aae1d763fbf31 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/post-header-key-case/post-header-key-case.sreq: -------------------------------------------------------------------------------- 1 | POST / HTTP/1.1 2 | Host:example.amazonaws.com 3 | X-Amz-Date:20150830T123600Z 4 | Authorization: AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;x-amz-date, Signature=5da7c1a2acd57cee7505fc6676e4e544621c30862966e37dddb68e92efbe5d6b -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/post-x-www-form-urlencoded-parameters/post-x-www-form-urlencoded-parameters.creq: -------------------------------------------------------------------------------- 1 | POST 2 | / 3 | 4 | content-type:application/x-www-form-urlencoded; charset=utf8 5 | host:example.amazonaws.com 6 | x-amz-date:20150830T123600Z 7 | 8 | content-type;host;x-amz-date 9 | 9095672bbd1f56dfc5b65f3e153adc8731a4a654192329106275f4c7b24d0b6e -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/normalize-path/get-slashes/get-slashes.sreq: -------------------------------------------------------------------------------- 1 | GET //example// HTTP/1.1 2 | Host:example.amazonaws.com 3 | X-Amz-Date:20150830T123600Z 4 | Authorization: AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;x-amz-date, Signature=9a624bd73a37c9a373b5312afbebe7a714a789de108f0bdfe846570885f57e84 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/normalize-path/get-space/get-space.sreq: -------------------------------------------------------------------------------- 1 | GET /example space/ HTTP/1.1 2 | Host:example.amazonaws.com 3 | X-Amz-Date:20150830T123600Z 4 | Authorization: AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;x-amz-date, Signature=652487583200325589f1fba4c7e578f72c47cb61beeca81406b39ddec1366741 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-vanilla-utf8-query/get-vanilla-utf8-query.sreq: -------------------------------------------------------------------------------- 1 | GET /?ሴ=bar HTTP/1.1 2 | Host:example.amazonaws.com 3 | X-Amz-Date:20150830T123600Z 4 | Authorization: AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;x-amz-date, Signature=2cdec8eed098649ff3a119c94853b13c643bcf08f8b0a1d91e12c9027818dd04 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/normalize-path/get-relative/get-relative.sreq: -------------------------------------------------------------------------------- 1 | GET /example/.. HTTP/1.1 2 | Host:example.amazonaws.com 3 | X-Amz-Date:20150830T123600Z 4 | Authorization: AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;x-amz-date, Signature=5fa00fa31553b73ebf1942676e86291e8372ff2a2260956d9b8aae1d763fbf31 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/post-vanilla-query/post-vanilla-query.sreq: -------------------------------------------------------------------------------- 1 | POST /?Param1=value1 HTTP/1.1 2 | Host:example.amazonaws.com 3 | X-Amz-Date:20150830T123600Z 4 | Authorization: AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;x-amz-date, Signature=28038455d6de14eafc1f9222cf5aa6f1a96197d7deb8263271d420d138af7f11 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/normalize-path/get-slash-dot-slash/get-slash-dot-slash.sreq: -------------------------------------------------------------------------------- 1 | GET /./ HTTP/1.1 2 | Host:example.amazonaws.com 3 | X-Amz-Date:20150830T123600Z 4 | Authorization: AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;x-amz-date, Signature=5fa00fa31553b73ebf1942676e86291e8372ff2a2260956d9b8aae1d763fbf31 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-vanilla-empty-query-key/get-vanilla-empty-query-key.sreq: -------------------------------------------------------------------------------- 1 | GET /?Param1=value1 HTTP/1.1 2 | Host:example.amazonaws.com 3 | X-Amz-Date:20150830T123600Z 4 | Authorization: AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;x-amz-date, Signature=a67d582fa61cc504c4bae71f336f98b97f1ea3c7a6bfe1b6e45aec72011b9aeb -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/normalize-path/get-slash-pointless-dot/get-slash-pointless-dot.sreq: -------------------------------------------------------------------------------- 1 | GET /./example HTTP/1.1 2 | Host:example.amazonaws.com 3 | X-Amz-Date:20150830T123600Z 4 | Authorization: AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;x-amz-date, Signature=ef75d96142cf21edca26f06005da7988e4f8dc83a165a80865db7089db637ec5 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-vanilla-query-unreserved/get-vanilla-query-unreserved.creq: -------------------------------------------------------------------------------- 1 | GET 2 | / 3 | -._~0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz=-._~0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 4 | host:example.amazonaws.com 5 | x-amz-date:20150830T123600Z 6 | 7 | host;x-amz-date 8 | e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/post-header-key-sort/post-header-key-sort.sreq: -------------------------------------------------------------------------------- 1 | POST / HTTP/1.1 2 | Host:example.amazonaws.com 3 | My-Header1:value1 4 | X-Amz-Date:20150830T123600Z 5 | Authorization: AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;my-header1;x-amz-date, Signature=c5410059b04c1ee005303aed430f6e6645f61f4dc9e1461ec8f8916fdf18852c -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/post-vanilla-empty-query-value/post-vanilla-empty-query-value.sreq: -------------------------------------------------------------------------------- 1 | POST /?Param1=value1 HTTP/1.1 2 | Host:example.amazonaws.com 3 | X-Amz-Date:20150830T123600Z 4 | Authorization: AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;x-amz-date, Signature=28038455d6de14eafc1f9222cf5aa6f1a96197d7deb8263271d420d138af7f11 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-vanilla-query-order-key/get-vanilla-query-order-key.sreq: -------------------------------------------------------------------------------- 1 | GET /?Param1=value2&Param1=Value1 HTTP/1.1 2 | Host:example.amazonaws.com 3 | X-Amz-Date:20150830T123600Z 4 | Authorization: AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;x-amz-date, Signature=eedbc4e291e521cf13422ffca22be7d2eb8146eecf653089df300a15b2382bd1 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/normalize-path/get-relative-relative/get-relative-relative.sreq: -------------------------------------------------------------------------------- 1 | GET /example1/example2/../.. HTTP/1.1 2 | Host:example.amazonaws.com 3 | X-Amz-Date:20150830T123600Z 4 | Authorization: AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;x-amz-date, Signature=5fa00fa31553b73ebf1942676e86291e8372ff2a2260956d9b8aae1d763fbf31 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/post-header-value-case/post-header-value-case.sreq: -------------------------------------------------------------------------------- 1 | POST / HTTP/1.1 2 | Host:example.amazonaws.com 3 | My-Header1:VALUE1 4 | X-Amz-Date:20150830T123600Z 5 | Authorization: AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;my-header1;x-amz-date, Signature=cdbc9802e29d2942e5e10b5bccfdd67c5f22c7c4e8ae67b53629efa58b974b7d -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-vanilla-query-order-value/get-vanilla-query-order-value.sreq: -------------------------------------------------------------------------------- 1 | GET /?Param1=value2&Param1=value1 HTTP/1.1 2 | Host:example.amazonaws.com 3 | X-Amz-Date:20150830T123600Z 4 | Authorization: AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;x-amz-date, Signature=5772eed61e12b33fae39ee5e7012498b51d56abc0abb7c60486157bd471c4694 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-vanilla-query-order-key-case/get-vanilla-query-order-key-case.sreq: -------------------------------------------------------------------------------- 1 | GET /?Param2=value2&Param1=value1 HTTP/1.1 2 | Host:example.amazonaws.com 3 | X-Amz-Date:20150830T123600Z 4 | Authorization: AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;x-amz-date, Signature=b97d918cfa904a5beff61c982a1b6f458b799221646efd99d3219ec94cdf2500 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-unreserved/get-unreserved.sreq: -------------------------------------------------------------------------------- 1 | GET /-._~0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz HTTP/1.1 2 | Host:example.amazonaws.com 3 | X-Amz-Date:20150830T123600Z 4 | Authorization: AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;x-amz-date, Signature=07ef7494c76fa4850883e2b006601f940f8a34d404d0cfa977f52a65bbf5f24f -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-header-value-multiline/get-header-value-multiline.sreq: -------------------------------------------------------------------------------- 1 | GET / HTTP/1.1 2 | Host:example.amazonaws.com 3 | My-Header1:value1 4 | value2 5 | value3 6 | X-Amz-Date:20150830T123600Z 7 | Authorization: AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;my-header1;x-amz-date, Signature=ba17b383a53190154eb5fa66a1b836cc297cc0a3d70a5d00705980573d8ff790 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-header-value-trim/get-header-value-trim.sreq: -------------------------------------------------------------------------------- 1 | GET / HTTP/1.1 2 | Host:example.amazonaws.com 3 | My-Header1: value1 4 | My-Header2: "a b c" 5 | X-Amz-Date:20150830T123600Z 6 | Authorization: AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;my-header1;my-header2;x-amz-date, Signature=acc3ed3afb60bb290fc8d2dd0098b9911fcaa05412b367055dee359757a9c736 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-header-key-duplicate/get-header-key-duplicate.sreq: -------------------------------------------------------------------------------- 1 | GET / HTTP/1.1 2 | Host:example.amazonaws.com 3 | My-Header1:value2 4 | My-Header1:value2 5 | My-Header1:value1 6 | X-Amz-Date:20150830T123600Z 7 | Authorization: AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;my-header1;x-amz-date, Signature=c9d5ea9f3f72853aea855b47ea873832890dbdd183b4468f858259531a5138ea -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/post-x-www-form-urlencoded/post-x-www-form-urlencoded.sreq: -------------------------------------------------------------------------------- 1 | POST / HTTP/1.1 2 | Content-Type:application/x-www-form-urlencoded 3 | Host:example.amazonaws.com 4 | X-Amz-Date:20150830T123600Z 5 | Authorization: AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=content-type;host;x-amz-date, Signature=ff11897932ad3f4e8b18135d722051e5ac45fc38421b1da7b9d196a0fe09473a 6 | 7 | Param1=value1 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-header-value-order/get-header-value-order.sreq: -------------------------------------------------------------------------------- 1 | GET / HTTP/1.1 2 | Host:example.amazonaws.com 3 | My-Header1:value4 4 | My-Header1:value1 5 | My-Header1:value3 6 | My-Header1:value2 7 | X-Amz-Date:20150830T123600Z 8 | Authorization: AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;my-header1;x-amz-date, Signature=08c7e5a9acfcfeb3ab6b2185e75ce8b1deb5e634ec47601a50643f830c755c01 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/post-x-www-form-urlencoded-parameters/post-x-www-form-urlencoded-parameters.sreq: -------------------------------------------------------------------------------- 1 | POST / HTTP/1.1 2 | Content-Type:application/x-www-form-urlencoded; charset=utf8 3 | Host:example.amazonaws.com 4 | X-Amz-Date:20150830T123600Z 5 | Authorization: AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=content-type;host;x-amz-date, Signature=1a72ec8f64bd914b0e42e42607c7fbce7fb2c7465f63e3092b3b0d39fa77a6fe 6 | 7 | Param1=value1 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/get-vanilla-query-unreserved/get-vanilla-query-unreserved.sreq: -------------------------------------------------------------------------------- 1 | GET /?-._~0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz=-._~0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz HTTP/1.1 2 | Host:example.amazonaws.com 3 | X-Amz-Date:20150830T123600Z 4 | Authorization: AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;x-amz-date, Signature=9c3e54bfcdf0b19771a7f523ee5669cdf59bc7cc0884027167c21bb143a40197 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/post-sts-token/post-sts-header-before/post-sts-header-before.req: -------------------------------------------------------------------------------- 1 | POST / HTTP/1.1 2 | Host:example.amazonaws.com 3 | X-Amz-Date:20150830T123600Z 4 | X-Amz-Security-Token:AQoDYXdzEPT//////////wEXAMPLEtc764bNrC9SAPBSM22wDOk4x4HIZ8j4FZTwdQWLWsKWHGBuFqwAeMicRXmxfpSPfIeoIYRqTflfKD8YUuwthAx7mSEI/qkPpKPi/kMcGdQrmGdeehM4IC1NtBmUpp2wUE8phUZampKsburEDy0KPkyQDYwT7WZ0wq5VSXDvp75YU9HFvlRd8Tx6q6fE8YQcHNVXAkiY9q6d+xo0rKwT38xVqr7ZD0u0iPPkUL64lIZbqBAz+scqKmlzm8FDrypNC9Yjc8fPOLn9FX9KSYvKTr4rvx3iSIlTJabIQwj2ICCR/oLxBA== -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "aws-signature-v4", 3 | "version": "1.4.0", 4 | "description": "Generate AWS V4 Signatures and Signed URLs", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "mocha" 8 | }, 9 | "repository": "department-stockholm/aws-signature-v4", 10 | "keywords": [ 11 | "aws", 12 | "signature", 13 | "signed", 14 | "url", 15 | "v4" 16 | ], 17 | "author": "Robert Sköld ", 18 | "license": "MIT", 19 | "devDependencies": { 20 | "mocha": "^2.2.5", 21 | "mqtt": "^2.18.8" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/normalize-path/normalize-path.txt: -------------------------------------------------------------------------------- 1 | A note about signing requests to Amazon S3: 2 | 3 | In exception to this, you do not normalize URI paths for requests to Amazon S3. For example, if you have a bucket with an object named my-object//example//photo.user, use that path. Normalizing the path to my-object/example/photo.user will cause the request to fail. For more information, see Task 1: Create a Canonical Request in the Amazon Simple Storage Service API Reference: http://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-header-based-auth.html#canonical-request -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/post-sts-token/post-sts-header-before/post-sts-header-before.creq: -------------------------------------------------------------------------------- 1 | POST 2 | / 3 | 4 | host:example.amazonaws.com 5 | x-amz-date:20150830T123600Z 6 | x-amz-security-token:AQoDYXdzEPT//////////wEXAMPLEtc764bNrC9SAPBSM22wDOk4x4HIZ8j4FZTwdQWLWsKWHGBuFqwAeMicRXmxfpSPfIeoIYRqTflfKD8YUuwthAx7mSEI/qkPpKPi/kMcGdQrmGdeehM4IC1NtBmUpp2wUE8phUZampKsburEDy0KPkyQDYwT7WZ0wq5VSXDvp75YU9HFvlRd8Tx6q6fE8YQcHNVXAkiY9q6d+xo0rKwT38xVqr7ZD0u0iPPkUL64lIZbqBAz+scqKmlzm8FDrypNC9Yjc8fPOLn9FX9KSYvKTr4rvx3iSIlTJabIQwj2ICCR/oLxBA== 7 | 8 | host;x-amz-date;x-amz-security-token 9 | e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/post-sts-token/post-sts-header-after/post-sts-header-after.sreq: -------------------------------------------------------------------------------- 1 | POST / HTTP/1.1 2 | Host:example.amazonaws.com 3 | X-Amz-Date:20150830T123600Z 4 | X-Amz-Security-Token:AQoDYXdzEPT//////////wEXAMPLEtc764bNrC9SAPBSM22wDOk4x4HIZ8j4FZTwdQWLWsKWHGBuFqwAeMicRXmxfpSPfIeoIYRqTflfKD8YUuwthAx7mSEI/qkPpKPi/kMcGdQrmGdeehM4IC1NtBmUpp2wUE8phUZampKsburEDy0KPkyQDYwT7WZ0wq5VSXDvp75YU9HFvlRd8Tx6q6fE8YQcHNVXAkiY9q6d+xo0rKwT38xVqr7ZD0u0iPPkUL64lIZbqBAz+scqKmlzm8FDrypNC9Yjc8fPOLn9FX9KSYvKTr4rvx3iSIlTJabIQwj2ICCR/oLxBA== 5 | Authorization: AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;x-amz-date, Signature=5da7c1a2acd57cee7505fc6676e4e544621c30862966e37dddb68e92efbe5d6b -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/post-sts-token/post-sts-header-before/post-sts-header-before.sreq: -------------------------------------------------------------------------------- 1 | POST / HTTP/1.1 2 | Host:example.amazonaws.com 3 | X-Amz-Date:20150830T123600Z 4 | X-Amz-Security-Token:AQoDYXdzEPT//////////wEXAMPLEtc764bNrC9SAPBSM22wDOk4x4HIZ8j4FZTwdQWLWsKWHGBuFqwAeMicRXmxfpSPfIeoIYRqTflfKD8YUuwthAx7mSEI/qkPpKPi/kMcGdQrmGdeehM4IC1NtBmUpp2wUE8phUZampKsburEDy0KPkyQDYwT7WZ0wq5VSXDvp75YU9HFvlRd8Tx6q6fE8YQcHNVXAkiY9q6d+xo0rKwT38xVqr7ZD0u0iPPkUL64lIZbqBAz+scqKmlzm8FDrypNC9Yjc8fPOLn9FX9KSYvKTr4rvx3iSIlTJabIQwj2ICCR/oLxBA== 5 | Authorization: AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/service/aws4_request, SignedHeaders=host;x-amz-date;x-amz-security-token, Signature=85d96828115b5dc0cfc3bd16ad9e210dd772bbebba041836c64533a82be05ead -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Department 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /test/aws-sig-v4-test-suite/post-sts-token/readme.txt: -------------------------------------------------------------------------------- 1 | A note about using temporary security credentials: 2 | 3 | You can use temporary security credentials provided by the AWS Security Token Service (AWS STS) to sign a request. The process is the same as using long-term credentials but requires an additional HTTP header or query string parameter for the security token. The name of the header or query string parameter is X-Amz-Security-Token, and the value is the session token (the string that you received from AWS STS when you obtained temporary security credentials). 4 | 5 | When you add X-Amz-Security-Token, some services require that you include this parameter in the canonical (signed) request. For other services, you add this parameter at the end, after you calculate the signature. For details see the API reference documentation for that service. 6 | 7 | The test suite has 2 examples: 8 | 9 | post-sts-header-before - The X-Amz-Security-Token header is part of the canonical request. 10 | 11 | post-sts-header-after - The X-Amz-Security-Token header is added to the request after you calculate the signature. 12 | 13 | The test suite uses this example value for X-Amz-Security-Token: 14 | 15 | AQoDYXdzEPT//////////wEXAMPLEtc764bNrC9SAPBSM22wDOk4x4HIZ8j4FZTwdQWLWsKWHGBuFqwAeMicRXmxfpSPfIeoIYRqTflfKD8YUuwthAx7mSEI/qkPpKPi/kMcGdQrmGdeehM4IC1NtBmUpp2wUE8phUZampKsburEDy0KPkyQDYwT7WZ0wq5VSXDvp75YU9HFvlRd8Tx6q6fE8YQcHNVXAkiY9q6d+xo0rKwT38xVqr7ZD0u0iPPkUL64lIZbqBAz+scqKmlzm8FDrypNC9Yjc8fPOLn9FX9KSYvKTr4rvx3iSIlTJabIQwj2ICCR/oLxBA== -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![Build Status](https://travis-ci.org/department-stockholm/aws-signature-v4.svg?branch=master)](https://travis-ci.org/department-stockholm/aws-signature-v4) 2 | [![npm version](https://badge.fury.io/js/aws-signature-v4.svg)](https://badge.fury.io/js/aws-signature-v4) 3 | 4 | # AWS Signature V4 5 | 6 | Generating the "new" AWS V4 signatures can be a bit of a pain. 7 | 8 | For instance if you need to generate a signed URL for S3 where you have a key, secret and bucket. The steps to actually sign it is an order of magnitude more complicated than what the AWS V2 signatures were. 9 | 10 | Just have a look at [their own docs][sign-query-docs]. 11 | 12 | This module exists to provide some help. It does those steps in their example for you and provides you with a simple way to sign an S3 URL mainly, but also a more simplified way to sign any AWS URL. 13 | 14 | # Example 15 | 16 | This is the easiest example how you may sign an S3 GET URL (assuming you have set your [AWS ENV vars](#aws-env-vars) set up): 17 | 18 | ``` 19 | var v4 = require('aws-signature-v4'); 20 | var url = v4.createPresignedS3URL('logs/my-file.txt'); 21 | // url => "https://examplebucket.s3.amazonaws.com/logs/my-file.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIOSFODNN7EXAMPLE%2F20130524%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20130524T000000Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=aeeed9bbccd4d02ee5c0109b86d86835f995330da4c265957d157751f604d404" 22 | ``` 23 | 24 | Say you want to upload using HTTP, for instance with [this neat component][s3-component] you can also do this in a `/sign` route : 25 | 26 | ``` 27 | var v4 = require('aws-signature-v4'); 28 | var url = v4.createPresignedS3URL(req.query.name, { 29 | region: 'eu-central-1', // using frankfurt which requires V4 at the moment 30 | expires: 3600, // need to upload within 1 hour 31 | method: 'PUT', 32 | headers: { 33 | 'x-amz-acl': 'public-read' // set the uploaded file ACL to public-read 34 | } 35 | }); 36 | ``` 37 | 38 | # Install 39 | 40 | It's available on [npm](https://npmjs.org) so you can simply install it with: 41 | 42 | ``` 43 | npm install --save aws-signature-v4 44 | ``` 45 | 46 | # API 47 | 48 | ## AWS ENV vars 49 | 50 | I've tried to use the "official" ENV vars by default in this module. The ones they use in their own SDK: 51 | 52 | * `AWS_ACCESS_KEY_ID` 53 | * `AWS_SECRET_ACCESS_KEY` 54 | * `AWS_REGION` 55 | * `AWS_SESSION_TOKEN` 56 | * `AWS_S3_BUCKET` (not really official, but useful) 57 | 58 | ## Public API 59 | 60 | ### createPresignedS3URL(name[, options]) 61 | 62 | Returns a [query-signed AWS URL][sign-query-docs] with some S3 service specifics. 63 | 64 | Options may be any of [createPresignedURL](#createpresignedurlmethod-host-path-service-payload-options)s options plus: 65 | 66 | * `method` (defaults to `"GET"`) 67 | * `bucket` (defaults to `process.env.AWS_S3_BUCKET`) 68 | 69 | ### createPresignedURL(method, host, path, service, payload[, options]) 70 | 71 | Returns a [query-signed AWS URL][sign-query-docs]. 72 | 73 | * `key` (defaults to `process.env.AWS_ACCESS_KEY_ID`) 74 | * `secret` (defaults to `process.env.AWS_SECRET_ACCESS_KEY`) 75 | * `sessionToken` (defaults to `process.env.AWS_SESSION_TOKEN`) 76 | * `protocol` (defaults to `"https"`) 77 | * `headers` (defaults to `{}`) 78 | * `timestamp` (defaults to `Date.now()`) 79 | * `region` (defaults to `process.env.AWS_REGION || "us-east-1"`) 80 | * `expires` (defaults to `86400`, or 24 hours) 81 | * `query` Optional query parameters attached to the AWS API call (defaults to none) 82 | 83 | ## Internal API (but still available) 84 | 85 | ### createCanonicalRequest(method, pathname, query, headers, payload) 86 | 87 | Returns a `CanonicalRequest` as defined by [query-signed AWS URL docs][sign-query-docs]. 88 | 89 | ### createCanonicalQueryString(params) 90 | 91 | Returns a `CanonicalQueryString` as defined by [query-signed AWS URL docs][sign-query-docs]. 92 | 93 | ### createCanonicalHeaders(headers) 94 | 95 | Returns a `CanonicalHeaders` as defined by [query-signed AWS URL docs][sign-query-docs]. 96 | 97 | ### createSignedHeaders(headers) 98 | 99 | Returns the `Signed Headers` as defined by [query-signed AWS URL docs][sign-query-docs]. 100 | 101 | ### createCredentialScope(time, region, service) 102 | 103 | Returns the `Credential Scope` as defined by [query-signed AWS URL docs][sign-query-docs]. 104 | 105 | ### createStringToSign(time, region, service, request) 106 | 107 | Returns the `StringToSign` as defined by [query-signed AWS URL docs][sign-query-docs]. 108 | 109 | ### createSignature(secret, time, region, service, stringToSign) 110 | 111 | Returns the `Signature` as defined by [query-signed AWS URL docs][sign-query-docs]. 112 | 113 | [sign-query-docs]: http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html 114 | [s3-component]: https://github.com/component/s3/tree/0.3.x 115 | -------------------------------------------------------------------------------- /test/test.js: -------------------------------------------------------------------------------- 1 | /* eslint-env node, mocha */ 2 | "use strict"; 3 | 4 | var assert = require("assert"); 5 | var aws = require("../"); 6 | 7 | describe("aws-signature-v4", function() { 8 | // taken from the AWS documentation example code 9 | var accessKey = "AKIAIOSFODNN7EXAMPLE"; 10 | var secretKey = "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"; 11 | var sessionToken = "EXAMPLESESSION"; 12 | var exampleTime = Date.parse("Fri, 24 May 2013 00:00:00 GMT"); 13 | var canonicalRequest = aws.createCanonicalRequest( 14 | "GET", 15 | "/test.txt", 16 | { 17 | "X-Amz-Algorithm": "AWS4-HMAC-SHA256", 18 | "X-Amz-Credential": 19 | "AKIAIOSFODNN7EXAMPLE/20130524/us-east-1/s3/aws4_request", 20 | "X-Amz-Date": "20130524T000000Z", 21 | "X-Amz-Expires": 86400, 22 | "X-Amz-SignedHeaders": "host" 23 | }, 24 | { 25 | Host: "examplebucket.s3.amazonaws.com" 26 | }, 27 | "UNSIGNED-PAYLOAD" 28 | ); 29 | var stringToSign = aws.createStringToSign( 30 | exampleTime, 31 | "us-east-1", 32 | "s3", 33 | canonicalRequest 34 | ); 35 | var signature = aws.createSignature( 36 | secretKey, 37 | exampleTime, 38 | "us-east-1", 39 | "s3", 40 | stringToSign 41 | ); 42 | var presignedURL = aws.createPresignedS3URL("test.txt", { 43 | key: accessKey, 44 | secret: secretKey, 45 | bucket: "examplebucket", 46 | timestamp: exampleTime 47 | }); 48 | 49 | it("should generate a canonical request", function() { 50 | assert.equal( 51 | canonicalRequest, 52 | [ 53 | "GET", 54 | "/test.txt", 55 | "X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIOSFODNN7EXAMPLE%2F20130524%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20130524T000000Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host", 56 | "host:examplebucket.s3.amazonaws.com", 57 | "", 58 | "host", 59 | "UNSIGNED-PAYLOAD" 60 | ].join("\n") 61 | ); 62 | }); 63 | 64 | it("should generate a canonical request for websocket connection api", function() { 65 | var webCanonicalRequest = aws.createCanonicalRequest( 66 | "GET", 67 | "/@connections", 68 | { 69 | "X-Amz-Algorithm": "AWS4-HMAC-SHA256", 70 | "X-Amz-Credential": 71 | "AKIAIOSFODNN7EXAMPLE/20130524/us-east-1/s3/aws4_request", 72 | "X-Amz-Date": "20130524T000000Z", 73 | "X-Amz-SignedHeaders": "host" 74 | }, 75 | { 76 | Host: "examplebucket.s3.amazonaws.com" 77 | }, 78 | "UNSIGNED-PAYLOAD", 79 | true 80 | ); 81 | assert.equal( 82 | webCanonicalRequest, 83 | [ 84 | "GET", 85 | "/%40connections", 86 | "X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIOSFODNN7EXAMPLE%2F20130524%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20130524T000000Z&X-Amz-SignedHeaders=host", 87 | "host:examplebucket.s3.amazonaws.com", 88 | "", 89 | "host", 90 | "UNSIGNED-PAYLOAD" 91 | ].join("\n") 92 | ); 93 | }); 94 | 95 | it("should generate a string to sign", function() { 96 | // time, region, service, request 97 | assert.equal( 98 | stringToSign, 99 | [ 100 | "AWS4-HMAC-SHA256", 101 | "20130524T000000Z", 102 | "20130524/us-east-1/s3/aws4_request", 103 | "3bfa292879f6447bbcda7001decf97f4a54dc650c8942174ae0a9121cf58ad04" 104 | ].join("\n") 105 | ); 106 | }); 107 | 108 | it("should generate a signature", function() { 109 | // secret, time, region, service, stringToSign 110 | assert.equal( 111 | signature, 112 | "aeeed9bbccd4d02ee5c0109b86d86835f995330da4c265957d157751f604d404" 113 | ); 114 | }); 115 | 116 | it("should generate a presigned url", function() { 117 | assert.equal( 118 | presignedURL, 119 | "https://examplebucket.s3.amazonaws.com/test.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIOSFODNN7EXAMPLE%2F20130524%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20130524T000000Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=aeeed9bbccd4d02ee5c0109b86d86835f995330da4c265957d157751f604d404" 120 | ); 121 | }); 122 | 123 | it("should generate a presigned url with query params", function() { 124 | var presignedUrlWithQuery = aws.createPresignedS3URL("test.txt", { 125 | key: accessKey, 126 | secret: secretKey, 127 | bucket: "examplebucket", 128 | timestamp: exampleTime, 129 | query: "key=value&key2=value2" 130 | }); 131 | assert.equal( 132 | presignedUrlWithQuery, 133 | "https://examplebucket.s3.amazonaws.com/test.txt?key=value&key2=value2&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIOSFODNN7EXAMPLE%2F20130524%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20130524T000000Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=9441992768076e59f7162b6a5dd3782cddf270398d8508408386af62eed5570c" 134 | ); 135 | }); 136 | 137 | it("should generate a presigned s3 url with security token, and security token should not be the last parameter", function() { 138 | var presignedUrlWithoutSecurityToken = aws.createPresignedS3URL( 139 | "test.txt", 140 | { 141 | key: accessKey, 142 | secret: secretKey, 143 | bucket: "examplebucket", 144 | timestamp: exampleTime, 145 | sessionToken: sessionToken 146 | } 147 | ); 148 | assert.equal( 149 | presignedUrlWithoutSecurityToken, 150 | "https://examplebucket.s3.amazonaws.com/test.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIOSFODNN7EXAMPLE%2F20130524%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20130524T000000Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=12abb65becb4cfbac48bfdd9eb3178408ff6fd7f470505f4baf3dcad7088253f" 151 | ); 152 | }); 153 | 154 | it("should generate a presigned mqtt url with security token, and security token should be the last parameter", function() { 155 | var presignedUrlWithSecurityToken = aws.createPresignedURL( 156 | "GET", 157 | "example.iot.us-east-1.amazonaws.com", 158 | "/mqtt", 159 | "iotdevicegateway", 160 | "", 161 | { 162 | protocol: "wss", 163 | key: accessKey, 164 | secret: secretKey, 165 | timestamp: exampleTime, 166 | sessionToken: sessionToken 167 | } 168 | ); 169 | assert.equal( 170 | presignedUrlWithSecurityToken, 171 | "wss://example.iot.us-east-1.amazonaws.com/mqtt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIOSFODNN7EXAMPLE%2F20130524%2Fus-east-1%2Fiotdevicegateway%2Faws4_request&X-Amz-Date=20130524T000000Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=3ec863617e7e6afa53fc5669c7db4983300818ddc18e72db53c6408d00f60d94&X-Amz-Security-Token=EXAMPLESESSION" 172 | ); 173 | }); 174 | 175 | if (process.env.MQTT_ENDPOINT) { 176 | // test this with: 177 | // AWS_REGION= AWS_ACCESS_KEY_ID= AWS_SECRET_ACCESS_KEY= AWS_SESSION_TOKEN= MQTT_ENDPOINT= yarn test -f connect 178 | it("should connect to presigned mqtt endpoint", function(done) { 179 | var mqtt = require("mqtt"); 180 | var presignedUrl = aws.createPresignedURL( 181 | "GET", 182 | process.env.MQTT_ENDPOINT, 183 | "/mqtt", 184 | "iotdevicegateway", 185 | "", 186 | { 187 | protocol: "wss" 188 | } 189 | ); 190 | 191 | assert(presignedUrl); 192 | 193 | var client = mqtt.connect(presignedUrl); 194 | client.on("connect", function() { 195 | client.end(); 196 | done(); 197 | }); 198 | client.on("error", done); 199 | }); 200 | } 201 | }); 202 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | /* eslint-env node */ 2 | /* eslint no-use-before-define: [0, "nofunc"] */ 3 | "use strict"; 4 | 5 | // sources of inspiration: 6 | // https://web-identity-federation-playground.s3.amazonaws.com/js/sigv4.js 7 | // http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html 8 | var crypto = require("crypto"); 9 | var querystring = require("querystring"); 10 | var path = require("path"); 11 | 12 | exports.createCanonicalRequest = function( 13 | method, 14 | pathname, 15 | query, 16 | headers, 17 | payload, 18 | doubleEscape 19 | ) { 20 | return [ 21 | method.toUpperCase(), 22 | createCanonicalURI( 23 | doubleEscape 24 | ? pathname 25 | .split(/\//g) 26 | .map(v => encodeURIComponent(v)) 27 | .join("/") 28 | : pathname 29 | ), 30 | exports.createCanonicalQueryString(query), 31 | exports.createCanonicalHeaders(headers), 32 | exports.createSignedHeaders(headers), 33 | createCanonicalPayload(payload) 34 | ].join("\n"); 35 | }; 36 | 37 | function createCanonicalURI(uri) { 38 | var url = path.resolve(uri); 39 | if (uri[uri.length - 1] == "/" && url[url.length - 1] != "/") { 40 | url += "/"; 41 | } 42 | return url; 43 | } 44 | 45 | function createCanonicalPayload(payload) { 46 | if (payload == "UNSIGNED-PAYLOAD") { 47 | return payload; 48 | } 49 | return hash(payload || "", "hex"); 50 | } 51 | 52 | exports.createCanonicalQueryString = function(params) { 53 | if (!params) { 54 | return ""; 55 | } 56 | if (typeof params == "string") { 57 | params = querystring.parse(params); 58 | } 59 | return Object.keys(params) 60 | .sort() 61 | .map(function(key) { 62 | var values = Array.isArray(params[key]) ? params[key] : [params[key]]; 63 | return values 64 | .sort() 65 | .map(function(val) { 66 | return encodeURIComponent(key) + "=" + encodeURIComponent(val); 67 | }) 68 | .join("&"); 69 | }) 70 | .join("&"); 71 | }; 72 | 73 | exports.createCanonicalHeaders = function(headers) { 74 | return Object.keys(headers) 75 | .sort() 76 | .map(function(name) { 77 | var values = Array.isArray(headers[name]) 78 | ? headers[name] 79 | : [headers[name]]; 80 | return ( 81 | name.toLowerCase().trim() + 82 | ":" + 83 | values 84 | .map(function(v) { 85 | return v.replace(/\s+/g, " ").replace(/^\s+|\s+$/g, ""); 86 | }) 87 | .join(",") + 88 | "\n" 89 | ); 90 | }) 91 | .join(""); 92 | }; 93 | 94 | exports.createSignedHeaders = function(headers) { 95 | return Object.keys(headers) 96 | .sort() 97 | .map(function(name) { 98 | return name.toLowerCase().trim(); 99 | }) 100 | .join(";"); 101 | }; 102 | 103 | exports.createCredentialScope = function(time, region, service) { 104 | return [toDate(time), region, service, "aws4_request"].join("/"); 105 | }; 106 | 107 | exports.createStringToSign = function(time, region, service, request) { 108 | return [ 109 | "AWS4-HMAC-SHA256", 110 | toTime(time), 111 | exports.createCredentialScope(time, region, service), 112 | hash(request, "hex") 113 | ].join("\n"); 114 | }; 115 | 116 | exports.createAuthorizationHeader = function( 117 | key, 118 | scope, 119 | signedHeaders, 120 | signature 121 | ) { 122 | return [ 123 | "AWS4-HMAC-SHA256 Credential=" + key + "/" + scope, 124 | "SignedHeaders=" + signedHeaders, 125 | "Signature=" + signature 126 | ].join(", "); 127 | }; 128 | 129 | exports.createSignature = function( 130 | secret, 131 | time, 132 | region, 133 | service, 134 | stringToSign 135 | ) { 136 | var h1 = hmac("AWS4" + secret, toDate(time)); // date-key 137 | var h2 = hmac(h1, region); // region-key 138 | var h3 = hmac(h2, service); // service-key 139 | var h4 = hmac(h3, "aws4_request"); // signing-key 140 | return hmac(h4, stringToSign, "hex"); 141 | }; 142 | 143 | exports.createPresignedS3URL = function(name, options) { 144 | options = options || {}; 145 | options.method = options.method || "GET"; 146 | options.bucket = options.bucket || process.env.AWS_S3_BUCKET; 147 | options.signSessionToken = true; 148 | options.doubleEscape = false; 149 | return exports.createPresignedURL( 150 | options.method, 151 | options.bucket + ".s3.amazonaws.com", 152 | "/" + name, 153 | "s3", 154 | "UNSIGNED-PAYLOAD", 155 | options 156 | ); 157 | }; 158 | 159 | exports.createPresignedURL = function( 160 | method, 161 | host, 162 | path, 163 | service, 164 | payload, 165 | options 166 | ) { 167 | options = options || {}; 168 | options.key = options.key || process.env.AWS_ACCESS_KEY_ID; 169 | options.secret = options.secret || process.env.AWS_SECRET_ACCESS_KEY; 170 | options.sessionToken = options.sessionToken || process.env.AWS_SESSION_TOKEN; 171 | options.protocol = options.protocol || "https"; 172 | options.timestamp = options.timestamp || Date.now(); 173 | options.region = options.region || process.env.AWS_REGION || "us-east-1"; 174 | options.expires = options.expires || 86400; // 24 hours 175 | options.headers = options.headers || {}; 176 | options.signSessionToken = options.signSessionToken || false; 177 | options.doubleEscape = 178 | options.doubleEscape !== undefined ? options.doubleEscape : true; 179 | 180 | // host is required 181 | options.headers.Host = host; 182 | 183 | var query = options.query ? querystring.parse(options.query) : {}; 184 | query["X-Amz-Algorithm"] = "AWS4-HMAC-SHA256"; 185 | query["X-Amz-Credential"] = 186 | options.key + 187 | "/" + 188 | exports.createCredentialScope(options.timestamp, options.region, service); 189 | query["X-Amz-Date"] = toTime(options.timestamp); 190 | query["X-Amz-Expires"] = options.expires; 191 | query["X-Amz-SignedHeaders"] = exports.createSignedHeaders(options.headers); 192 | 193 | // when a session token must be "signed" into the canonical request 194 | // (needed for some services, such as s3) 195 | if (options.sessionToken && options.signSessionToken) { 196 | query["X-Amz-Security-Token"] = options.sessionToken; 197 | } 198 | 199 | var canonicalRequest = exports.createCanonicalRequest( 200 | method, 201 | path, 202 | query, 203 | options.headers, 204 | payload, 205 | options.doubleEscape 206 | ); 207 | var stringToSign = exports.createStringToSign( 208 | options.timestamp, 209 | options.region, 210 | service, 211 | canonicalRequest 212 | ); 213 | var signature = exports.createSignature( 214 | options.secret, 215 | options.timestamp, 216 | options.region, 217 | service, 218 | stringToSign 219 | ); 220 | query["X-Amz-Signature"] = signature; 221 | 222 | // when a session token must NOT be "signed" into the canonical request 223 | // (needed for some services, such as IoT) 224 | if (options.sessionToken && !options.signSessionToken) { 225 | query["X-Amz-Security-Token"] = options.sessionToken; 226 | } else { 227 | delete query["X-Amz-Security-Token"]; 228 | } 229 | 230 | return ( 231 | options.protocol + "://" + host + path + "?" + querystring.stringify(query) 232 | ); 233 | }; 234 | 235 | function toTime(time) { 236 | return new Date(time).toISOString().replace(/[:\-]|\.\d{3}/g, ""); 237 | } 238 | 239 | function toDate(time) { 240 | return toTime(time).substring(0, 8); 241 | } 242 | 243 | function hmac(key, string, encoding) { 244 | return crypto 245 | .createHmac("sha256", key) 246 | .update(string, "utf8") 247 | .digest(encoding); 248 | } 249 | 250 | function hash(string, encoding) { 251 | return crypto 252 | .createHash("sha256") 253 | .update(string, "utf8") 254 | .digest(encoding); 255 | } 256 | -------------------------------------------------------------------------------- /test/suite.js: -------------------------------------------------------------------------------- 1 | /* eslint-env node, mocha */ 2 | "use strict"; 3 | 4 | var assert = require("assert"); 5 | var aws = require("../"); 6 | var fs = require("fs"); 7 | var path = require("path"); 8 | var url = require("url"); 9 | 10 | describe("aws-sig-v4-test-suite (as of 2018-10-20)", function() { 11 | var tests = fs.readdirSync(path.join(__dirname, "aws-sig-v4-test-suite")); 12 | var creds = "AKIDEXAMPLE/20150830/us-east-1/service/aws4_request"; 13 | var secretKey = "wJalrXUtnFEMI/K7MDENG+bPxRfiCYEXAMPLEKEY"; 14 | var securityToken = 15 | "AQoDYXdzEPT//////////wEXAMPLEtc764bNrC9SAPBSM22wDOk4x4HIZ8j4FZTwdQWLWsKWHGBuFqwAeMicRXmxfpSPfIeoIYRqTflfKD8YUuwthAx7mSEI/qkPpKPi/kMcGdQrmGdeehM4IC1NtBmUpp2wUE8phUZampKsburEDy0KPkyQDYwT7WZ0wq5VSXDvp75YU9HFvlRd8Tx6q6fE8YQcHNVXAkiY9q6d+xo0rKwT38xVqr7ZD0u0iPPkUL64lIZbqBAz+scqKmlzm8FDrypNC9Yjc8fPOLn9FX9KSYvKTr4rvx3iSIlTJabIQwj2ICCR/oLxBA=="; 16 | var exampleKey = "AKIDEXAMPLE"; 17 | var exampleTime = Date.parse("2015-08-30T12:36:00Z"); 18 | var exampleRegion = "us-east-1"; 19 | var exampleService = "service"; 20 | 21 | it("should generate same credential scope", function() { 22 | var cscope = 23 | "AKIDEXAMPLE/" + 24 | aws.createCredentialScope(exampleTime, exampleRegion, exampleService); 25 | assert.equal(cscope, creds); 26 | }); 27 | 28 | // special cases for "post-sts-token" and "normalize-path" 29 | // which uses a nested dir structure 30 | var special = ["post-sts-token", "normalize-path"]; 31 | special.forEach(function(dir) { 32 | var extra = fs.readdirSync( 33 | path.join(__dirname, "aws-sig-v4-test-suite", dir) 34 | ); 35 | extra 36 | .filter(function(subdir) { 37 | return subdir.indexOf(".") == -1; // remove files 38 | }) 39 | .forEach(function(subdir) { 40 | tests.push(path.join(dir, subdir)); 41 | }); 42 | }); 43 | 44 | tests.forEach(function(dir) { 45 | if (special.includes(dir)) { 46 | // skip special cases 47 | return; 48 | } 49 | it(dir, async function() { 50 | var prefix = path.join( 51 | __dirname, 52 | "aws-sig-v4-test-suite", 53 | dir, 54 | path.basename(dir) 55 | ); 56 | 57 | var fixtures = { 58 | // original request 59 | oreq: fs.readFileSync(prefix + ".req"), 60 | // canonical request 61 | creq: fs.readFileSync(prefix + ".creq").toString(), 62 | // the string-to-sign 63 | sts: fs.readFileSync(prefix + ".sts").toString(), 64 | // auth signature 65 | authz: fs.readFileSync(prefix + ".authz").toString(), 66 | // signed request 67 | sreq: fs.readFileSync(prefix + ".sreq").toString() 68 | }; 69 | 70 | var req = await parseRequest(fixtures.oreq); 71 | 72 | var creq = aws.createCanonicalRequest( 73 | req.method, 74 | req.url.pathname, 75 | req.url.query, 76 | req.headers, 77 | req.body 78 | ); 79 | assert.equal(creq, fixtures.creq); 80 | 81 | var sts = aws.createStringToSign( 82 | exampleTime, 83 | exampleRegion, 84 | "service", 85 | creq 86 | ); 87 | assert.equal(sts, fixtures.sts); 88 | 89 | var authz = aws.createAuthorizationHeader( 90 | exampleKey, 91 | aws.createCredentialScope(exampleTime, exampleRegion, exampleService), 92 | aws.createSignedHeaders(req.headers), 93 | aws.createSignature( 94 | secretKey, 95 | exampleTime, 96 | exampleRegion, 97 | exampleService, 98 | sts 99 | ) 100 | ); 101 | assert.equal(authz, fixtures.authz); 102 | }); 103 | }); 104 | }); 105 | 106 | function parseRequest(str) { 107 | return new Promise((resolve, reject) => { 108 | var http = require("http"); 109 | var net = require("net"); 110 | var server = http.createServer(); 111 | server.on("request", function(req, res) { 112 | var body = []; 113 | req.on("error", function(err) { 114 | console.log("request error", err); 115 | reject(err); 116 | }); 117 | req.on("data", function(buf) { 118 | body.push(buf); 119 | }); 120 | req.on("end", function() { 121 | server.close(); 122 | 123 | // node parses headers in a way not supported by 124 | // aws (joins multiple lines) so we do some manual parsing here 125 | var headers = {}; 126 | for (var i = 0; i < req.rawHeaders.length; i += 2) { 127 | var k = req.rawHeaders[i]; 128 | var v = parseHeader(req.rawHeaders[i + 1]); 129 | headers[k] = [].concat(headers[k] || [], v); 130 | } 131 | 132 | // remove any content-length headers that was 133 | // injected to create a valid http request 134 | // in prepareRequest() 135 | if ( 136 | headers["Content-Length"] && 137 | str.toString().indexOf("Content-Length") === -1 138 | ) { 139 | delete headers["Content-Length"]; 140 | } 141 | 142 | // special case for "content-type" from 143 | // post-x-www-form-urlencoded-parameters 144 | if (headers["Content-Type"] && headers["Content-Type"].length == 2) { 145 | headers["Content-Type"] = [headers["Content-Type"].join(" ")]; 146 | } 147 | 148 | // nodejs < v11 does not support utf-8 properly in urls 149 | // so we parse the url manually from the input request 150 | // https://github.com/nodejs/node/pull/20270 151 | // (fixes the get-utf8 test) 152 | var path = str.toString().match(/(GET|POST) (.+?) HTTP\/1.1/)[2]; 153 | var uri = encodeURI("http://" + headers.Host + path); 154 | 155 | resolve({ 156 | url: url.parse(uri), 157 | method: req.method, 158 | headers: headers, 159 | body: Buffer.concat(body) 160 | }); 161 | 162 | res.end(); 163 | }); 164 | }); 165 | server.on("error", function(err) { 166 | console.log("server error", err); 167 | reject(err); 168 | }); 169 | server.on("clientError", function(err) { 170 | console.log("server client error", err); 171 | reject(err); 172 | }); 173 | server.listen("0", function() { 174 | var socket = net.createConnection(server.address(), function() { 175 | // since the aws test request isn't actually 176 | // valid HTTP we need to fix it first... 177 | // (fixes normalize-path/get-space) 178 | var req = prepareRequest(str); 179 | socket.end(req); 180 | }); 181 | socket.on("error", function(err) { 182 | console.log("socket error", err); 183 | reject(err); 184 | }); 185 | }); 186 | }); 187 | } 188 | 189 | function parseHeader(value) { 190 | return value.match(/"[^"]+"|\S+/g); 191 | } 192 | 193 | function prepareRequest(req) { 194 | var isBody = false; 195 | var bodyLength = 0; 196 | return ( 197 | req 198 | .toString() 199 | .split("\n") 200 | .map(function(line, index) { 201 | if (index === 0) { 202 | // fixes normalize-path/get-space 203 | // because the header line is not valid http 204 | // (the url has a space in it...) 205 | var head = line.match(/(GET|POST) (.+?) (HTTP\/1.1)/); 206 | return [head[1], encodeURI(head[2]), head[3]].join(" "); 207 | } 208 | if (isBody) { 209 | // fixes post-x-www-form-urlencoded 210 | // misses content-length? 211 | bodyLength = line.length; 212 | } else if (line == "") { 213 | isBody = true; 214 | } 215 | return line; 216 | }) 217 | .map(function(line, index) { 218 | if (index === 0 && bodyLength > 0) { 219 | line += "\nContent-Length: " + bodyLength; 220 | } 221 | return line; 222 | }) 223 | .join("\r\n") + "\r\n\r\n" 224 | ); 225 | } 226 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | async-limiter@~1.0.0: 6 | version "1.0.0" 7 | resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" 8 | integrity sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg== 9 | 10 | balanced-match@^1.0.0: 11 | version "1.0.0" 12 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 13 | integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= 14 | 15 | bl@^1.2.1: 16 | version "1.2.2" 17 | resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.2.tgz#a160911717103c07410cef63ef51b397c025af9c" 18 | integrity sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA== 19 | dependencies: 20 | readable-stream "^2.3.5" 21 | safe-buffer "^5.1.1" 22 | 23 | brace-expansion@^1.1.7: 24 | version "1.1.11" 25 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 26 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 27 | dependencies: 28 | balanced-match "^1.0.0" 29 | concat-map "0.0.1" 30 | 31 | buffer-from@^1.0.0: 32 | version "1.1.1" 33 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" 34 | integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== 35 | 36 | callback-stream@^1.0.2: 37 | version "1.1.0" 38 | resolved "https://registry.yarnpkg.com/callback-stream/-/callback-stream-1.1.0.tgz#4701a51266f06e06eaa71fc17233822d875f4908" 39 | integrity sha1-RwGlEmbwbgbqpx/BcjOCLYdfSQg= 40 | dependencies: 41 | inherits "^2.0.1" 42 | readable-stream "> 1.0.0 < 3.0.0" 43 | 44 | commander@0.6.1: 45 | version "0.6.1" 46 | resolved "https://registry.yarnpkg.com/commander/-/commander-0.6.1.tgz#fa68a14f6a945d54dbbe50d8cdb3320e9e3b1a06" 47 | integrity sha1-+mihT2qUXVTbvlDYzbMyDp47GgY= 48 | 49 | commander@2.3.0: 50 | version "2.3.0" 51 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.3.0.tgz#fd430e889832ec353b9acd1de217c11cb3eef873" 52 | integrity sha1-/UMOiJgy7DU7ms0d4hfBHLPu+HM= 53 | 54 | commist@^1.0.0: 55 | version "1.0.0" 56 | resolved "https://registry.yarnpkg.com/commist/-/commist-1.0.0.tgz#c0c352501cf6f52e9124e3ef89c9806e2022ebef" 57 | integrity sha1-wMNSUBz29S6RJOPvicmAbiAi6+8= 58 | dependencies: 59 | leven "^1.0.0" 60 | minimist "^1.1.0" 61 | 62 | concat-map@0.0.1: 63 | version "0.0.1" 64 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 65 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 66 | 67 | concat-stream@^1.6.2: 68 | version "1.6.2" 69 | resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" 70 | integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== 71 | dependencies: 72 | buffer-from "^1.0.0" 73 | inherits "^2.0.3" 74 | readable-stream "^2.2.2" 75 | typedarray "^0.0.6" 76 | 77 | core-util-is@~1.0.0: 78 | version "1.0.2" 79 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 80 | integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= 81 | 82 | d@1: 83 | version "1.0.0" 84 | resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f" 85 | integrity sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8= 86 | dependencies: 87 | es5-ext "^0.10.9" 88 | 89 | debug@2.2.0: 90 | version "2.2.0" 91 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" 92 | integrity sha1-+HBX6ZWxofauaklgZkE3vFbwOdo= 93 | dependencies: 94 | ms "0.7.1" 95 | 96 | diff@1.4.0: 97 | version "1.4.0" 98 | resolved "https://registry.yarnpkg.com/diff/-/diff-1.4.0.tgz#7f28d2eb9ee7b15a97efd89ce63dcfdaa3ccbabf" 99 | integrity sha1-fyjS657nsVqX79ic5j3P2qPMur8= 100 | 101 | duplexify@^3.5.1, duplexify@^3.6.0: 102 | version "3.6.1" 103 | resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.6.1.tgz#b1a7a29c4abfd639585efaecce80d666b1e34125" 104 | integrity sha512-vM58DwdnKmty+FSPzT14K9JXb90H+j5emaR4KYbr2KTIz00WHGbWOe5ghQTx233ZCLZtrGDALzKwcjEtSt35mA== 105 | dependencies: 106 | end-of-stream "^1.0.0" 107 | inherits "^2.0.1" 108 | readable-stream "^2.0.0" 109 | stream-shift "^1.0.0" 110 | 111 | end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1: 112 | version "1.4.1" 113 | resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" 114 | integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q== 115 | dependencies: 116 | once "^1.4.0" 117 | 118 | es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14: 119 | version "0.10.46" 120 | resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.46.tgz#efd99f67c5a7ec789baa3daa7f79870388f7f572" 121 | integrity sha512-24XxRvJXNFwEMpJb3nOkiRJKRoupmjYmOPVlI65Qy2SrtxwOTB+g6ODjBKOtwEHbYrhWRty9xxOWLNdClT2djw== 122 | dependencies: 123 | es6-iterator "~2.0.3" 124 | es6-symbol "~3.1.1" 125 | next-tick "1" 126 | 127 | es6-iterator@~2.0.1, es6-iterator@~2.0.3: 128 | version "2.0.3" 129 | resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" 130 | integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= 131 | dependencies: 132 | d "1" 133 | es5-ext "^0.10.35" 134 | es6-symbol "^3.1.1" 135 | 136 | es6-map@^0.1.5: 137 | version "0.1.5" 138 | resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0" 139 | integrity sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA= 140 | dependencies: 141 | d "1" 142 | es5-ext "~0.10.14" 143 | es6-iterator "~2.0.1" 144 | es6-set "~0.1.5" 145 | es6-symbol "~3.1.1" 146 | event-emitter "~0.3.5" 147 | 148 | es6-set@~0.1.5: 149 | version "0.1.5" 150 | resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1" 151 | integrity sha1-0rPsXU2ADO2BjbU40ol02wpzzLE= 152 | dependencies: 153 | d "1" 154 | es5-ext "~0.10.14" 155 | es6-iterator "~2.0.1" 156 | es6-symbol "3.1.1" 157 | event-emitter "~0.3.5" 158 | 159 | es6-symbol@3.1.1, es6-symbol@^3.1.1, es6-symbol@~3.1.1: 160 | version "3.1.1" 161 | resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" 162 | integrity sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc= 163 | dependencies: 164 | d "1" 165 | es5-ext "~0.10.14" 166 | 167 | escape-string-regexp@1.0.2: 168 | version "1.0.2" 169 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz#4dbc2fe674e71949caf3fb2695ce7f2dc1d9a8d1" 170 | integrity sha1-Tbwv5nTnGUnK8/smlc5/LcHZqNE= 171 | 172 | event-emitter@~0.3.5: 173 | version "0.3.5" 174 | resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" 175 | integrity sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk= 176 | dependencies: 177 | d "1" 178 | es5-ext "~0.10.14" 179 | 180 | extend@^3.0.0: 181 | version "3.0.2" 182 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" 183 | integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== 184 | 185 | fs.realpath@^1.0.0: 186 | version "1.0.0" 187 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 188 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 189 | 190 | glob-parent@^3.1.0: 191 | version "3.1.0" 192 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" 193 | integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= 194 | dependencies: 195 | is-glob "^3.1.0" 196 | path-dirname "^1.0.0" 197 | 198 | glob-stream@^6.1.0: 199 | version "6.1.0" 200 | resolved "https://registry.yarnpkg.com/glob-stream/-/glob-stream-6.1.0.tgz#7045c99413b3eb94888d83ab46d0b404cc7bdde4" 201 | integrity sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ= 202 | dependencies: 203 | extend "^3.0.0" 204 | glob "^7.1.1" 205 | glob-parent "^3.1.0" 206 | is-negated-glob "^1.0.0" 207 | ordered-read-streams "^1.0.0" 208 | pumpify "^1.3.5" 209 | readable-stream "^2.1.5" 210 | remove-trailing-separator "^1.0.1" 211 | to-absolute-glob "^2.0.0" 212 | unique-stream "^2.0.2" 213 | 214 | glob@3.2.11: 215 | version "3.2.11" 216 | resolved "https://registry.yarnpkg.com/glob/-/glob-3.2.11.tgz#4a973f635b9190f715d10987d5c00fd2815ebe3d" 217 | integrity sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0= 218 | dependencies: 219 | inherits "2" 220 | minimatch "0.3" 221 | 222 | glob@^7.1.1: 223 | version "7.1.3" 224 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" 225 | integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== 226 | dependencies: 227 | fs.realpath "^1.0.0" 228 | inflight "^1.0.4" 229 | inherits "2" 230 | minimatch "^3.0.4" 231 | once "^1.3.0" 232 | path-is-absolute "^1.0.0" 233 | 234 | growl@1.9.2: 235 | version "1.9.2" 236 | resolved "https://registry.yarnpkg.com/growl/-/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f" 237 | integrity sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8= 238 | 239 | help-me@^1.0.1: 240 | version "1.1.0" 241 | resolved "https://registry.yarnpkg.com/help-me/-/help-me-1.1.0.tgz#8f2d508d0600b4a456da2f086556e7e5c056a3c6" 242 | integrity sha1-jy1QjQYAtKRW2i8IZVbn5cBWo8Y= 243 | dependencies: 244 | callback-stream "^1.0.2" 245 | glob-stream "^6.1.0" 246 | through2 "^2.0.1" 247 | xtend "^4.0.0" 248 | 249 | inflight@^1.0.4: 250 | version "1.0.6" 251 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 252 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 253 | dependencies: 254 | once "^1.3.0" 255 | wrappy "1" 256 | 257 | inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: 258 | version "2.0.3" 259 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 260 | integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= 261 | 262 | is-absolute@^1.0.0: 263 | version "1.0.0" 264 | resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-1.0.0.tgz#395e1ae84b11f26ad1795e73c17378e48a301576" 265 | integrity sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA== 266 | dependencies: 267 | is-relative "^1.0.0" 268 | is-windows "^1.0.1" 269 | 270 | is-extglob@^2.1.0: 271 | version "2.1.1" 272 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 273 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= 274 | 275 | is-glob@^3.1.0: 276 | version "3.1.0" 277 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" 278 | integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= 279 | dependencies: 280 | is-extglob "^2.1.0" 281 | 282 | is-negated-glob@^1.0.0: 283 | version "1.0.0" 284 | resolved "https://registry.yarnpkg.com/is-negated-glob/-/is-negated-glob-1.0.0.tgz#6910bca5da8c95e784b5751b976cf5a10fee36d2" 285 | integrity sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI= 286 | 287 | is-relative@^1.0.0: 288 | version "1.0.0" 289 | resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-1.0.0.tgz#a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d" 290 | integrity sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA== 291 | dependencies: 292 | is-unc-path "^1.0.0" 293 | 294 | is-unc-path@^1.0.0: 295 | version "1.0.0" 296 | resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-1.0.0.tgz#d731e8898ed090a12c352ad2eaed5095ad322c9d" 297 | integrity sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ== 298 | dependencies: 299 | unc-path-regex "^0.1.2" 300 | 301 | is-windows@^1.0.1: 302 | version "1.0.2" 303 | resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" 304 | integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== 305 | 306 | isarray@~1.0.0: 307 | version "1.0.0" 308 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 309 | integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= 310 | 311 | jade@0.26.3: 312 | version "0.26.3" 313 | resolved "https://registry.yarnpkg.com/jade/-/jade-0.26.3.tgz#8f10d7977d8d79f2f6ff862a81b0513ccb25686c" 314 | integrity sha1-jxDXl32NefL2/4YqgbBRPMslaGw= 315 | dependencies: 316 | commander "0.6.1" 317 | mkdirp "0.3.0" 318 | 319 | json-stable-stringify@^1.0.0: 320 | version "1.0.1" 321 | resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" 322 | integrity sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8= 323 | dependencies: 324 | jsonify "~0.0.0" 325 | 326 | jsonify@~0.0.0: 327 | version "0.0.0" 328 | resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" 329 | integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= 330 | 331 | leven@^1.0.0: 332 | version "1.0.2" 333 | resolved "https://registry.yarnpkg.com/leven/-/leven-1.0.2.tgz#9144b6eebca5f1d0680169f1a6770dcea60b75c3" 334 | integrity sha1-kUS27ryl8dBoAWnxpncNzqYLdcM= 335 | 336 | lru-cache@2: 337 | version "2.7.3" 338 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.7.3.tgz#6d4524e8b955f95d4f5b58851ce21dd72fb4e952" 339 | integrity sha1-bUUk6LlV+V1PW1iFHOId1y+06VI= 340 | 341 | minimatch@0.3: 342 | version "0.3.0" 343 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-0.3.0.tgz#275d8edaac4f1bb3326472089e7949c8394699dd" 344 | integrity sha1-J12O2qxPG7MyZHIInnlJyDlGmd0= 345 | dependencies: 346 | lru-cache "2" 347 | sigmund "~1.0.0" 348 | 349 | minimatch@^3.0.4: 350 | version "3.0.4" 351 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 352 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 353 | dependencies: 354 | brace-expansion "^1.1.7" 355 | 356 | minimist@0.0.8: 357 | version "0.0.8" 358 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 359 | integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= 360 | 361 | minimist@^1.1.0, minimist@^1.2.0: 362 | version "1.2.0" 363 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" 364 | integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= 365 | 366 | mkdirp@0.3.0: 367 | version "0.3.0" 368 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.3.0.tgz#1bbf5ab1ba827af23575143490426455f481fe1e" 369 | integrity sha1-G79asbqCevI1dRQ0kEJkVfSB/h4= 370 | 371 | mkdirp@0.5.1: 372 | version "0.5.1" 373 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 374 | integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= 375 | dependencies: 376 | minimist "0.0.8" 377 | 378 | mocha@^2.2.5: 379 | version "2.5.3" 380 | resolved "https://registry.yarnpkg.com/mocha/-/mocha-2.5.3.tgz#161be5bdeb496771eb9b35745050b622b5aefc58" 381 | integrity sha1-FhvlvetJZ3HrmzV0UFC2IrWu/Fg= 382 | dependencies: 383 | commander "2.3.0" 384 | debug "2.2.0" 385 | diff "1.4.0" 386 | escape-string-regexp "1.0.2" 387 | glob "3.2.11" 388 | growl "1.9.2" 389 | jade "0.26.3" 390 | mkdirp "0.5.1" 391 | supports-color "1.2.0" 392 | to-iso-string "0.0.2" 393 | 394 | mqtt-packet@^5.6.0: 395 | version "5.6.0" 396 | resolved "https://registry.yarnpkg.com/mqtt-packet/-/mqtt-packet-5.6.0.tgz#923fb704d0ce0bd6ac81c7e1cc09469b1512d2fd" 397 | integrity sha512-QECe2ivqcR1LRsPobRsjenEKAC3i1a5gmm+jNKJLrsiq9PaSQ18LlKFuxvhGxWkvGEPadWv6rKd31O4ICqS1Xw== 398 | dependencies: 399 | bl "^1.2.1" 400 | inherits "^2.0.3" 401 | process-nextick-args "^2.0.0" 402 | safe-buffer "^5.1.0" 403 | 404 | mqtt@^2.18.8: 405 | version "2.18.8" 406 | resolved "https://registry.yarnpkg.com/mqtt/-/mqtt-2.18.8.tgz#9d213ccab92151accfb21ee8c0860dc6866ab259" 407 | integrity sha512-3h6oHlPY/yWwtC2J3geraYRtVVoRM6wdI+uchF4nvSSafXPZnaKqF8xnX+S22SU/FcgEAgockVIlOaAX3fkMpA== 408 | dependencies: 409 | commist "^1.0.0" 410 | concat-stream "^1.6.2" 411 | end-of-stream "^1.4.1" 412 | es6-map "^0.1.5" 413 | help-me "^1.0.1" 414 | inherits "^2.0.3" 415 | minimist "^1.2.0" 416 | mqtt-packet "^5.6.0" 417 | pump "^3.0.0" 418 | readable-stream "^2.3.6" 419 | reinterval "^1.1.0" 420 | split2 "^2.1.1" 421 | websocket-stream "^5.1.2" 422 | xtend "^4.0.1" 423 | 424 | ms@0.7.1: 425 | version "0.7.1" 426 | resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" 427 | integrity sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg= 428 | 429 | next-tick@1: 430 | version "1.0.0" 431 | resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" 432 | integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= 433 | 434 | once@^1.3.0, once@^1.3.1, once@^1.4.0: 435 | version "1.4.0" 436 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 437 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 438 | dependencies: 439 | wrappy "1" 440 | 441 | ordered-read-streams@^1.0.0: 442 | version "1.0.1" 443 | resolved "https://registry.yarnpkg.com/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz#77c0cb37c41525d64166d990ffad7ec6a0e1363e" 444 | integrity sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4= 445 | dependencies: 446 | readable-stream "^2.0.1" 447 | 448 | path-dirname@^1.0.0: 449 | version "1.0.2" 450 | resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" 451 | integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= 452 | 453 | path-is-absolute@^1.0.0: 454 | version "1.0.1" 455 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 456 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 457 | 458 | process-nextick-args@^2.0.0, process-nextick-args@~2.0.0: 459 | version "2.0.0" 460 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" 461 | integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw== 462 | 463 | pump@^2.0.0: 464 | version "2.0.1" 465 | resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" 466 | integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== 467 | dependencies: 468 | end-of-stream "^1.1.0" 469 | once "^1.3.1" 470 | 471 | pump@^3.0.0: 472 | version "3.0.0" 473 | resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" 474 | integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== 475 | dependencies: 476 | end-of-stream "^1.1.0" 477 | once "^1.3.1" 478 | 479 | pumpify@^1.3.5: 480 | version "1.5.1" 481 | resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" 482 | integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== 483 | dependencies: 484 | duplexify "^3.6.0" 485 | inherits "^2.0.3" 486 | pump "^2.0.0" 487 | 488 | "readable-stream@> 1.0.0 < 3.0.0", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6: 489 | version "2.3.6" 490 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" 491 | integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== 492 | dependencies: 493 | core-util-is "~1.0.0" 494 | inherits "~2.0.3" 495 | isarray "~1.0.0" 496 | process-nextick-args "~2.0.0" 497 | safe-buffer "~5.1.1" 498 | string_decoder "~1.1.1" 499 | util-deprecate "~1.0.1" 500 | 501 | reinterval@^1.1.0: 502 | version "1.1.0" 503 | resolved "https://registry.yarnpkg.com/reinterval/-/reinterval-1.1.0.tgz#3361ecfa3ca6c18283380dd0bb9546f390f5ece7" 504 | integrity sha1-M2Hs+jymwYKDOA3Qu5VG85D17Oc= 505 | 506 | remove-trailing-separator@^1.0.1: 507 | version "1.1.0" 508 | resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" 509 | integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= 510 | 511 | safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: 512 | version "5.1.2" 513 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 514 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 515 | 516 | sigmund@~1.0.0: 517 | version "1.0.1" 518 | resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590" 519 | integrity sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA= 520 | 521 | split2@^2.1.1: 522 | version "2.2.0" 523 | resolved "https://registry.yarnpkg.com/split2/-/split2-2.2.0.tgz#186b2575bcf83e85b7d18465756238ee4ee42493" 524 | integrity sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw== 525 | dependencies: 526 | through2 "^2.0.2" 527 | 528 | stream-shift@^1.0.0: 529 | version "1.0.0" 530 | resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" 531 | integrity sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI= 532 | 533 | string_decoder@~1.1.1: 534 | version "1.1.1" 535 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" 536 | integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== 537 | dependencies: 538 | safe-buffer "~5.1.0" 539 | 540 | supports-color@1.2.0: 541 | version "1.2.0" 542 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-1.2.0.tgz#ff1ed1e61169d06b3cf2d588e188b18d8847e17e" 543 | integrity sha1-/x7R5hFp0Gs88tWI4YixjYhH4X4= 544 | 545 | through2-filter@^2.0.0: 546 | version "2.0.0" 547 | resolved "https://registry.yarnpkg.com/through2-filter/-/through2-filter-2.0.0.tgz#60bc55a0dacb76085db1f9dae99ab43f83d622ec" 548 | integrity sha1-YLxVoNrLdghdsfna6Zq0P4PWIuw= 549 | dependencies: 550 | through2 "~2.0.0" 551 | xtend "~4.0.0" 552 | 553 | through2@^2.0.1, through2@^2.0.2, through2@~2.0.0: 554 | version "2.0.3" 555 | resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" 556 | integrity sha1-AARWmzfHx0ujnEPzzteNGtlBQL4= 557 | dependencies: 558 | readable-stream "^2.1.5" 559 | xtend "~4.0.1" 560 | 561 | to-absolute-glob@^2.0.0: 562 | version "2.0.2" 563 | resolved "https://registry.yarnpkg.com/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz#1865f43d9e74b0822db9f145b78cff7d0f7c849b" 564 | integrity sha1-GGX0PZ50sIItufFFt4z/fQ98hJs= 565 | dependencies: 566 | is-absolute "^1.0.0" 567 | is-negated-glob "^1.0.0" 568 | 569 | to-iso-string@0.0.2: 570 | version "0.0.2" 571 | resolved "https://registry.yarnpkg.com/to-iso-string/-/to-iso-string-0.0.2.tgz#4dc19e664dfccbe25bd8db508b00c6da158255d1" 572 | integrity sha1-TcGeZk38y+Jb2NtQiwDG2hWCVdE= 573 | 574 | typedarray@^0.0.6: 575 | version "0.0.6" 576 | resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" 577 | integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= 578 | 579 | ultron@~1.1.0: 580 | version "1.1.1" 581 | resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" 582 | integrity sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og== 583 | 584 | unc-path-regex@^0.1.2: 585 | version "0.1.2" 586 | resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" 587 | integrity sha1-5z3T17DXxe2G+6xrCufYxqadUPo= 588 | 589 | unique-stream@^2.0.2: 590 | version "2.2.1" 591 | resolved "https://registry.yarnpkg.com/unique-stream/-/unique-stream-2.2.1.tgz#5aa003cfbe94c5ff866c4e7d668bb1c4dbadb369" 592 | integrity sha1-WqADz76Uxf+GbE59ZouxxNuts2k= 593 | dependencies: 594 | json-stable-stringify "^1.0.0" 595 | through2-filter "^2.0.0" 596 | 597 | util-deprecate@~1.0.1: 598 | version "1.0.2" 599 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 600 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= 601 | 602 | websocket-stream@^5.1.2: 603 | version "5.1.2" 604 | resolved "https://registry.yarnpkg.com/websocket-stream/-/websocket-stream-5.1.2.tgz#1c31c627bcdf34f1a9bdacc9daa15bfa4816d9ad" 605 | integrity sha512-lchLOk435iDWs0jNuL+hiU14i3ERSrMA0IKSiJh7z6X/i4XNsutBZrtqu2CPOZuA4G/zabiqVAos0vW+S7GEVw== 606 | dependencies: 607 | duplexify "^3.5.1" 608 | inherits "^2.0.1" 609 | readable-stream "^2.3.3" 610 | safe-buffer "^5.1.1" 611 | ws "^3.2.0" 612 | xtend "^4.0.0" 613 | 614 | wrappy@1: 615 | version "1.0.2" 616 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 617 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 618 | 619 | ws@^3.2.0: 620 | version "3.3.3" 621 | resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" 622 | integrity sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA== 623 | dependencies: 624 | async-limiter "~1.0.0" 625 | safe-buffer "~5.1.0" 626 | ultron "~1.1.0" 627 | 628 | xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.0, xtend@~4.0.1: 629 | version "4.0.1" 630 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" 631 | integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68= 632 | --------------------------------------------------------------------------------