grape_api_signature 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.consolerc +3 -0
- data/.gitignore +23 -0
- data/.rspec +2 -0
- data/.rubocop.yml +21 -0
- data/.rubocop_todo.yml +0 -0
- data/.travis.yml +6 -0
- data/.versions.conf +4 -0
- data/Gemfile +13 -0
- data/LICENSE.txt +22 -0
- data/README.md +146 -0
- data/Rakefile +14 -0
- data/app/assets/javascripts/aws-signature.js.coffee +177 -0
- data/grape_api_signature.gemspec +54 -0
- data/lib/grape_api_signature/authorization.rb +79 -0
- data/lib/grape_api_signature/aws_auth_parser.rb +57 -0
- data/lib/grape_api_signature/aws_authorization.rb +40 -0
- data/lib/grape_api_signature/aws_digester.rb +27 -0
- data/lib/grape_api_signature/aws_request.rb +63 -0
- data/lib/grape_api_signature/aws_signer.rb +76 -0
- data/lib/grape_api_signature/middleware/auth.rb +105 -0
- data/lib/grape_api_signature/middleware/grape_auth.rb +44 -0
- data/lib/grape_api_signature/rails/engine.rb +6 -0
- data/lib/grape_api_signature/rspec.rb +49 -0
- data/lib/grape_api_signature/version.rb +3 -0
- data/lib/grape_api_signature.rb +21 -0
- data/spec/acceptance/.gitkeep +0 -0
- data/spec/acceptance/lib/grape_api_signature/aws_request_spec.rb +39 -0
- data/spec/acceptance/lib/grape_api_signature/aws_signer_spec.rb +54 -0
- data/spec/acceptance/lib/grape_api_signature/middleware/auth_spec.rb +60 -0
- data/spec/acceptance/lib/grape_api_signature/middleware/grape_auth_spec.rb +83 -0
- data/spec/acceptance/support/.keep +0 -0
- data/spec/acceptance/support/api.rb +5 -0
- data/spec/acceptance/support/aws_helper.rb +30 -0
- data/spec/acceptance/support/feature.rb +31 -0
- data/spec/acceptance_spec_helper.rb +3 -0
- data/spec/fixtures/aws4_test_suite/fail/get-header-key-duplicate.authz +1 -0
- data/spec/fixtures/aws4_test_suite/fail/get-header-key-duplicate.creq +9 -0
- data/spec/fixtures/aws4_test_suite/fail/get-header-key-duplicate.req +7 -0
- data/spec/fixtures/aws4_test_suite/fail/get-header-key-duplicate.sreq +8 -0
- data/spec/fixtures/aws4_test_suite/fail/get-header-key-duplicate.sts +4 -0
- data/spec/fixtures/aws4_test_suite/fail/get-header-value-multiline.req +7 -0
- data/spec/fixtures/aws4_test_suite/fail/get-header-value-order.authz +1 -0
- data/spec/fixtures/aws4_test_suite/fail/get-header-value-order.creq +9 -0
- data/spec/fixtures/aws4_test_suite/fail/get-header-value-order.req +8 -0
- data/spec/fixtures/aws4_test_suite/fail/get-header-value-order.sreq +9 -0
- data/spec/fixtures/aws4_test_suite/fail/get-header-value-order.sts +4 -0
- data/spec/fixtures/aws4_test_suite/fail/post-vanilla-query-nonunreserved.authz +1 -0
- data/spec/fixtures/aws4_test_suite/fail/post-vanilla-query-nonunreserved.creq +8 -0
- data/spec/fixtures/aws4_test_suite/fail/post-vanilla-query-nonunreserved.req +4 -0
- data/spec/fixtures/aws4_test_suite/fail/post-vanilla-query-nonunreserved.sreq +5 -0
- data/spec/fixtures/aws4_test_suite/fail/post-vanilla-query-nonunreserved.sts +4 -0
- data/spec/fixtures/aws4_test_suite/fail/post-vanilla-query-space.authz +1 -0
- data/spec/fixtures/aws4_test_suite/fail/post-vanilla-query-space.creq +8 -0
- data/spec/fixtures/aws4_test_suite/fail/post-vanilla-query-space.req +4 -0
- data/spec/fixtures/aws4_test_suite/fail/post-vanilla-query-space.sreq +5 -0
- data/spec/fixtures/aws4_test_suite/fail/post-vanilla-query-space.sts +4 -0
- data/spec/fixtures/aws4_test_suite/pass/get-header-value-trim.authz +1 -0
- data/spec/fixtures/aws4_test_suite/pass/get-header-value-trim.creq +9 -0
- data/spec/fixtures/aws4_test_suite/pass/get-header-value-trim.req +5 -0
- data/spec/fixtures/aws4_test_suite/pass/get-header-value-trim.sreq +6 -0
- data/spec/fixtures/aws4_test_suite/pass/get-header-value-trim.sts +4 -0
- data/spec/fixtures/aws4_test_suite/pass/get-relative-relative.authz +1 -0
- data/spec/fixtures/aws4_test_suite/pass/get-relative-relative.creq +8 -0
- data/spec/fixtures/aws4_test_suite/pass/get-relative-relative.req +4 -0
- data/spec/fixtures/aws4_test_suite/pass/get-relative-relative.sreq +5 -0
- data/spec/fixtures/aws4_test_suite/pass/get-relative-relative.sts +4 -0
- data/spec/fixtures/aws4_test_suite/pass/get-relative.authz +1 -0
- data/spec/fixtures/aws4_test_suite/pass/get-relative.creq +8 -0
- data/spec/fixtures/aws4_test_suite/pass/get-relative.req +4 -0
- data/spec/fixtures/aws4_test_suite/pass/get-relative.sreq +5 -0
- data/spec/fixtures/aws4_test_suite/pass/get-relative.sts +4 -0
- data/spec/fixtures/aws4_test_suite/pass/get-slash-dot-slash.authz +1 -0
- data/spec/fixtures/aws4_test_suite/pass/get-slash-dot-slash.creq +8 -0
- data/spec/fixtures/aws4_test_suite/pass/get-slash-dot-slash.req +4 -0
- data/spec/fixtures/aws4_test_suite/pass/get-slash-dot-slash.sreq +5 -0
- data/spec/fixtures/aws4_test_suite/pass/get-slash-dot-slash.sts +4 -0
- data/spec/fixtures/aws4_test_suite/pass/get-slash-pointless-dot.authz +1 -0
- data/spec/fixtures/aws4_test_suite/pass/get-slash-pointless-dot.creq +8 -0
- data/spec/fixtures/aws4_test_suite/pass/get-slash-pointless-dot.req +4 -0
- data/spec/fixtures/aws4_test_suite/pass/get-slash-pointless-dot.sreq +5 -0
- data/spec/fixtures/aws4_test_suite/pass/get-slash-pointless-dot.sts +4 -0
- data/spec/fixtures/aws4_test_suite/pass/get-slash.authz +1 -0
- data/spec/fixtures/aws4_test_suite/pass/get-slash.creq +8 -0
- data/spec/fixtures/aws4_test_suite/pass/get-slash.req +4 -0
- data/spec/fixtures/aws4_test_suite/pass/get-slash.sreq +5 -0
- data/spec/fixtures/aws4_test_suite/pass/get-slash.sts +4 -0
- data/spec/fixtures/aws4_test_suite/pass/get-slashes.authz +1 -0
- data/spec/fixtures/aws4_test_suite/pass/get-slashes.creq +8 -0
- data/spec/fixtures/aws4_test_suite/pass/get-slashes.req +4 -0
- data/spec/fixtures/aws4_test_suite/pass/get-slashes.sreq +5 -0
- data/spec/fixtures/aws4_test_suite/pass/get-slashes.sts +4 -0
- data/spec/fixtures/aws4_test_suite/pass/get-space.authz +1 -0
- data/spec/fixtures/aws4_test_suite/pass/get-space.creq +8 -0
- data/spec/fixtures/aws4_test_suite/pass/get-space.req +4 -0
- data/spec/fixtures/aws4_test_suite/pass/get-space.sreq +5 -0
- data/spec/fixtures/aws4_test_suite/pass/get-space.sts +4 -0
- data/spec/fixtures/aws4_test_suite/pass/get-unreserved.authz +1 -0
- data/spec/fixtures/aws4_test_suite/pass/get-unreserved.creq +8 -0
- data/spec/fixtures/aws4_test_suite/pass/get-unreserved.req +4 -0
- data/spec/fixtures/aws4_test_suite/pass/get-unreserved.sreq +5 -0
- data/spec/fixtures/aws4_test_suite/pass/get-unreserved.sts +4 -0
- data/spec/fixtures/aws4_test_suite/pass/get-utf8.authz +1 -0
- data/spec/fixtures/aws4_test_suite/pass/get-utf8.creq +8 -0
- data/spec/fixtures/aws4_test_suite/pass/get-utf8.req +4 -0
- data/spec/fixtures/aws4_test_suite/pass/get-utf8.sreq +5 -0
- data/spec/fixtures/aws4_test_suite/pass/get-utf8.sts +4 -0
- data/spec/fixtures/aws4_test_suite/pass/get-vanilla-empty-query-key.authz +1 -0
- data/spec/fixtures/aws4_test_suite/pass/get-vanilla-empty-query-key.creq +8 -0
- data/spec/fixtures/aws4_test_suite/pass/get-vanilla-empty-query-key.req +4 -0
- data/spec/fixtures/aws4_test_suite/pass/get-vanilla-empty-query-key.sreq +5 -0
- data/spec/fixtures/aws4_test_suite/pass/get-vanilla-empty-query-key.sts +4 -0
- data/spec/fixtures/aws4_test_suite/pass/get-vanilla-query-order-key-case.authz +1 -0
- data/spec/fixtures/aws4_test_suite/pass/get-vanilla-query-order-key-case.creq +8 -0
- data/spec/fixtures/aws4_test_suite/pass/get-vanilla-query-order-key-case.req +4 -0
- data/spec/fixtures/aws4_test_suite/pass/get-vanilla-query-order-key-case.sreq +5 -0
- data/spec/fixtures/aws4_test_suite/pass/get-vanilla-query-order-key-case.sts +4 -0
- data/spec/fixtures/aws4_test_suite/pass/get-vanilla-query-order-key.authz +1 -0
- data/spec/fixtures/aws4_test_suite/pass/get-vanilla-query-order-key.creq +8 -0
- data/spec/fixtures/aws4_test_suite/pass/get-vanilla-query-order-key.req +4 -0
- data/spec/fixtures/aws4_test_suite/pass/get-vanilla-query-order-key.sreq +5 -0
- data/spec/fixtures/aws4_test_suite/pass/get-vanilla-query-order-key.sts +4 -0
- data/spec/fixtures/aws4_test_suite/pass/get-vanilla-query-order-value.authz +1 -0
- data/spec/fixtures/aws4_test_suite/pass/get-vanilla-query-order-value.creq +8 -0
- data/spec/fixtures/aws4_test_suite/pass/get-vanilla-query-order-value.req +4 -0
- data/spec/fixtures/aws4_test_suite/pass/get-vanilla-query-order-value.sreq +5 -0
- data/spec/fixtures/aws4_test_suite/pass/get-vanilla-query-order-value.sts +4 -0
- data/spec/fixtures/aws4_test_suite/pass/get-vanilla-query-unreserved.authz +1 -0
- data/spec/fixtures/aws4_test_suite/pass/get-vanilla-query-unreserved.creq +8 -0
- data/spec/fixtures/aws4_test_suite/pass/get-vanilla-query-unreserved.req +4 -0
- data/spec/fixtures/aws4_test_suite/pass/get-vanilla-query-unreserved.sreq +5 -0
- data/spec/fixtures/aws4_test_suite/pass/get-vanilla-query-unreserved.sts +4 -0
- data/spec/fixtures/aws4_test_suite/pass/get-vanilla-query.authz +1 -0
- data/spec/fixtures/aws4_test_suite/pass/get-vanilla-query.creq +8 -0
- data/spec/fixtures/aws4_test_suite/pass/get-vanilla-query.req +4 -0
- data/spec/fixtures/aws4_test_suite/pass/get-vanilla-query.sreq +5 -0
- data/spec/fixtures/aws4_test_suite/pass/get-vanilla-query.sts +4 -0
- data/spec/fixtures/aws4_test_suite/pass/get-vanilla-ut8-query.authz +1 -0
- data/spec/fixtures/aws4_test_suite/pass/get-vanilla-ut8-query.creq +8 -0
- data/spec/fixtures/aws4_test_suite/pass/get-vanilla-ut8-query.req +4 -0
- data/spec/fixtures/aws4_test_suite/pass/get-vanilla-ut8-query.sreq +5 -0
- data/spec/fixtures/aws4_test_suite/pass/get-vanilla-ut8-query.sts +4 -0
- data/spec/fixtures/aws4_test_suite/pass/get-vanilla.authz +1 -0
- data/spec/fixtures/aws4_test_suite/pass/get-vanilla.creq +8 -0
- data/spec/fixtures/aws4_test_suite/pass/get-vanilla.req +4 -0
- data/spec/fixtures/aws4_test_suite/pass/get-vanilla.sreq +5 -0
- data/spec/fixtures/aws4_test_suite/pass/get-vanilla.sts +4 -0
- data/spec/fixtures/aws4_test_suite/pass/post-header-key-case.authz +1 -0
- data/spec/fixtures/aws4_test_suite/pass/post-header-key-case.creq +8 -0
- data/spec/fixtures/aws4_test_suite/pass/post-header-key-case.req +4 -0
- data/spec/fixtures/aws4_test_suite/pass/post-header-key-case.sreq +5 -0
- data/spec/fixtures/aws4_test_suite/pass/post-header-key-case.sts +4 -0
- data/spec/fixtures/aws4_test_suite/pass/post-header-key-sort.authz +1 -0
- data/spec/fixtures/aws4_test_suite/pass/post-header-key-sort.creq +9 -0
- data/spec/fixtures/aws4_test_suite/pass/post-header-key-sort.req +5 -0
- data/spec/fixtures/aws4_test_suite/pass/post-header-key-sort.sreq +6 -0
- data/spec/fixtures/aws4_test_suite/pass/post-header-key-sort.sts +4 -0
- data/spec/fixtures/aws4_test_suite/pass/post-header-value-case.authz +1 -0
- data/spec/fixtures/aws4_test_suite/pass/post-header-value-case.creq +9 -0
- data/spec/fixtures/aws4_test_suite/pass/post-header-value-case.req +5 -0
- data/spec/fixtures/aws4_test_suite/pass/post-header-value-case.sreq +6 -0
- data/spec/fixtures/aws4_test_suite/pass/post-header-value-case.sts +4 -0
- data/spec/fixtures/aws4_test_suite/pass/post-vanilla-empty-query-value.authz +1 -0
- data/spec/fixtures/aws4_test_suite/pass/post-vanilla-empty-query-value.creq +8 -0
- data/spec/fixtures/aws4_test_suite/pass/post-vanilla-empty-query-value.req +4 -0
- data/spec/fixtures/aws4_test_suite/pass/post-vanilla-empty-query-value.sreq +5 -0
- data/spec/fixtures/aws4_test_suite/pass/post-vanilla-empty-query-value.sts +4 -0
- data/spec/fixtures/aws4_test_suite/pass/post-vanilla-query.authz +1 -0
- data/spec/fixtures/aws4_test_suite/pass/post-vanilla-query.creq +8 -0
- data/spec/fixtures/aws4_test_suite/pass/post-vanilla-query.req +4 -0
- data/spec/fixtures/aws4_test_suite/pass/post-vanilla-query.sreq +5 -0
- data/spec/fixtures/aws4_test_suite/pass/post-vanilla-query.sts +4 -0
- data/spec/fixtures/aws4_test_suite/pass/post-vanilla.authz +1 -0
- data/spec/fixtures/aws4_test_suite/pass/post-vanilla.creq +8 -0
- data/spec/fixtures/aws4_test_suite/pass/post-vanilla.req +4 -0
- data/spec/fixtures/aws4_test_suite/pass/post-vanilla.sreq +5 -0
- data/spec/fixtures/aws4_test_suite/pass/post-vanilla.sts +4 -0
- data/spec/fixtures/aws4_test_suite/pass/post-x-www-form-urlencoded-parameters.authz +1 -0
- data/spec/fixtures/aws4_test_suite/pass/post-x-www-form-urlencoded-parameters.creq +9 -0
- data/spec/fixtures/aws4_test_suite/pass/post-x-www-form-urlencoded-parameters.req +6 -0
- data/spec/fixtures/aws4_test_suite/pass/post-x-www-form-urlencoded-parameters.sreq +7 -0
- data/spec/fixtures/aws4_test_suite/pass/post-x-www-form-urlencoded-parameters.sts +4 -0
- data/spec/fixtures/aws4_test_suite/pass/post-x-www-form-urlencoded.authz +1 -0
- data/spec/fixtures/aws4_test_suite/pass/post-x-www-form-urlencoded.creq +9 -0
- data/spec/fixtures/aws4_test_suite/pass/post-x-www-form-urlencoded.req +6 -0
- data/spec/fixtures/aws4_test_suite/pass/post-x-www-form-urlencoded.sreq +7 -0
- data/spec/fixtures/aws4_test_suite/pass/post-x-www-form-urlencoded.sts +4 -0
- data/spec/integration/.gitkeep +0 -0
- data/spec/integration/support/.keep +0 -0
- data/spec/integration_spec_helper.rb +3 -0
- data/spec/spec_helper.rb +45 -0
- data/spec/support/.gitkeep +0 -0
- data/spec/unit/.gitkeep +0 -0
- data/spec/unit/lib/grape_api_signature/authorization_spec.rb +79 -0
- data/spec/unit/lib/grape_api_signature/aws_auth_parser_spec.rb +25 -0
- data/spec/unit/support/.keep +0 -0
- data/spec/unit_spec_helper.rb +3 -0
- data/vendor/assets/javascripts/hmac-sha256.js +18 -0
- metadata +692 -0
@@ -0,0 +1 @@
|
|
1
|
+
AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20110909/us-east-1/host/aws4_request, SignedHeaders=date;host, Signature=feb926e49e382bec75c9d7dcb2a1b6dc8aa50ca43c25d2bc51143768c0875acc
|
@@ -0,0 +1,5 @@
|
|
1
|
+
GET /?foo=b&foo=a http/1.1
|
2
|
+
Date:Mon, 09 Sep 2011 23:36:00 GMT
|
3
|
+
Host:host.foo.com
|
4
|
+
Authorization: AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20110909/us-east-1/host/aws4_request, SignedHeaders=date;host, Signature=feb926e49e382bec75c9d7dcb2a1b6dc8aa50ca43c25d2bc51143768c0875acc
|
5
|
+
|
@@ -0,0 +1 @@
|
|
1
|
+
AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20110909/us-east-1/host/aws4_request, SignedHeaders=date;host, Signature=f1498ddb4d6dae767d97c466fb92f1b59a2c71ca29ac954692663f9db03426fb
|
@@ -0,0 +1,8 @@
|
|
1
|
+
GET
|
2
|
+
/
|
3
|
+
-._~0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz=-._~0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
|
4
|
+
date:Mon, 09 Sep 2011 23:36:00 GMT
|
5
|
+
host:host.foo.com
|
6
|
+
|
7
|
+
date;host
|
8
|
+
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
|
@@ -0,0 +1,5 @@
|
|
1
|
+
GET /?-._~0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz=-._~0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz http/1.1
|
2
|
+
Date:Mon, 09 Sep 2011 23:36:00 GMT
|
3
|
+
Host:host.foo.com
|
4
|
+
Authorization: AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20110909/us-east-1/host/aws4_request, SignedHeaders=date;host, Signature=f1498ddb4d6dae767d97c466fb92f1b59a2c71ca29ac954692663f9db03426fb
|
5
|
+
|
@@ -0,0 +1 @@
|
|
1
|
+
AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20110909/us-east-1/host/aws4_request, SignedHeaders=date;host, Signature=b27ccfbfa7df52a200ff74193ca6e32d4b48b8856fab7ebf1c595d0670a7e470
|
@@ -0,0 +1 @@
|
|
1
|
+
AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20110909/us-east-1/host/aws4_request, SignedHeaders=date;host, Signature=6fb359e9a05394cc7074e0feb42573a2601abc0c869a953e8c5c12e4e01f1a8c
|
@@ -0,0 +1,5 @@
|
|
1
|
+
GET /?ሴ=bar http/1.1
|
2
|
+
Date:Mon, 09 Sep 2011 23:36:00 GMT
|
3
|
+
Host:host.foo.com
|
4
|
+
Authorization: AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20110909/us-east-1/host/aws4_request, SignedHeaders=date;host, Signature=6fb359e9a05394cc7074e0feb42573a2601abc0c869a953e8c5c12e4e01f1a8c
|
5
|
+
|
@@ -0,0 +1 @@
|
|
1
|
+
AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20110909/us-east-1/host/aws4_request, SignedHeaders=date;host, Signature=b27ccfbfa7df52a200ff74193ca6e32d4b48b8856fab7ebf1c595d0670a7e470
|
@@ -0,0 +1 @@
|
|
1
|
+
AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20110909/us-east-1/host/aws4_request, SignedHeaders=date;host, Signature=22902d79e148b64e7571c3565769328423fe276eae4b26f83afceda9e767f726
|
@@ -0,0 +1 @@
|
|
1
|
+
AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20110909/us-east-1/host/aws4_request, SignedHeaders=date;host;zoo, Signature=b7a95a52518abbca0964a999a880429ab734f35ebbf1235bd79a5de87756dc4a
|
@@ -0,0 +1,6 @@
|
|
1
|
+
POST / http/1.1
|
2
|
+
DATE:Mon, 09 Sep 2011 23:36:00 GMT
|
3
|
+
host:host.foo.com
|
4
|
+
ZOO:zoobar
|
5
|
+
Authorization: AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20110909/us-east-1/host/aws4_request, SignedHeaders=date;host;zoo, Signature=b7a95a52518abbca0964a999a880429ab734f35ebbf1235bd79a5de87756dc4a
|
6
|
+
|
@@ -0,0 +1 @@
|
|
1
|
+
AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20110909/us-east-1/host/aws4_request, SignedHeaders=date;host;zoo, Signature=273313af9d0c265c531e11db70bbd653f3ba074c1009239e8559d3987039cad7
|
@@ -0,0 +1,6 @@
|
|
1
|
+
POST / http/1.1
|
2
|
+
DATE:Mon, 09 Sep 2011 23:36:00 GMT
|
3
|
+
host:host.foo.com
|
4
|
+
zoo:ZOOBAR
|
5
|
+
Authorization: AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20110909/us-east-1/host/aws4_request, SignedHeaders=date;host;zoo, Signature=273313af9d0c265c531e11db70bbd653f3ba074c1009239e8559d3987039cad7
|
6
|
+
|
@@ -0,0 +1 @@
|
|
1
|
+
AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20110909/us-east-1/host/aws4_request, SignedHeaders=date;host, Signature=b6e3b79003ce0743a491606ba1035a804593b0efb1e20a11cba83f8c25a57a92
|
@@ -0,0 +1,5 @@
|
|
1
|
+
POST /?foo=bar http/1.1
|
2
|
+
Date:Mon, 09 Sep 2011 23:36:00 GMT
|
3
|
+
Host:host.foo.com
|
4
|
+
Authorization: AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20110909/us-east-1/host/aws4_request, SignedHeaders=date;host, Signature=b6e3b79003ce0743a491606ba1035a804593b0efb1e20a11cba83f8c25a57a92
|
5
|
+
|
@@ -0,0 +1 @@
|
|
1
|
+
AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20110909/us-east-1/host/aws4_request, SignedHeaders=date;host, Signature=b6e3b79003ce0743a491606ba1035a804593b0efb1e20a11cba83f8c25a57a92
|
@@ -0,0 +1,5 @@
|
|
1
|
+
POST /?foo=bar http/1.1
|
2
|
+
Date:Mon, 09 Sep 2011 23:36:00 GMT
|
3
|
+
Host:host.foo.com
|
4
|
+
Authorization: AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20110909/us-east-1/host/aws4_request, SignedHeaders=date;host, Signature=b6e3b79003ce0743a491606ba1035a804593b0efb1e20a11cba83f8c25a57a92
|
5
|
+
|
@@ -0,0 +1 @@
|
|
1
|
+
AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20110909/us-east-1/host/aws4_request, SignedHeaders=date;host, Signature=22902d79e148b64e7571c3565769328423fe276eae4b26f83afceda9e767f726
|
@@ -0,0 +1 @@
|
|
1
|
+
AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20110909/us-east-1/host/aws4_request, SignedHeaders=content-type;date;host, Signature=b105eb10c6d318d2294de9d49dd8b031b55e3c3fe139f2e637da70511e9e7b71
|
@@ -0,0 +1,7 @@
|
|
1
|
+
POST / http/1.1
|
2
|
+
Content-Type:application/x-www-form-urlencoded; charset=utf8
|
3
|
+
Date:Mon, 09 Sep 2011 23:36:00 GMT
|
4
|
+
Host:host.foo.com
|
5
|
+
Authorization: AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20110909/us-east-1/host/aws4_request, SignedHeaders=content-type;date;host, Signature=b105eb10c6d318d2294de9d49dd8b031b55e3c3fe139f2e637da70511e9e7b71
|
6
|
+
|
7
|
+
foo=bar
|
@@ -0,0 +1 @@
|
|
1
|
+
AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20110909/us-east-1/host/aws4_request, SignedHeaders=content-type;date;host, Signature=5a15b22cf462f047318703b92e6f4f38884e4a7ab7b1d6426ca46a8bd1c26cbc
|
@@ -0,0 +1,7 @@
|
|
1
|
+
POST / http/1.1
|
2
|
+
Content-Type:application/x-www-form-urlencoded
|
3
|
+
Date:Mon, 09 Sep 2011 23:36:00 GMT
|
4
|
+
Host:host.foo.com
|
5
|
+
Authorization: AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20110909/us-east-1/host/aws4_request, SignedHeaders=content-type;date;host, Signature=5a15b22cf462f047318703b92e6f4f38884e4a7ab7b1d6426ca46a8bd1c26cbc
|
6
|
+
|
7
|
+
foo=bar
|
File without changes
|
File without changes
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
$LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
|
2
|
+
|
3
|
+
require 'bundler/setup'
|
4
|
+
Bundler.require(:development)
|
5
|
+
|
6
|
+
require 'coveralls'
|
7
|
+
Coveralls.wear! unless ENV['SIMPLE_COVERAGE']
|
8
|
+
|
9
|
+
begin
|
10
|
+
if ENV['SIMPLE_COVERAGE']
|
11
|
+
require 'simplecov'
|
12
|
+
SimpleCov.start do
|
13
|
+
add_group 'Lib', 'lib'
|
14
|
+
|
15
|
+
add_filter '/spec/'
|
16
|
+
end
|
17
|
+
end
|
18
|
+
rescue LoadError
|
19
|
+
warn '=' * 80
|
20
|
+
warn 'simplecov not installed. No coverage report'
|
21
|
+
warn '=' * 80
|
22
|
+
end
|
23
|
+
|
24
|
+
#########################################
|
25
|
+
require 'grape_api_signature'
|
26
|
+
#########################################
|
27
|
+
|
28
|
+
Dir[File.join(File.expand_path(__dir__), 'support/**/*.rb')].each { |f| require f }
|
29
|
+
|
30
|
+
# This file was generated by the `rspec --init` command. Conventionally, all
|
31
|
+
# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
|
32
|
+
# Require this file using `require "spec_helper"` to ensure that it is only
|
33
|
+
# loaded once.
|
34
|
+
#
|
35
|
+
# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
|
36
|
+
RSpec.configure do |config|
|
37
|
+
config.run_all_when_everything_filtered = true
|
38
|
+
config.filter_run :focus
|
39
|
+
|
40
|
+
# Run specs in random order to surface order dependencies. If you find an
|
41
|
+
# order dependency and want to debug it, you can fix the order by providing
|
42
|
+
# the seed, which is printed after each run.
|
43
|
+
# --seed 1234
|
44
|
+
config.order = 'random'
|
45
|
+
end
|
File without changes
|
data/spec/unit/.gitkeep
ADDED
File without changes
|
@@ -0,0 +1,79 @@
|
|
1
|
+
require 'unit_spec_helper'
|
2
|
+
|
3
|
+
module GrapeAPISignature
|
4
|
+
describe Authorization do
|
5
|
+
|
6
|
+
let(:request_method) { 'POST' }
|
7
|
+
# rubocop:disable LineLength
|
8
|
+
let(:headers) do
|
9
|
+
{
|
10
|
+
|
11
|
+
'Version' => 'HTTP/1.1',
|
12
|
+
'Host' => 'localhost:3000',
|
13
|
+
'Accept' => 'application/json',
|
14
|
+
'Authorization' => 'AWS4-HMAC-SHA256 Credential=abc/20140730/europe/localhost/aws4_request, SignedHeaders=accept;content-type;x-amz-date, Signature=a358bdc1688e595c0f332aa7f7804a749d19908890e43e9e542a6c306190d079',
|
15
|
+
'X-Amz-Date' => '20140730T131050Z',
|
16
|
+
'X-Amz-Algorithm' => 'AWS4-HMAC-SHA256',
|
17
|
+
'X-Amz-Signedheaders' => 'accept;content-type;x-amz-date',
|
18
|
+
'Content-Type' => 'application/json'
|
19
|
+
|
20
|
+
}
|
21
|
+
|
22
|
+
end
|
23
|
+
# rubocop:enable LineLength
|
24
|
+
|
25
|
+
let(:uri) { URI('http://localhost:3000/api.json') }
|
26
|
+
let(:body) { 'param1=param2, param3, param4' }
|
27
|
+
|
28
|
+
subject do
|
29
|
+
GrapeAPISignature::Authorization.new(
|
30
|
+
request_method,
|
31
|
+
headers,
|
32
|
+
uri,
|
33
|
+
body
|
34
|
+
).tap { |auth| allow(auth).to receive(:request_too_old?).and_return(false) }
|
35
|
+
end
|
36
|
+
|
37
|
+
describe '#authentic?' do
|
38
|
+
|
39
|
+
it 'returns "true" when the signature matches' do
|
40
|
+
expect(subject.authentic?('12345678')).to be_truthy
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'returns "false" when the signature does not match' do
|
44
|
+
expect(subject.authentic?('01234567')).to be_falsey
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'returns "false" when the signature does match but time is up' do
|
48
|
+
allow(subject).to receive(:request_too_old?).and_return(true)
|
49
|
+
expect(subject.authentic?('12345678')).to be_falsey
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
describe '#request_too_old?' do
|
55
|
+
let(:datetime) { Time.now }
|
56
|
+
|
57
|
+
subject do
|
58
|
+
GrapeAPISignature::Authorization.new(
|
59
|
+
request_method,
|
60
|
+
headers,
|
61
|
+
uri,
|
62
|
+
body
|
63
|
+
)
|
64
|
+
end
|
65
|
+
|
66
|
+
it 'returns "false" when 900 seks are not gone' do
|
67
|
+
subject.headers['date'] = Time.now
|
68
|
+
expect(subject.request_too_old?).to be_falsy
|
69
|
+
end
|
70
|
+
|
71
|
+
it 'returns "true" when 900 seks are gone' do
|
72
|
+
subject.headers['date'] = Time.now - 901
|
73
|
+
expect(subject.request_too_old?).to be_truthy
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
79
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'unit_spec_helper'
|
2
|
+
|
3
|
+
module GrapeAPISignature
|
4
|
+
describe AWSAuthParser do
|
5
|
+
|
6
|
+
# rubocop:disable LineLength
|
7
|
+
let(:aws_auth_str) { 'AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20110909/us-east-1/host/aws4_request, SignedHeaders=date;host;p, Signature=debf546796015d6f6ded8626f5ce98597c33b47b9164cf6b17b4642036fcb592' }
|
8
|
+
# rubocop:enable LineLength
|
9
|
+
|
10
|
+
it 'parses an aws auth string' do
|
11
|
+
expect(AWSAuthParser.parse(aws_auth_str)).not_to be_nil
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'sets all aws auth values' do
|
15
|
+
result = AWSAuthParser.parse(aws_auth_str)
|
16
|
+
expect(result.access_key).to eq 'AKIDEXAMPLE'
|
17
|
+
expect(result.date).to eq '20110909'
|
18
|
+
expect(result.region).to eq 'us-east-1'
|
19
|
+
expect(result.service).to eq 'host'
|
20
|
+
expect(result.signed_headers).to eq %w(date host p)
|
21
|
+
expect(result.signature).to eq 'debf546796015d6f6ded8626f5ce98597c33b47b9164cf6b17b4642036fcb592'
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
File without changes
|