authograph 1.0.0 → 1.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 2fa21ab9df699ee62947bfb58d37e05d55ae3eef
4
- data.tar.gz: 64eacefff4e51281f71126ff9d89faa2ce0ad4c8
2
+ SHA256:
3
+ metadata.gz: 1e2d276ebb575ae0fcc406969081707cb0881d1e03cbf85faed974ea138a1156
4
+ data.tar.gz: 5edd29503ee10afdc2f3c45dd29146eea0cdc6f01f9a16a171d1911586b23978
5
5
  SHA512:
6
- metadata.gz: 498b424873a5b7d2aaefc8f0d4c2990bde82e0219cbccb6cffc039b8549b9370bc696c805e7b6825669b605d25a69fe6ed4319064d0c593b33fbd47ee63730ba
7
- data.tar.gz: 7c08538b13cbe9ab33ef66f9df03721b195825950126868252e49be754d6dd214182c7d7253fae3fb7cdccfd7787d925969522c662ea029cf2ff4d2b3a8bb3c5
6
+ metadata.gz: 06fc0da12f0a5307a310727c11996955dae55a8dc9c17b3686f57f780c4cec8104a6ad66a35b24dce3b4e3be236fbacee5fe39daaa538b7df2f986b2d123442a
7
+ data.tar.gz: 14bd1ade83ce55820c7ced42d4f5ad9724e11421f78bb0972eac7f793cc5828b0319afdd048042bb39a8eb08e07106c99a35606529875e38639a98635f9969fd
data/README.md CHANGED
@@ -44,7 +44,6 @@ Yo can later validate the request by using `authentic?`
44
44
  signer.authentic?(my_request, my_secret) # this will check the signature and the date by default
