global_sign 1.0.0 → 2.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +25 -0
  3. data/README.md +100 -2
  4. data/global_sign.gemspec +3 -3
  5. data/lib/global_sign.rb +16 -0
  6. data/lib/global_sign/approver_info.rb +15 -0
  7. data/lib/global_sign/authorized_signer_info.rb +14 -0
  8. data/lib/global_sign/client.rb +16 -1
  9. data/lib/global_sign/csr_decoder.rb +2 -0
  10. data/lib/global_sign/csr_decoder/request.rb +29 -0
  11. data/lib/global_sign/csr_decoder/response.rb +36 -0
  12. data/lib/global_sign/dns_verification.rb +2 -0
  13. data/lib/global_sign/dns_verification/request.rb +55 -0
  14. data/lib/global_sign/dns_verification/response.rb +29 -0
  15. data/lib/global_sign/dns_verification_for_issue.rb +2 -0
  16. data/lib/global_sign/dns_verification_for_issue/request.rb +29 -0
  17. data/lib/global_sign/dns_verification_for_issue/response.rb +53 -0
  18. data/lib/global_sign/dv_approver_list.rb +2 -0
  19. data/lib/global_sign/dv_approver_list/request.rb +27 -0
  20. data/lib/global_sign/dv_approver_list/response.rb +33 -0
  21. data/lib/global_sign/dv_order.rb +2 -0
  22. data/lib/global_sign/dv_order/request.rb +72 -0
  23. data/lib/global_sign/dv_order/response.rb +19 -0
  24. data/lib/global_sign/ev_order.rb +2 -0
  25. data/lib/global_sign/ev_order/request.rb +132 -0
  26. data/lib/global_sign/ev_order/response.rb +19 -0
  27. data/lib/global_sign/jurisdiction_info.rb +12 -0
  28. data/lib/global_sign/order_getter_by_order_id/request.rb +11 -2
  29. data/lib/global_sign/order_getter_by_order_id/response.rb +52 -1
  30. data/lib/global_sign/organization_address.rb +17 -0
  31. data/lib/global_sign/organization_info.rb +26 -0
  32. data/lib/global_sign/organization_info/credit_agency.rb +8 -0
  33. data/lib/global_sign/organization_info_ev.rb +28 -0
  34. data/lib/global_sign/organization_info_ev/business_category_code.rb +9 -0
  35. data/lib/global_sign/ov_order.rb +2 -0
  36. data/lib/global_sign/ov_order/request.rb +79 -0
  37. data/lib/global_sign/ov_order/response.rb +19 -0
  38. data/lib/global_sign/requestor_info.rb +15 -0
  39. data/lib/global_sign/response.rb +11 -8
  40. data/lib/global_sign/url_verification/request.rb +3 -2
  41. data/lib/global_sign/url_verification/response.rb +4 -0
  42. data/lib/global_sign/url_verification_for_issue/response.rb +4 -0
  43. data/lib/global_sign/version.rb +1 -1
  44. metadata +45 -17
  45. data/CHANGELOG.md +0 -4
  46. data/wercker.yml +0 -16
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 84af7ff572f96ab29ffd4afe338dc508162d7f52
4
- data.tar.gz: c4dfa41c3d53f261631d92827e76bc0c74fb514f
2
+ SHA256:
3
+ metadata.gz: adff6a919745a77e1100fe13c7e40a5f2b39bd754fc12748b3146c4a6bb44dc9
4
+ data.tar.gz: ab6a1be53ba7da8d9f0f40004b908d3e25731a32d5b2dff5ac2f89fd91b511bb
5
5
  SHA512:
