duo_api 1.5.1 → 1.6.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/lib/duo_api/api_client.rb +25 -10
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 3753b5e4577945ac32fcd29df3307e0452382f73399f75823d448d7272d26e60
|
|
4
|
+
data.tar.gz: 76612140f24f72a775157b6e905c971e1d1f203651ad01ee77a26c56fe396d8f
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: e69f9e683ec473edafd2b2e835a351f9258aee5480e2414cce3d0f23a74c824e0f9076c795d2bcccbdd1dcfb44555da067308d17d3468d87e0bdf11b1c15e347
|
|
7
|
+
data.tar.gz: b2922d5baf7d43f8d349478bc11fd5c7d5619a915eec6cf45b2c301448fca527cb2de8f02d59d26e211b87f2d5aa13c0b6d3ab8582a1dfb1f92de4fbf8a376e9
|
data/lib/duo_api/api_client.rb
CHANGED
|
@@ -13,16 +13,19 @@ require 'uri'
|
|
|
13
13
|
#
|
|
14
14
|
class DuoApi
|
|
15
15
|
attr_accessor :ca_file
|
|
16
|
-
attr_reader :default_params
|
|
16
|
+
attr_reader :default_params, :ca_pinning_disabled
|
|
17
17
|
|
|
18
18
|
VERSION = Gem.loaded_specs['duo_api'] ? Gem.loaded_specs['duo_api'].version : '0.0.0'
|
|
19
19
|
|
|
20
|
+
# Version of the bundled CA certificate collection
|
|
21
|
+
CA_BUNDLE_VERSION = '1.0'
|
|
22
|
+
|
|
20
23
|
# Constants for handling rate limit backoff
|
|
21
24
|
MAX_BACKOFF_WAIT_SECS = 32
|
|
22
25
|
INITIAL_BACKOFF_WAIT_SECS = 1
|
|
23
26
|
BACKOFF_FACTOR = 2
|
|
24
27
|
|
|
25
|
-
def initialize(ikey, skey, host, proxy = nil, ca_file: nil, default_params: {})
|
|
28
|
+
def initialize(ikey, skey, host, proxy = nil, ca_file: nil, disable_ca_pinning: false, default_params: {})
|
|
26
29
|
@ikey = ikey
|
|
27
30
|
@skey = skey
|
|
28
31
|
@host = host
|
|
@@ -38,8 +41,15 @@ class DuoApi
|
|
|
38
41
|
proxy_uri.password
|
|
39
42
|
]
|
|
40
43
|
end
|
|
41
|
-
|
|
42
|
-
|
|
44
|
+
|
|
45
|
+
raise ArgumentError, 'Cannot both disable CA pinning and provide a custom CA file' if disable_ca_pinning && ca_file
|
|
46
|
+
|
|
47
|
+
@ca_pinning_disabled = disable_ca_pinning
|
|
48
|
+
@ca_file = if disable_ca_pinning
|
|
49
|
+
nil
|
|
50
|
+
else
|
|
51
|
+
ca_file || File.join(File.dirname(__FILE__), '..', '..', 'ca_certs.pem')
|
|
52
|
+
end
|
|
43
53
|
@default_params = default_params.transform_keys(&:to_sym)
|
|
44
54
|
end
|
|
45
55
|
|
|
@@ -71,7 +81,7 @@ class DuoApi
|
|
|
71
81
|
request = Net::HTTP.const_get(method.capitalize).new(uri.to_s)
|
|
72
82
|
request.basic_auth(@ikey, signed)
|
|
73
83
|
request['Date'] = current_date
|
|
74
|
-
request['User-Agent'] =
|
|
84
|
+
request['User-Agent'] = user_agent
|
|
75
85
|
|
|
76
86
|
# Set Content-Type and request body for JSON requests
|
|
77
87
|
if params_go_in_body
|
|
@@ -80,11 +90,9 @@ class DuoApi
|
|
|
80
90
|
end
|
|
81
91
|
|
|
82
92
|
# Start the HTTP session
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
verify_mode: OpenSSL::SSL::VERIFY_PEER
|
|
87
|
-
) do |http|
|
|
93
|
+
http_opts = { use_ssl: true, verify_mode: OpenSSL::SSL::VERIFY_PEER }
|
|
94
|
+
http_opts[:ca_file] = @ca_file if @ca_file
|
|
95
|
+
Net::HTTP.start(uri.host, uri.port, *@proxy, **http_opts) do |http|
|
|
88
96
|
wait_secs = INITIAL_BACKOFF_WAIT_SECS
|
|
89
97
|
loop do
|
|
90
98
|
resp = http.request(request)
|
|
@@ -101,6 +109,13 @@ class DuoApi
|
|
|
101
109
|
|
|
102
110
|
private
|
|
103
111
|
|
|
112
|
+
# Build the User-Agent string, including the CA bundle version and the
|
|
113
|
+
# current CA pinning state.
|
|
114
|
+
def user_agent
|
|
115
|
+
ca_pinning_state = @ca_pinning_disabled ? 'disabled' : 'enabled'
|
|
116
|
+
"duo_api_ruby/#{VERSION} ca_bundle/#{CA_BUNDLE_VERSION} (ca_pinning=#{ca_pinning_state})"
|
|
117
|
+
end
|
|
118
|
+
|
|
104
119
|
# Encode a key-value pair for a URL
|
|
105
120
|
def encode_key_val(key, val)
|
|
106
121
|
key = ERB::Util.url_encode(key.to_s)
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: duo_api
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.6.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Duo Security
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2026-08-18 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: base64
|