aws-signature-v4 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 01b2caa6ec91431a8e02a25b5888e97e66698ded
4
- data.tar.gz: 16b5463b54621416c7337c477e7a39d76ece029e
3
+ metadata.gz: ae3c1b489700dd2933f7f16c5a318dd9f98bd150
4
+ data.tar.gz: 41b9997c128e0ad30b69faef4b993cae5e9c5f3c
5
5
  SHA512:
6
- metadata.gz: 75fc4b0d62ae7c05512d1526649a68df401ecdb140de942921b540ea871f7d51bac7e37e291615d0cc0cdfa754375f457be66c4d2d8e4e131ef6609795d2ca62
7
- data.tar.gz: 5238c0bc18112f0236e3edd9bb778de16ecd9f2e48d9fe4c04dcb1055a38ae550fa2e0d1e9019539edcf234b40c6c4e17b7413a1f060931dcb6ea5081efdc56b
6
+ metadata.gz: 209e05eba460940b734f3261fa7f03f34257149a3d8910f7c4e6cfa5ca5515eb3521ce77614aaade3a411a3579d59a801d1abf2820896cbf450f033a398b7f83
7
+ data.tar.gz: adacbb3ebdb9ac25d6c1da132239f891744d800480d0f6f9ddb29d442e71a510fa555c56879046ec85dc30a4f55c4d3576f457151230ab3c714d9a5b53e351ea
data/README.md CHANGED
@@ -1,8 +1,8 @@
1
1
  # Aws::Signature::V4
2
2
 