6
- metadata.gz: 13a1d366b9c0f6ebac2db39fbb4c440eb72c35c8d28de7fb6c7ed98e0d7d0d54082f2eb04d0604a477d647622c40e63b1b6eb6265fc7bad86cc2272f1a92d604
7
- data.tar.gz: 2295e6dab6536d59d6fba5200398364ded71eb10d26c7d2c2a875ec6e19b73e5e1d8d75faae81fe07f0be54e366c928d138ffd3b0626f922c925eed7a2e19628
6
+ metadata.gz: ba107322e6fdc9b33b031dc3b1c1613e251ce95536901bf94454f8a476da5391e8c13457b7f5cdf945015ef957597d6882cba056085c4e593119ea09add1667a
7
+ data.tar.gz: 1109ff5ea85ee7af0986e24c522071df1397afd5697818454a91fa537af84ae06edc1d8d37c557b8ea0e91defc76e858dc19e95941320fe8bdb2f1ff9f3f1bd6
data/CHANGELOG.md ADDED
@@ -0,0 +1,25 @@
1
+ ## 2.3.0
2
+ - Support GlobalSign API: EVOrder
3
+
4
+ ## 2.2.0
5
+
6
+ - Added `options` optional keyword argument to `GlobalSign::Client`
7
+ - It supports `timeout` which specifies number of seconds to wait for request
8
+
9
+ ## 2.1.1
10
+ - Fixed bug: `GlobalSign::OrderGetterByOrderId::Request` NoMethodError: undefined method `text` for nil:NilClass
11
+
12
+ ## 2.1.0
13
+
14
+ - Support GlobalSign API: DecodeCSR
15
+ - Support GlobalSign API: DVDNSOrder & DVDNSVerificationForIssue
16
+ - Added `options` optional keyword argument to `GlobalSign::OrderGetterByOrderId::Request` for getting certificate info and fulfillment
17
+
18
+ ## 2.0.0
19
+
20
+ - Added `product_code` required keyword argument to `GlobalSign::UrlVerification::Request` for selecting SSL certificate type
21
+
22
+ ## 1.0.0
23
+
24
+ - Support GlobalSign API: URLVerification & URLVerificationForIssue
25
+ - Support GlobalSign API: GetOrderByOrderID
data/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  # GlobalSign
2
2
 
