xsr 1.3.0 → 1.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 +4 -4
- data/README.md +21 -0
- data/lib/xsr/client.rb +10 -1
- data/makefile +4 -0
- data/test/client_ssl_test.rb +36 -0
- data/test/client_test.rb +1 -7
- data/xsr.gemspec +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f9e3370abd455ea33763b68734c67f393baabda3
|
4
|
+
data.tar.gz: 9c67710ee1481d692ace115a269483b7f66c141c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c4caf181848332499d1ccbc4284171fb8de9393c5fb4ba5f48b45d9e683cad1944a34aa514ffa2b1ff46a72837a786e5ebe4547e5232b5a326cee4ce0d5d8627
|
7
|
+
data.tar.gz: a5cb61cad99572cdf0cfffdb65a299d3cf37365ace9e93f4be880971193d4acffcacbb7179a4919d67ee5f9f5639fbfc2fdb2b3ec854b9e9c773bffd6ec236b6
|
data/README.md
CHANGED
@@ -97,6 +97,12 @@ resp.success?
|
|
97
97
|
#=> Response status code is 2xx
|
98
98
|
|
99
99
|
resp.bad_request?
|
100
|
+
#=> Response status code is 400
|
101
|
+
|
102
|
+
resp.unauthorized?
|
103
|
+
#=> Response status code is 401
|
104
|
+
|
105
|
+
resp.forbidden?
|
100
106
|
#=> Response status code is 403
|
101
107
|
|
102
108
|
resp.not_found?
|
@@ -112,6 +118,21 @@ resp.http_response
|
|
112
118
|
#-> Call http_response to get full Net::HTTPResponse object
|
113
119
|
```
|
114
120
|
|
121
|
+
### SSL considerations
|
122
|
+
By default, XSR verifies the SSL certificate for the requested server.
|
123
|
+
|
124
|
+
To use a custom CA Root certificate set ```ca_file```
|
125
|
+
```
|
126
|
+
client = XSR::Client.new(ca_file: '/path/to/my_custom.pem')
|
127
|
+
client.get('https://api.something.io/get')
|
128
|
+
```
|
129
|
+
|
130
|
+
In case you want to skip this verfication, set ```skip_cert_check```:
|
131
|
+
```
|
132
|
+
client = XSR::Client.new(skip_cert_check: true)
|
133
|
+
client.get('https://api.something.io/get')
|
134
|
+
```
|
135
|
+
|
115
136
|
##What's next?
|
116
137
|
I'm not planning to add more features right now, but feel free to fork this repo and add any extra functionality you consider that should be included. Please, submit a PR with proposed changes or fixes.
|
117
138
|
Just keep in mind a minimalist paradigm (https://youtu.be/tXVr2E1vfmk).
|
data/lib/xsr/client.rb
CHANGED
@@ -3,10 +3,14 @@ module XSR
|
|
3
3
|
class Client
|
4
4
|
attr_accessor :base_url
|
5
5
|
attr_accessor :default_header
|
6
|
+
attr_accessor :skip_cert_check
|
7
|
+
attr_accessor :ca_file
|
6
8
|
|
7
9
|
def initialize(options = {})
|
8
10
|
@base_url = options[:base_url]
|
9
11
|
@base_header = options[:header]
|
12
|
+
@skip_cert_check = options[:skip_cert_check]
|
13
|
+
@ca_file = options[:ca_file]
|
10
14
|
end
|
11
15
|
|
12
16
|
def post(path, options = {})
|
@@ -46,7 +50,12 @@ module XSR
|
|
46
50
|
|
47
51
|
if uri.scheme == 'https' # Requires SSL?
|
48
52
|
http_session.use_ssl = true
|
49
|
-
|
53
|
+
if @skip_cert_check || options[:skip_cert_check]
|
54
|
+
http_session.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
55
|
+
else
|
56
|
+
http_session.ca_file = @ca_file || options[:ca_file]
|
57
|
+
http_session.verify_mode = OpenSSL::SSL::VERIFY_PEER
|
58
|
+
end
|
50
59
|
end
|
51
60
|
|
52
61
|
XSR::Response.new http_session.start { |http| http.request(req) }
|
data/makefile
CHANGED
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'xsr'
|
2
|
+
require_relative 'helper'
|
3
|
+
|
4
|
+
# Tests for SSL requests
|
5
|
+
module ClientSSLTest
|
6
|
+
prepare do
|
7
|
+
@client = XSR::Client.new(base_url: 'https://httpbin.org')
|
8
|
+
end
|
9
|
+
|
10
|
+
test 'https request' do
|
11
|
+
resp = @client.get('/get')
|
12
|
+
|
13
|
+
assert resp.http_response.instance_of?(Net::HTTPOK)
|
14
|
+
end
|
15
|
+
|
16
|
+
test 'https request skipping certificate verification' do
|
17
|
+
resp = @client.get('/get', skip_cert_check: true)
|
18
|
+
|
19
|
+
assert resp.http_response.instance_of?(Net::HTTPOK)
|
20
|
+
end
|
21
|
+
|
22
|
+
test 'client skip certificate verification' do
|
23
|
+
client = XSR::Client.new(base_url: 'https://httpbin.org', skip_cert_check: true)
|
24
|
+
resp = client.get('/get')
|
25
|
+
|
26
|
+
assert resp.http_response.instance_of?(Net::HTTPOK)
|
27
|
+
end
|
28
|
+
|
29
|
+
test 'set custom invalid ca pem' do
|
30
|
+
@client.ca_file = 'does_not_exist.pem'
|
31
|
+
|
32
|
+
assert_raise(OpenSSL::SSL::SSLError) do
|
33
|
+
@client.get('/get')
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
data/test/client_test.rb
CHANGED
@@ -52,7 +52,7 @@ module ClientTest
|
|
52
52
|
|
53
53
|
test 'default headers are passed to request' do
|
54
54
|
h = { 'Some-Header' => 'some_value' }
|
55
|
-
resp = XSR::Client.new(header: h).get('
|
55
|
+
resp = XSR::Client.new(header: h).get('http://httpbin.org/headers')
|
56
56
|
|
57
57
|
assert resp.http_response.instance_of?(Net::HTTPOK)
|
58
58
|
|
@@ -69,10 +69,4 @@ module ClientTest
|
|
69
69
|
argument = MultiJson.load(resp.http_response.body)['args']['some_arg']
|
70
70
|
assert_equal argument, 'some_value'
|
71
71
|
end
|
72
|
-
|
73
|
-
test 'https request' do
|
74
|
-
resp = XSR::Client.new.get('https://httpbin.org/get')
|
75
|
-
|
76
|
-
assert resp.http_response.instance_of?(Net::HTTPOK)
|
77
|
-
end
|
78
72
|
end
|
data/xsr.gemspec
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: xsr
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- matiasow
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-05-
|
11
|
+
date: 2015-05-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: multi_json
|
@@ -65,6 +65,7 @@ files:
|
|
65
65
|
- lib/xsr/client.rb
|
66
66
|
- lib/xsr/response.rb
|
67
67
|
- makefile
|
68
|
+
- test/client_ssl_test.rb
|
68
69
|
- test/client_test.rb
|
69
70
|
- test/helper.rb
|
70
71
|
- test/response_test.rb
|