cubits 0.3.1 → 0.4.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: 8949b7a2569642b35ee5fc65b2be3fdbec72e192
4
- data.tar.gz: 111fa99d8f2ffcfb6b8c3f63626a07475e46cd7b
3
+ metadata.gz: 3e681c887f584d39661aeadad10c1e297abad0ab
4
+ data.tar.gz: 1cc90230a6bfae073d6ec6ba23a314fcf518f4f6
5
5
  SHA512:
6
- metadata.gz: b73fc2b6b9397db6af35561893e82fa3b36a61db81f97b5240554fa639bef7ecf0d80f9c653623090f00ec0adbcaa03330205e6f295bbfc57630672a21e595cc
7
- data.tar.gz: 7a4bed20e2d5cd036aa654e154bbcbfccd1c579c99651ce4e58a0f625db478aaeb5e4c5c55305db00cdac6b3b9fc1e31ff54f22245cef8ccf82de0268686ef9a
6
+ metadata.gz: ef1a5b930c12ab8dc276eeb8a56552c2a616fd88f773b1d0711cb2318d1a4ff496d1ea4b9a8d63c759a7241a61b582b2354c184f13305b40181ebb4d2b53323d
7
+ data.tar.gz: acc7922ad9ed67ccba6a1c5525cc0459525dc75a8c7531a07b62032d4893063bfcba361e3f4c38b862ab396b14a39bb609eb966fcccb39f665015d3ebb7cd75b
data/CHANGES.md CHANGED
@@ -1,3 +1,7 @@
1
+ # 0.4.0
2
+
3
+ Enforcing strict server SSL certificate checks, to prevent MitM attacks
4
+
1
5
  # 0.3.1
2
6
 
3
7
  Changed API base URL to: https://api.cubits.com/
data/README.md CHANGED
@@ -58,7 +58,7 @@ invoice.address # => "3QJmV3qfvL9SuYo34YihAf3sRCW3qSinyC"
58
58
 
59
59
  Creates a new invoice.
60
60
 
61
- For a list of accepted and returned parameters, see the `POST /api/v1/invoices` page in the [Cubits Help Center](https://cubits.com/help) Developer's section.
61
+ For a list of accepted and returned parameters, see the `POST /api/v1/invoices` page in the [Cubits Help Center](https://cubits.com) Developer's section.
62
62
 
63
63
 
64
64
  ```ruby
data/cubits.gemspec CHANGED
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ['lib']
20
20
 
21
- spec.add_dependency 'http', '~> 0.7'
21
+ spec.add_dependency 'http', '~> 0.7', '>= 0.7.3'
22
22
  spec.add_dependency 'hashie', '~> 3.3'
23
23
 
24
24
  spec.add_development_dependency 'bundler', '~> 1.7'
@@ -19,6 +19,7 @@ module Cubits
19
19
  fail ArgumentError, 'String is expected as :secret' unless params[:secret].is_a?(String)
20
20
  @key = params[:key]
21
21
  @secret = params[:secret]
22
+ @params = params.dup
22
23
  end
23
24
 
24
25
  # Executes a GET request
@@ -42,12 +43,17 @@ module Cubits
42
43
  # Sends a request to the API
43
44
  #
44
45
  def request(method, path, encoded_data)
46
+ Cubits.logger.warn 'Connecting to Cubits using insecure connection!' if insecure?
45
47
  url = URI.join(Cubits.base_url, path)
46
- url.query = encoded_data if method == :get && !encoded_data.empty?
47
48
  params = {}
48
49
  http = HTTP.with(cubits_headers(path, encoded_data))
49
- http = http.with('Content-Type' => CONTENT_TYPE) unless method == :get
50
- params[:body] = encoded_data unless method == :get
50
+ if method == :get
51
+ url.query = encoded_data unless encoded_data.empty?
52
+ else
53
+ http = http.with('Content-Type' => CONTENT_TYPE)
54
+ params[:body] = encoded_data
55
+ end
56
+ params[:ssl_context] = ssl_context unless insecure?
51
57
  Cubits.logger.debug "> #{method.to_s.upcase}: #{url}"
52
58
  response = http.send(method, url, params)
53
59
  Cubits.logger.debug "< #{response.code} #{response.reason}"
@@ -118,5 +124,23 @@ module Cubits
118
124
  "path=#{path} nonce=#{nonce} request_data=#{request_data} msg=#{msg} signature=#{signature}"
119
125
  signature
120
126
  end
127
+
128
+ # Returns configured SSLContext
129
+ #
130
+ def ssl_context
131
+ return @ssl_context if @ssl_context
132
+ @ssl_context = OpenSSL::SSL::SSLContext.new
133
+ @ssl_context.verify_mode = OpenSSL::SSL::VERIFY_PEER
134
+ cert_store = OpenSSL::X509::Store.new
135
+ cert_store.set_default_paths
136
+ @ssl_context.cert_store = cert_store
137
+ @ssl_context
138
+ end
139
+
140
+ # Returns true if an insecure connection is requested (do NOT use in production)
141
+ #
142
+ def insecure?
143
+ @insecure ||= @params[:insecure] || Cubits.base_url.scheme != 'https'
144
+ end
121
145
  end # class Connection
122
146
  end # module Cubits
@@ -8,7 +8,8 @@ module Cubits
8
8
  Cubits.connection.get('/api/v1/test', foo: 'bar')
9
9
  Cubits.connection.post('/api/v1/test', foo: 'bar')
10
10
  true
11
- rescue StandardError
11
+ rescue StandardError => e
12
+ Cubits.logger.error "Test connection to Cubits failed: #{e}"
12
13
  false
13
14
  end
14
15
 
@@ -1,3 +1,3 @@
1
1
  module Cubits
2
- VERSION = '0.3.1'
2
+ VERSION = '0.4.0'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cubits
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex Kukushkin
@@ -17,6 +17,9 @@ dependencies:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0.7'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 0.7.3
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
@@ -24,6 +27,9 @@ dependencies:
24
27
  - - "~>"
25
28
  - !ruby/object:Gem::Version
26
29
  version: '0.7'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 0.7.3
27
33
  - !ruby/object:Gem::Dependency
28
34
  name: hashie
29
35
  requirement: !ruby/object:Gem::Requirement