45
45
  ```
46
46
 
47
-
48
47
  ### Signer options
49
48
 
50
49
  **IMPORTANT** Remember to always configure both the signer-signer and the validator-signer using the same paremeters.
@@ -58,6 +57,23 @@ The following parameters are available when calling `Authograph.signer`:
58
57
  * `date_header`: header key to store date in (`'X-Date'` by default).
59
58
  * `date_max_skew`: maximum difference (in secs) between request time and validaton (`'600'` by default).
60
59
 
60
+ ### Testing (only rspec)
61
+
62
+ Sometimes is useful to stub the signing process on tests.
63
+
64
+ Make sure to include the rspec extensions on your `spec_helper.rb`:
65
+
66
+ ```ruby
67
+ require 'authograph/rspec'
68
+ ```
69
+
70
+ Now you can call the `stub_authograph` inside your tests:
71
+
72
+ ```ruby
73
+ before { stub_authograph(:any, 'mysignature') } }
74
+ before { stub_authograph({ secret: 'my_secret' }, 'mysignature') } # only stub signatures for a given secret (TODO)
75
+ before { stub_authograph({ path: '/my/path' }, 'mysignature') } # only stub signatures for a given path (TODO)
76
+ ```
61
77
 
62
78
  ### Generated signature structure
63
79
 
data/authograph.gemspec CHANGED
@@ -21,9 +21,12 @@ HTTP request signing and validation library with support for header signing and
21
21
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
22
22
  spec.require_paths = ["lib"]
23
23
 
24
- spec.add_development_dependency "bundler", "~> 1.12"
24
+ spec.add_development_dependency "bundler", "~> 2.1"
25
25
  spec.add_development_dependency "rake", "~> 10.0"
26
26
  spec.add_development_dependency "rspec", "~> 3.0"
27
27
  spec.add_development_dependency "guard", "~> 2.14"
28
28
  spec.add_development_dependency "guard-rspec", "~> 4.7"
29
+ spec.add_development_dependency "webmock", "~> 3.3"
30
+ spec.add_development_dependency "faraday", "~> 1.7"
31
+ spec.add_development_dependency "pry"
29
32
  end
@@ -13,15 +13,17 @@ module Authograph::Adapters
13
13
  end
14
14
 
15
15
  def method
16
- @request.method.to_s.upcase
16
+ @request.http_method.to_s.upcase
17
17
  end
18
18
 
19
19
  def path
20
- URI(@request.path).request_uri
20
+ uri = URI(@request.path)
21
+ uri.query = ::Faraday::Utils.build_query(@request.params) unless @request.params.empty?
22
+ uri.request_uri
21
23
  end
22
24
 
23
25
  def content_type
24
- @request.headers['Content-Type'] || ''
26
+ @request.headers['Content-Type'] || 'application/x-www-form-urlencoded'
25
27
  end
26
28
 
27
29
  def body
@@ -25,10 +25,15 @@ module Authograph::Adapters
25
25
  end
26
26
 
27
27
  def body
28
- return '' unless @request.body_stream
29
- data = @request.body_stream.read
30
- @request.body_stream.rewind
31
- data
28
+ if !@request.body_stream.nil?
29
+ data = @request.body_stream.read
30
+ @request.body_stream.rewind
31
+ data
32
+ elsif !@request.body.nil?
33
+ @request.body
34
+ else
35
+ ''
36
+ end
32
37
  end
33
38
  end
34
39
  end
@@ -0,0 +1,31 @@
1
+ module Authograph::Adapters
2
+ class Webmock < Base
3
+ def initialize(_request)
4
+ @request = _request
5
+ end
6
+
7
+ def get_header(_header)
8
+ @request.headers[_header]
9
+ end
10
+
11
+ def set_header(_header, _value)
12
+ raise 'not implemented'
13
+ end
14
+
15
+ def method
16
+ @request.method.to_s.upcase
17
+ end
18
+
19
+ def path
20
+ @request.uri.request_uri
21
+ end
22
+
23
+ def content_type
24
+ get_header('Content-Type') || ''
25
+ end
26
+
27
+ def body
28
+ @request.body
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,27 @@
1
+ module Authograph
2
+ module RSpecHelpers
3
+ def stub_authograph(_matcher, _signature = nil)
4
+ if _signature.nil?
5
+ _signature = _matcher
6
+ _matcher = :any
7
+ end
8
+
9
+ allow_any_instance_of(Authograph::Signer)
10
+ .to receive(:calc_signature)
11
+ .and_wrap_original do |original, request, secret|
12
+ case _matcher
13
+ when :any
14
+ next _signature
15
+ when Hash
16
+ # TODO
17
+ end
18
+
19
+ original.call(request, secret) # fallback to original
20
+ end
21
+ end
22
+ end
23
+ end
24
+
25
+ RSpec.configure do |config|
26
+ config.include Authograph::RSpecHelpers
27
+ end
@@ -87,22 +87,21 @@ module Authograph
87
87
  def build_payload(_request)
88
88
  parts = [
89
89
  _request.method,
90
- _request.path,
91
- _request.content_type || '',
92
- body_md5(_request)
90
+ _request.path
93
91
  ]
94
92
 
93
+ if %w[POST PUT].include?(_request.method)
94
+ parts << _request.content_type || ''
95
+ parts << body_md5(_request)
96
+ end
97
+
95
98
  # extra headers to be considered
96
99
  @sign_headers.each { |h| parts << (_request.get_header(h) || '') }
97
100
  parts.join "\n"
98
101
  end
99
102
 
100
103
  def body_md5(_request)
101
- if %w[POST PUT].include?(_request.method)
102
- Digest::MD5.base64digest _request.body
103
- else
104
- ''
105
- end
104
+ Digest::MD5.base64digest _request.body
106
105
  end
107
106
  end
108
107
  end
@@ -1,3 +1,3 @@
1
1
  module Authograph
2
- VERSION = "1.0.0"
2
+ VERSION = "1.0.4"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: authograph
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ignacio Baixas
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-07-17 00:00:00.000000000 Z
11
+ date: 2021-10-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.12'
19
+ version: '2.1'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.12'
26
+ version: '2.1'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -80,6 +80,48 @@ dependencies:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: '4.7'
83
+ - !ruby/object:Gem::Dependency
84
+ name: webmock
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '3.3'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '3.3'
97
+ - !ruby/object:Gem::Dependency
98
+ name: faraday
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '1.7'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '1.7'
111
+ - !ruby/object:Gem::Dependency
112
+ name: pry
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
83
125
  description: |2
84
126
 
85
127
  HTTP request signing and validation library with support for header signing and multiple backends.
@@ -106,6 +148,8 @@ files:
106
148
  - lib/authograph/adapters/faraday.rb
107
149
  - lib/authograph/adapters/http.rb
108
150
  - lib/authograph/adapters/rack.rb
151
+ - lib/authograph/adapters/webmock.rb
152
+ - lib/authograph/rspec.rb
109
153
  - lib/authograph/signer.rb
110
154
  - lib/authograph/version.rb
111
155
  homepage: https://github.com/SurBTC/authograph
@@ -127,8 +171,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
127
171
  - !ruby/object:Gem::Version
128
172
  version: '0'
129
173
  requirements: []
130
- rubyforge_project:
131
- rubygems_version: 2.6.4
174
+ rubygems_version: 3.0.3
132
175
  signing_key:
133
176
  specification_version: 4
134
177
  summary: Flexible HTTP request HMAC signing and validation