3
- [![wercker status](https://app.wercker.com/status/8cf8771f0da8bc4f1ea0adc8eb65b295/s/master "wercker status")](https://app.wercker.com/project/byKey/8cf8771f0da8bc4f1ea0adc8eb65b295)
3
+ [![Gem Version](https://badge.fury.io/rb/global_sign.svg)](https://badge.fury.io/rb/global_sign)
4
+ ![CI](https://github.com/pepabo/global_sign/workflows/CI/badge.svg?branch=master)
4
5
 
5
6
  A Ruby interface to the [GlobalSign](https://www.globalsign.com/) API.
6
7
 
@@ -62,6 +63,7 @@ contract = GlobalSign::Contract.new(
62
63
  )
63
64
 
64
65
  request = GlobalSign::UrlVerification::Request.new(
66
+ product_code: 'DV_LOW_URL', # 'DV_HIGH_URL' or 'DV_LOW_URL'
65
67
  order_kind: 'new', # If you request a new certificate
66
68
  validity_period_months: 6,
67
69
  csr: csr,
@@ -90,6 +92,7 @@ end
90
92
 
91
93
  # Not need to give the argument 'contract_info'
92
94
  request = GlobalSign::UrlVerification::Request.new(
95
+ product_code: 'DV_LOW_URL',
93
96
  order_kind: 'new',
94
97
  validity_period_months: 6,
95
98
  csr: csr,
@@ -101,6 +104,7 @@ And you should give the argument `renewal_target_order_id` .
101
104
 
102
105
  ```ruby
103
106
  request = GlobalSign::UrlVerification::Request.new(
107
+ product_code: 'DV_LOW_URL',
104
108
  order_kind: 'renewal',
105
109
  validity_period_months: 6,
106
110
  csr: csr,
@@ -109,6 +113,31 @@ request = GlobalSign::UrlVerification::Request.new(
109
113
  )
110
114
  ```
111
115
 
116
+ ### DNS Verification
117
+
118
+ Verification flow is the same as URL Verification. Request class use the following:
119
+
120
+ ```ruby
121
+ client = GlobalSign::Client.new
122
+
123
+ request = GlobalSign::DnsVerification::Request.new(
124
+ product_code: 'DV_LOW_DNS',
125
+ order_kind: 'new',
126
+ validity_period_months: 6,
127
+ csr: csr,
128
+ contract_info: contract,
129
+ )
130
+
131
+ response = client.process(request)
132
+
133
+ if response.success?
134
+ puts "Successfully DNS Verification"
135
+ puts response.params # => { dns_txt: "xxxxx", verification_fqdn_list: ['example.com', 'www.example.com'], ... }
136
+ else
137
+ raise StandardError, "#{response.error_code}: #{response.error_message}"
138
+ end
139
+ ```
140
+
112
141
  ### URL Verification for Issue
113
142
 
114
143
  ```ruby
@@ -135,10 +164,36 @@ else
135
164
  end
136
165
  ```
137
166
 
167
+ ### DNS Verification for Issue
168
+
169
+ ```ruby
170
+ client = GlobalSign::Client.new
171
+
172
+ # You can use ApproverFQDN value such as:
173
+ # - www.example.com
174
+ # - example.com
175
+
176
+ request = GlobalSign::UrlVerificationForIssue::Request.new(
177
+ order_id: 'xxxx123456789',
178
+ approver_fqdn: 'www.example.com',
179
+ )
180
+
181
+ response = client.process(request)
182
+
183
+ if response.success?
184
+ puts "Successfully DNS Verification for Issue"
185
+ puts response.params # => { fulfillment: { ca_certificates: [{ ca_cert: "xxxxx" }, ...]}, ... }
186
+ else
187
+ raise StandardError, "#{response.error_code}: #{response.error_message}"
188
+ end
189
+ ```
190
+
138
191
  ### Get Order by OrderID
139
192
 
140
193
  ```ruby
141
- request = GlobalSign::OrderGetterByOrderId::Request.new(order_id: 'xxxx123456789')
194
+ request = GlobalSign::OrderGetterByOrderId::Request.new(
195
+ order_id: 'xxxx123456789'
196
+ )
142
197
  response = client.process(request)
143
198
 
144
199
  puts response.params # => { order_id: "xxxx123456789", order_status: "2", ... }
@@ -147,6 +202,49 @@ puts response.params # => { order_id: "xxxx123456789", order_status: "2", ... }
147
202
  puts response.order_status_text # => "phishing_checking"
148
203
  ```
149
204
 
205
+ You can specify request options.
206
+
207
+ ```ruby
208
+ # certificate_info option
209
+ request = GlobalSign::OrderGetterByOrderId::Request.new(
210
+ order_id: 'xxxx123456789',
211
+ options: { certificate_info: true }
212
+ )
213
+ response = client.process(request)
214
+
215
+ puts response.params[:certificate_info] # => { certificate_status: '4', start_date: '2016-10-06T14:53:23.000+09:00', ... }
216
+
217
+ # fulfillment option
218
+ request = GlobalSign::OrderGetterByOrderId::Request.new(
219
+ order_id: 'xxxx123456789',
220
+ options: { fulfillment: true }
221
+ )
222
+ response = client.process(request)
223
+
224
+ puts response.params[:fulfillment] # => { ca_certificates: [{ ca_cert: "xxxxx" }, ...]}
225
+ ```
226
+
227
+ ### Decode CSR
228
+
229
+ ```ruby
230
+ request = GlobalSign::CsrDecoder::Request.new(
231
+ product_type: 'DV_LOW',
232
+ csr: csr
233
+ )
234
+ response = client.process(request)
235
+
236
+ puts response.params # => { common_name: "www.example.com", ... }
237
+ ```
238
+
239
+ ### Client options
240
+
241
+ `GlobalSign::Client` allows `options` argument in order to specify its behavior.
242
+ For now, it supports `timeout` which specifies number of seconds to wait for request.
243
+
244
+ ```ruby
245
+ client = GlobalSign::Client.new(options: { timeout: 120 })
246
+ ```
247
+
150
248
  ## Contributing
151
249
 
152
250
  1. Create your feature branch (git checkout -b my-new-feature)
data/global_sign.gemspec CHANGED
@@ -15,7 +15,7 @@ Gem::Specification.new do |spec|
15
15
  spec.license = 'MIT'
16
16
 
17
17
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
18
- f.match(%r{^(test|spec|features)/})
18
+ f.match(%r{^(.github|test|spec|features)/})
19
19
  end
20
20
  spec.bindir = 'exe'
21
21
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
@@ -26,8 +26,8 @@ Gem::Specification.new do |spec|
26
26
  spec.add_runtime_dependency 'faraday'
27
27
  spec.add_runtime_dependency 'nokogiri'
28
28
 
29
- spec.add_development_dependency 'bundler', '~> 1.13'
30
- spec.add_development_dependency 'rake', '~> 10.0'
29
+ spec.add_development_dependency 'bundler'
30
+ spec.add_development_dependency 'rake'
31
31
  spec.add_development_dependency 'rspec'
32
32
  spec.add_development_dependency 'webmock'
33
33
  spec.add_development_dependency 'vcr'
data/lib/global_sign.rb CHANGED
@@ -3,6 +3,15 @@ require 'active_support/core_ext/hash/conversions'
3
3
  require 'global_sign/version'
4
4
  require 'global_sign/client'
5
5
  require 'global_sign/contract'
6
+ require 'global_sign/organization_address'
7
+ require 'global_sign/organization_info'
8
+ require 'global_sign/organization_info/credit_agency'
9
+ require 'global_sign/organization_info_ev'
10
+ require 'global_sign/organization_info_ev/business_category_code'
11
+ require 'global_sign/requestor_info'
12
+ require 'global_sign/approver_info'
13
+ require 'global_sign/authorized_signer_info'
14
+ require 'global_sign/jurisdiction_info'
6
15
  require 'global_sign/request_xml_builder'
7
16
  require 'global_sign/request'
8
17
  require 'global_sign/response'
@@ -11,6 +20,13 @@ require 'global_sign/order_status'
11
20
  require 'global_sign/url_verification'
12
21
  require 'global_sign/url_verification_for_issue'
13
22
  require 'global_sign/order_getter_by_order_id'
23
+ require 'global_sign/csr_decoder'
24
+ require 'global_sign/dns_verification'
25
+ require 'global_sign/dns_verification_for_issue'
26
+ require 'global_sign/dv_approver_list'
27
+ require 'global_sign/dv_order'
28
+ require 'global_sign/ov_order'
29
+ require 'global_sign/ev_order'
14
30
 
15
31
  module GlobalSign
16
32
  class << self
@@ -0,0 +1,15 @@
1
+ module GlobalSign
2
+ class ApproverInfo
3
+ attr_accessor :first_name, :last_name, :function, :organization_name, :organization_unit, :phone_number, :email
4
+
5
+ def initialize(first_name:, last_name:, function: nil, organization_name:, organization_unit: nil, phone_number:, email:)
6
+ @first_name = first_name
7
+ @last_name = last_name
8
+ @function = function
9
+ @organization_name = organization_name
10
+ @organization_unit = organization_unit
11
+ @phone_number = phone_number
12
+ @email = email
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,14 @@
1
+ module GlobalSign
2
+ class AuthorizedSignerInfo
3
+ attr_accessor :first_name, :last_name, :function, :organization_name, :phone_number, :email
4
+
5
+ def initialize(first_name:, last_name:, function: nil, organization_name:, phone_number:, email:)
6
+ @first_name = first_name
7
+ @last_name = last_name
8
+ @function = function
9
+ @organization_name = organization_name
10
+ @phone_number = phone_number
11
+ @email = email
12
+ end
13
+ end
14
+ end
@@ -2,12 +2,13 @@ require 'faraday'
2
2
 
3
3
  module GlobalSign
4
4
  class Client
5
- def initialize
5
+ def initialize(options: {})
6
6
  @configuration = GlobalSign.configuration
7
7
 
8
8
  @connection = Faraday::Connection.new(url: @configuration.endpoint) do |conn|
9
9
  conn.request :url_encoded
10
10
  conn.adapter Faraday.default_adapter
11
+ conn.options[:timeout] = options[:timeout] if options[:timeout].present?
11
12
  end
12
13
  end
13
14
 
@@ -25,12 +26,26 @@ module GlobalSign
25
26
 
26
27
  def find_response_class_for(request)
27
28
  case request
29
+ when GlobalSign::CsrDecoder::Request
30
+ GlobalSign::CsrDecoder::Response
31
+ when GlobalSign::DnsVerification::Request
32
+ GlobalSign::DnsVerification::Response
33
+ when GlobalSign::DnsVerificationForIssue::Request
34
+ GlobalSign::DnsVerificationForIssue::Response
28
35
  when GlobalSign::UrlVerification::Request
29
36
  GlobalSign::UrlVerification::Response
30
37
  when GlobalSign::UrlVerificationForIssue::Request
31
38
  GlobalSign::UrlVerificationForIssue::Response
32
39
  when GlobalSign::OrderGetterByOrderId::Request
33
40
  GlobalSign::OrderGetterByOrderId::Response
41
+ when GlobalSign::DVApproverList::Request
42
+ GlobalSign::DVApproverList::Response
43
+ when GlobalSign::DVOrder::Request
44
+ GlobalSign::DVOrder::Response
45
+ when GlobalSign::OVOrder::Request
46
+ GlobalSign::OVOrder::Response
47
+ when GlobalSign::EVOrder::Request
48
+ GlobalSign::EVOrder::Response
34
49
  else
35
50
  raise ArgumentError, 'invalid request argument'
36
51
  end
@@ -0,0 +1,2 @@
1
+ require 'global_sign/csr_decoder/request'
2
+ require 'global_sign/csr_decoder/response'
@@ -0,0 +1,29 @@
1
+ module GlobalSign
2
+ module CsrDecoder
3
+ class Request < GlobalSign::Request
4
+ def initialize(csr:, product_type:)
5
+ @csr = csr
6
+ @product_type = product_type
7
+ end
8
+
9
+ def path
10
+ 'GASService'
11
+ end
12
+
13
+ def action
14
+ 'DecodeCSR'
15
+ end
16
+
17
+ def request_header
18
+ :QueryRequestHeader
19
+ end
20
+
21
+ def params
22
+ {
23
+ CSR: @csr,
24
+ ProductType: @product_type
25
+ }
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,36 @@
1
+ module GlobalSign
2
+ module CsrDecoder
3
+ class Response < GlobalSign::Response
4
+ module XPath
5
+ CSRData = '//Response/CSRData'
6
+ CertificatePreview = '//Response/CertificatePreview'
7
+ end
8
+
9
+ def response_header
10
+ :QueryResponseHeader
11
+ end
12
+
13
+ def params
14
+ @params ||= {
15
+ csr_data: detail(@xml.xpath(XPath::CSRData)),
16
+ certificate_preview: detail(@xml.xpath(XPath::CertificatePreview))
17
+ }
18
+ end
19
+
20
+ private
21
+
22
+ def detail(data)
23
+ {
24
+ common_name: data.at('CommonName').try(:text) || '',
25
+ organization: data.at('Organization').try(:text) || '',
26
+ organization_unit: data.at('Organization').try(:text) || '',
27
+ locality: data.at('Locality').try(:text) || '',
28
+ state: data.at('State').try(:text) || '',
29
+ country: data.at('Country').try(:text) || '',
30
+ email_address: data.at('EmailAddress').try(:text) || '',
31
+ key_length: data.at('KeyLength').try(:text) || ''
32
+ }
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,2 @@
1
+ require 'global_sign/dns_verification/request'
2
+ require 'global_sign/dns_verification/response'
@@ -0,0 +1,55 @@
1
+ module GlobalSign
2
+ module DnsVerification
3
+ class Request < GlobalSign::UrlVerification::Request
4
+ def initialize(product_code:, order_kind:, validity_period_months:, csr:, renewal_target_order_id: nil, contract_info: nil)
5
+ @product_code = product_code
6
+ @order_kind = order_kind
7
+ @validity_period_months = validity_period_months
8
+ @csr = csr
9
+ @renewal_target_order_id = renewal_target_order_id
10
+ @contract_info = contract_info || GlobalSign.contract
11
+ end
12
+
13
+ def path
14
+ 'ServerSSLService'
15
+ end
16
+
17
+ def action
18
+ 'DVDNSOrder'
19
+ end
20
+
21
+ def request_header
22
+ :OrderRequestHeader
23
+ end
24
+
25
+ def params
26
+ _params = {
27
+ OrderRequestParameter: {
28
+ ProductCode: @product_code,
29
+ OrderKind: @order_kind,
30
+ Licenses: 1,
31
+ ValidityPeriod: {
32
+ Months: @validity_period_months
33
+ },
34
+ CSR: @csr,
35
+ },
36
+ ContactInfo: {
37
+ FirstName: @contract_info.first_name,
38
+ LastName: @contract_info.last_name,
39
+ Phone: @contract_info.phone_number,
40
+ Email: @contract_info.email
41
+ }
42
+ }
43
+
44
+ # require `RenewalTargetOrderID` to request a renewal certificate
45
+ if @order_kind == 'renewal'
46
+ _params[:OrderRequestParameter].merge!(
47
+ { RenewalTargetOrderID: @renewal_target_order_id }
48
+ )
49
+ end
50
+
51
+ _params
52
+ end
53
+ end
54
+ end
55
+ end