3
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/aws/signature/v4`. To experiment with that code, run `bin/console` for an interactive prompt.
3
+ Executes AWS Signature Version 4 Signing Process as explained at http://docs.aws.amazon.com/general/latest/gr/sigv4_signing.html.
4
4
 
5
- TODO: Delete this and the text above, and describe your gem
5
+ The gem calculates AWS signature token and provides HTTP headers ready with authentication data.
6
6
 
7
7
  ## Installation
8
8
 
@@ -22,7 +22,41 @@ Or install it yourself as:
22
22
 
23
23
  ## Usage
24
24
 
25
- TODO: Write usage instructions here
25
+ This example shows how to generate signature for DynamoDB Query API call:
26
+
27
+ ```
28
+ payload = {
29
+ :TableName => 'my_table',
30
+ :IndexName => 'role-created_at-index',
31
+ :select => 'ALL_ATTRIBUTES',
32
+ 'KeyConditionExpression': '#user_role = :user_role',
33
+ 'ExpressionAttributeValues': {
34
+ ':user_role': {'S': 'ADMIN'}
35
+ },
36
+ :ExpressionAttributeNames => { '#user_role' => 'role'},
37
+ :scan_index_forward => true,
38
+ :ReturnConsumedCapacity => 'TOTAL'
39
+ }
40
+
41
+ aws_region = 'ap-southeast-1'
42
+ aws_access_key_id = 'AKIAJVB3LAMUASP5JTUQ'
43
+ aws_secret_access_key = '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'
44
+ aws_dynamodb_endpoint = 'https://dynamodb.ap-southeast-1.amazonaws.com'
45
+
46
+ # generate AWS Authorization header values
47
+ aws_signature = Aws::Signature::V4::Signature.new(aws_region, aws_access_key_id, aws_secret_access_key)
48
+ # parameters: service_name, amz_target, http_method, payload, host, uri
49
+ aws_signature.generate_signature('dynamodb', 'DynamoDB_20120810.Query', 'POST', payload, aws_dynamodb_endpoint, '/')
50
+ # Create HTTP object
51
+ uri = URI.parse(aws_dynamodb_endpoint)
52
+ http = Net::HTTP.new(uri.host, uri.port)
53
+ http.use_ssl = true
54
+ # Alternatively use aws_signature.signature to get signature token value and construct headers yourself
55
+ request = Net::HTTP::Post.new(uri.request_uri, aws_signature.headers)
56
+ request.body = payload.to_json
57
+ # Send the request
58
+ res = http.request(request)
59
+ ```
26
60
 
27
61
  ## Development
28
62
 
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
10
10
  spec.email = ['khaled@supahands.com']
11
11
 
12
12
  spec.summary = 'Executes AWS Signature Version 4 Signing Process to add authentication information to AWS requests.'
13
- spec.description = 'Executes AWS Signature Version 4 Signing Process as explained at http://docs.aws.amazon.com/general/latest/gr/sigv4_signing.html.<br>It calculates the signature token and provides HTTP headers with authentication header.'
13
+ spec.description = 'Executes AWS Signature Version 4 Signing Process as explained at http://docs.aws.amazon.com/general/latest/gr/sigv4_signing.html. It calculates the signature token and provides HTTP headers with authentication data.'
14
14
  spec.homepage = 'https://github.com/Supahands/aws-signature-v4.git'
15
15
  spec.license = 'MIT'
16
16
 
@@ -19,18 +19,18 @@ Gem::Specification.new do |spec|
19
19
  if spec.respond_to?(:metadata)
20
20
  spec.metadata['allowed_push_host'] = 'https://rubygems.org'
21
21
  else
22
- raise "RubyGems 2.0 or newer is required to protect against " \
23
- "public gem pushes."
22
+ raise 'RubyGems 2.0 or newer is required to protect against ' \
23
+ 'public gem pushes.'
24
24
  end
25
25
 
26
26
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
27
27
  f.match(%r{^(test|spec|features)/})
28
28
  end
29
- spec.bindir = "exe"
29
+ spec.bindir = 'exe'
30
30
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
31
- spec.require_paths = ["lib"]
31
+ spec.require_paths = ['lib']
32
32
 
33
- spec.add_development_dependency "bundler", "~> 1.14"
34
- spec.add_development_dependency "rake", "~> 10.0"
35
- spec.add_development_dependency "minitest", "~> 5.0"
33
+ spec.add_development_dependency 'bundler', '~> 1.14'
34
+ spec.add_development_dependency 'rake', '~> 10.0'
35
+ spec.add_development_dependency 'minitest', '~> 5.0'
36
36
  end
@@ -7,6 +7,8 @@ module Aws
7
7
  class Signature
8
8
 
9
9
  require 'json'
10
+ require 'digest/md5'
11
+ require 'openssl'
10
12
 
11
13
  # Your code goes here...
12
14
 
@@ -15,9 +17,9 @@ module Aws
15
17
  # @param [String] region AWS region
16
18
  # @param [String] key_id AWS user key id
17
19
  # @param [String] secret_key AWS user secret key
18
- def initialize (region, key_id, secret_key, algorithm = 'AWS4-HMAC-SHA256', content_type = 'application/x-amz-json-1.0', content_type_sign_header = 'application/x-amz-json-1.0,application/x-www-form-urlencoded')
20
+ def initialize (region, key_id, secret_key, algorithm: 'AWS4-HMAC-SHA256', content_type: 'application/x-amz-json-1.0', content_type_sign_header: 'application/x-amz-json-1.0,application/x-www-form-urlencoded', t: nil)
19
21
  # calculate date and time
20
- @t = Time.now.utc
22
+ @t = t || Time.now.utc
21
23
  @date = @t.strftime('%Y%m%d')
22
24
  @time = @t.strftime('%Y%m%dT%H%M%SZ')
23
25
  # mandatory fields
@@ -1,7 +1,7 @@
1
1
  module Aws
2
2
  module Signature
3
3
  module V4
4
- VERSION = '0.1.0'
4
+ VERSION = '0.2.0'
5
5
  end
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aws-signature-v4
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - khaled83
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-09-22 00:00:00.000000000 Z
11
+ date: 2017-10-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,8 +52,9 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '5.0'
55
- description: Executes AWS Signature Version 4 Signing Process as explained at http://docs.aws.amazon.com/general/latest/gr/sigv4_signing.html.<br>It
56
- calculates the signature token and provides HTTP headers with authentication header.
55
+ description: Executes AWS Signature Version 4 Signing Process as explained at http://docs.aws.amazon.com/general/latest/gr/sigv4_signing.html.
56
+ It calculates the signature token and provides HTTP headers with authentication
57
+ data.
57
58
  email:
58
59
  - khaled@supahands.com
59
60
  executables: []
@@ -72,6 +73,7 @@ files:
72
73
  - LICENSE.txt
73
74
  - README.md
74
75
  - Rakefile
76
+ - aws-signature-v4-0.1.0.gem
75
77
  - aws-signature-v4.gemspec
76
78
  - bin/console
77
79
  - bin/setup