global_sign 1.0.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 +7 -0
- data/.env.sample +2 -0
- data/.gitignore +11 -0
- data/.rspec +2 -0
- data/CHANGELOG.md +4 -0
- data/Gemfile +4 -0
- data/LICENSE +19 -0
- data/README.md +161 -0
- data/Rakefile +2 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/global_sign.gemspec +36 -0
- data/lib/global_sign/client.rb +39 -0
- data/lib/global_sign/contract.rb +12 -0
- data/lib/global_sign/order_getter_by_order_id/request.rb +25 -0
- data/lib/global_sign/order_getter_by_order_id/response.rb +34 -0
- data/lib/global_sign/order_getter_by_order_id.rb +2 -0
- data/lib/global_sign/order_status.rb +13 -0
- data/lib/global_sign/request.rb +23 -0
- data/lib/global_sign/request_xml_builder.rb +41 -0
- data/lib/global_sign/response.rb +47 -0
- data/lib/global_sign/url_verification/request.rb +54 -0
- data/lib/global_sign/url_verification/response.rb +25 -0
- data/lib/global_sign/url_verification.rb +2 -0
- data/lib/global_sign/url_verification_for_issue/request.rb +29 -0
- data/lib/global_sign/url_verification_for_issue/response.rb +49 -0
- data/lib/global_sign/url_verification_for_issue.rb +2 -0
- data/lib/global_sign/version.rb +3 -0
- data/lib/global_sign.rb +34 -0
- data/wercker.yml +16 -0
- metadata +227 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 84af7ff572f96ab29ffd4afe338dc508162d7f52
|
4
|
+
data.tar.gz: c4dfa41c3d53f261631d92827e76bc0c74fb514f
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 13a1d366b9c0f6ebac2db39fbb4c440eb72c35c8d28de7fb6c7ed98e0d7d0d54082f2eb04d0604a477d647622c40e63b1b6eb6265fc7bad86cc2272f1a92d604
|
7
|
+
data.tar.gz: 2295e6dab6536d59d6fba5200398364ded71eb10d26c7d2c2a875ec6e19b73e5e1d8d75faae81fe07f0be54e366c928d138ffd3b0626f922c925eed7a2e19628
|
data/.env.sample
ADDED
data/.gitignore
ADDED
data/.rspec
ADDED
data/CHANGELOG.md
ADDED
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
Copyright (c) 2016- GMO Pepabo, Inc.
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
of this software and associated documentation files (the "Software"), to deal
|
5
|
+
in the Software without restriction, including without limitation the rights
|
6
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
+
copies of the Software, and to permit persons to whom the Software is
|
8
|
+
furnished to do so, subject to the following conditions:
|
9
|
+
|
10
|
+
The above copyright notice and this permission notice shall be included in
|
11
|
+
all copies or substantial portions of the Software.
|
12
|
+
|
13
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
+
THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,161 @@
|
|
1
|
+
# GlobalSign
|
2
|
+
|
3
|
+
[](https://app.wercker.com/project/byKey/8cf8771f0da8bc4f1ea0adc8eb65b295)
|
4
|
+
|
5
|
+
A Ruby interface to the [GlobalSign](https://www.globalsign.com/) API.
|
6
|
+
|
7
|
+
For more information and detailed documentation about the API visit [this page](https://www.globalsign.com/en/resources/apis/api-documentation/) .
|
8
|
+
|
9
|
+
## Installation
|
10
|
+
|
11
|
+
Add this line to your application's Gemfile:
|
12
|
+
|
13
|
+
```ruby
|
14
|
+
gem 'global_sign'
|
15
|
+
```
|
16
|
+
|
17
|
+
And then execute:
|
18
|
+
|
19
|
+
```
|
20
|
+
$ bundle
|
21
|
+
```
|
22
|
+
|
23
|
+
Or install it yourself as:
|
24
|
+
|
25
|
+
```
|
26
|
+
$ gem install global_sign
|
27
|
+
```
|
28
|
+
|
29
|
+
## Usage
|
30
|
+
|
31
|
+
### Configuration
|
32
|
+
|
33
|
+
An example initializer would look something like this:
|
34
|
+
|
35
|
+
```ruby
|
36
|
+
GlobalSign.configure do |configuration|
|
37
|
+
configuration.user_name = 'PAR12345_taro'
|
38
|
+
configuration.password = 'password'
|
39
|
+
configuration.endpoint = 'https://test-gcc.globalsign.com/kb/ws/v1'
|
40
|
+
end
|
41
|
+
```
|
42
|
+
|
43
|
+
### URL Verification
|
44
|
+
|
45
|
+
```ruby
|
46
|
+
require 'global_sign'
|
47
|
+
|
48
|
+
client = GlobalSign::Client.new
|
49
|
+
|
50
|
+
# Prepare CSR beforehand
|
51
|
+
csr = <<-EOS
|
52
|
+
-----BEGIN CERTIFICATE REQUEST-----
|
53
|
+
...
|
54
|
+
-----END CERTIFICATE REQUEST-----
|
55
|
+
EOS
|
56
|
+
|
57
|
+
contract = GlobalSign::Contract.new(
|
58
|
+
first_name: 'Pepabo',
|
59
|
+
last_name: 'Taro',
|
60
|
+
phone_number: '090-1234-5678',
|
61
|
+
email: 'pepabo.taro@example.com',
|
62
|
+
)
|
63
|
+
|
64
|
+
request = GlobalSign::UrlVerification::Request.new(
|
65
|
+
order_kind: 'new', # If you request a new certificate
|
66
|
+
validity_period_months: 6,
|
67
|
+
csr: csr,
|
68
|
+
contract_info: contract,
|
69
|
+
)
|
70
|
+
|
71
|
+
response = client.process(request)
|
72
|
+
|
73
|
+
if response.success?
|
74
|
+
puts "Successfully URL Verification"
|
75
|
+
puts response.params # => { meta_tag: "xxxxx", ... }
|
76
|
+
else
|
77
|
+
raise StandardError, "#{response.error_code}: #{response.error_message}"
|
78
|
+
end
|
79
|
+
```
|
80
|
+
|
81
|
+
It's also possible to set contract within your configure block.
|
82
|
+
|
83
|
+
```ruby
|
84
|
+
GlobalSign.set_contract do |contract|
|
85
|
+
contract.first_name = 'Pepabo'
|
86
|
+
contract.last_name = 'Taro'
|
87
|
+
contract.phone_number = '090-1234-5678'
|
88
|
+
contract.email = 'pepabo.taro@example.com'
|
89
|
+
end
|
90
|
+
|
91
|
+
# Not need to give the argument 'contract_info'
|
92
|
+
request = GlobalSign::UrlVerification::Request.new(
|
93
|
+
order_kind: 'new',
|
94
|
+
validity_period_months: 6,
|
95
|
+
csr: csr,
|
96
|
+
)
|
97
|
+
```
|
98
|
+
|
99
|
+
If you request a renewal certificate, you should set `renewal` to the value of argument `order_kind`.
|
100
|
+
And you should give the argument `renewal_target_order_id` .
|
101
|
+
|
102
|
+
```ruby
|
103
|
+
request = GlobalSign::UrlVerification::Request.new(
|
104
|
+
order_kind: 'renewal',
|
105
|
+
validity_period_months: 6,
|
106
|
+
csr: csr,
|
107
|
+
renewal_target_order_id: 'xxxx123456789',
|
108
|
+
contract_info: contract,
|
109
|
+
)
|
110
|
+
```
|
111
|
+
|
112
|
+
### URL Verification for Issue
|
113
|
+
|
114
|
+
```ruby
|
115
|
+
client = GlobalSign::Client.new
|
116
|
+
|
117
|
+
# You can use ApproverURL value such as:
|
118
|
+
# - http://example.com
|
119
|
+
# - https://example.com
|
120
|
+
# - http://www.example.com
|
121
|
+
# - https://www.example.com
|
122
|
+
|
123
|
+
request = GlobalSign::UrlVerificationForIssue::Request.new(
|
124
|
+
order_id: 'xxxx123456789',
|
125
|
+
approver_url: 'http://example.com',
|
126
|
+
)
|
127
|
+
|
128
|
+
response = client.process(request)
|
129
|
+
|
130
|
+
if response.success?
|
131
|
+
puts "Successfully URL Verification for Issue"
|
132
|
+
puts response.params # => { fulfillment: { ca_certificates: [{ ca_cert: "xxxxx" }, ...]}, ... }
|
133
|
+
else
|
134
|
+
raise StandardError, "#{response.error_code}: #{response.error_message}"
|
135
|
+
end
|
136
|
+
```
|
137
|
+
|
138
|
+
### Get Order by OrderID
|
139
|
+
|
140
|
+
```ruby
|
141
|
+
request = GlobalSign::OrderGetterByOrderId::Request.new(order_id: 'xxxx123456789')
|
142
|
+
response = client.process(request)
|
143
|
+
|
144
|
+
puts response.params # => { order_id: "xxxx123456789", order_status: "2", ... }
|
145
|
+
|
146
|
+
# You can get order_status explanation
|
147
|
+
puts response.order_status_text # => "phishing_checking"
|
148
|
+
```
|
149
|
+
|
150
|
+
## Contributing
|
151
|
+
|
152
|
+
1. Create your feature branch (git checkout -b my-new-feature)
|
153
|
+
2. Commit your changes (git commit -am 'Add some feature')
|
154
|
+
3. Push to the branch (git push origin my-new-feature)
|
155
|
+
4. Create a new Pull Request
|
156
|
+
|
157
|
+
## License
|
158
|
+
|
159
|
+
The MIT License (MIT)
|
160
|
+
|
161
|
+
Copyright (c) 2016- GMO Pepabo, Inc.
|
data/Rakefile
ADDED
data/bin/console
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "bundler/setup"
|
4
|
+
require "global_sign"
|
5
|
+
|
6
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
+
# with your gem easier. You can also use a different console, if you like.
|
8
|
+
|
9
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
+
# require "pry"
|
11
|
+
# Pry.start
|
12
|
+
|
13
|
+
require "irb"
|
14
|
+
IRB.start
|
data/bin/setup
ADDED
data/global_sign.gemspec
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'global_sign/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'global_sign'
|
8
|
+
spec.version = GlobalSign::VERSION
|
9
|
+
spec.authors = ['ku00']
|
10
|
+
spec.email = ['skentaro36@gmail.com']
|
11
|
+
|
12
|
+
spec.summary = %q{A Ruby interface to the GlobalSign API.}
|
13
|
+
spec.description = %q{A Ruby interface to the GlobalSign API.}
|
14
|
+
spec.homepage = 'https://github.com/pepabo/global_sign'
|
15
|
+
spec.license = 'MIT'
|
16
|
+
|
17
|
+
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
18
|
+
f.match(%r{^(test|spec|features)/})
|
19
|
+
end
|
20
|
+
spec.bindir = 'exe'
|
21
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
22
|
+
spec.require_paths = ['lib']
|
23
|
+
|
24
|
+
spec.add_runtime_dependency 'activesupport'
|
25
|
+
spec.add_runtime_dependency 'builder'
|
26
|
+
spec.add_runtime_dependency 'faraday'
|
27
|
+
spec.add_runtime_dependency 'nokogiri'
|
28
|
+
|
29
|
+
spec.add_development_dependency 'bundler', '~> 1.13'
|
30
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
31
|
+
spec.add_development_dependency 'rspec'
|
32
|
+
spec.add_development_dependency 'webmock'
|
33
|
+
spec.add_development_dependency 'vcr'
|
34
|
+
spec.add_development_dependency 'pry-byebug'
|
35
|
+
spec.add_development_dependency 'dotenv'
|
36
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'faraday'
|
2
|
+
|
3
|
+
module GlobalSign
|
4
|
+
class Client
|
5
|
+
def initialize
|
6
|
+
@configuration = GlobalSign.configuration
|
7
|
+
|
8
|
+
@connection = Faraday::Connection.new(url: @configuration.endpoint) do |conn|
|
9
|
+
conn.request :url_encoded
|
10
|
+
conn.adapter Faraday.default_adapter
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def process(request)
|
15
|
+
response_class = find_response_class_for(request)
|
16
|
+
|
17
|
+
response = @connection.post do |req|
|
18
|
+
req.url request.path
|
19
|
+
req.headers['Content-Type'] = 'text/xml'
|
20
|
+
req.body = request.to_xml
|
21
|
+
end
|
22
|
+
|
23
|
+
response_class.new(response.body)
|
24
|
+
end
|
25
|
+
|
26
|
+
def find_response_class_for(request)
|
27
|
+
case request
|
28
|
+
when GlobalSign::UrlVerification::Request
|
29
|
+
GlobalSign::UrlVerification::Response
|
30
|
+
when GlobalSign::UrlVerificationForIssue::Request
|
31
|
+
GlobalSign::UrlVerificationForIssue::Response
|
32
|
+
when GlobalSign::OrderGetterByOrderId::Request
|
33
|
+
GlobalSign::OrderGetterByOrderId::Response
|
34
|
+
else
|
35
|
+
raise ArgumentError, 'invalid request argument'
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module GlobalSign
|
2
|
+
class Contract
|
3
|
+
attr_accessor :first_name, :last_name, :phone_number, :email
|
4
|
+
|
5
|
+
def initialize(first_name:, last_name:, phone_number:, email:)
|
6
|
+
@first_name = first_name
|
7
|
+
@last_name = last_name
|
8
|
+
@phone_number = phone_number
|
9
|
+
@email = email
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module GlobalSign
|
2
|
+
module OrderGetterByOrderId
|
3
|
+
class Request < GlobalSign::Request
|
4
|
+
def initialize(order_id:)
|
5
|
+
@order_id = order_id
|
6
|
+
end
|
7
|
+
|
8
|
+
def path
|
9
|
+
'GASService'
|
10
|
+
end
|
11
|
+
|
12
|
+
def action
|
13
|
+
'GetOrderByOrderID'
|
14
|
+
end
|
15
|
+
|
16
|
+
def request_header
|
17
|
+
:QueryRequestHeader
|
18
|
+
end
|
19
|
+
|
20
|
+
def params
|
21
|
+
{ OrderID: @order_id }
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module GlobalSign
|
2
|
+
module OrderGetterByOrderId
|
3
|
+
class Response < GlobalSign::Response
|
4
|
+
module XPath
|
5
|
+
ORDER_ID = '//Response/OrderID'
|
6
|
+
ORDER_STATUS = '//Response/OrderDetail/OrderInfo/OrderStatus'
|
7
|
+
MODIFICATION_EVENTS = '//Response/OrderDetail/ModificationEvents'
|
8
|
+
end
|
9
|
+
|
10
|
+
def params
|
11
|
+
@params ||= {
|
12
|
+
order_id: @xml.xpath(XPath::ORDER_ID).text,
|
13
|
+
order_status: @xml.xpath(XPath::ORDER_STATUS).text,
|
14
|
+
modification_events: modification_events_list
|
15
|
+
}
|
16
|
+
end
|
17
|
+
|
18
|
+
def order_status_text
|
19
|
+
OrderStatus::STATUS_MAPPING[params[:order_status]]
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def modification_events_list
|
25
|
+
@xml.xpath(XPath::MODIFICATION_EVENTS).children.map do |element|
|
26
|
+
{
|
27
|
+
name: element.at('ModificationEventName').text,
|
28
|
+
timestamp: element.at('ModificationEventTimestamp').text,
|
29
|
+
}
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module GlobalSign
|
2
|
+
class OrderStatus
|
3
|
+
STATUS_MAPPING = {
|
4
|
+
'1' => 'initial',
|
5
|
+
'2' => 'waiting_for_phishing_check',
|
6
|
+
'3' => 'cancelled_before_issue',
|
7
|
+
'4' => 'completed_issue',
|
8
|
+
'5' => 'cancelled_after_issue',
|
9
|
+
'6' => 'waiting_for_revocation',
|
10
|
+
'7' => 'revoked',
|
11
|
+
}.each_value(&:freeze).freeze
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module GlobalSign
|
2
|
+
class Request
|
3
|
+
def to_xml
|
4
|
+
GlobalSign::RequestXmlBuilder.build_xml(
|
5
|
+
action: action,
|
6
|
+
params: auth_token_params.merge(params)
|
7
|
+
)
|
8
|
+
end
|
9
|
+
|
10
|
+
def auth_token_params
|
11
|
+
{ "#{request_header}": auth_token_hash }
|
12
|
+
end
|
13
|
+
|
14
|
+
def auth_token_hash
|
15
|
+
{
|
16
|
+
AuthToken: {
|
17
|
+
UserName: GlobalSign.configuration.user_name,
|
18
|
+
Password: GlobalSign.configuration.password,
|
19
|
+
}
|
20
|
+
}
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'nokogiri'
|
2
|
+
|
3
|
+
module GlobalSign
|
4
|
+
class RequestXmlBuilder
|
5
|
+
module XmlNamespace
|
6
|
+
BODY = 'http://schemas.xmlsoap.org/soap/envelope/'.freeze
|
7
|
+
ACTION = 'https://system.globalsign.com/kb/ws/v1/'.freeze
|
8
|
+
end
|
9
|
+
|
10
|
+
class << self
|
11
|
+
def build_xml(action:, params:)
|
12
|
+
xml = xml_envelope(action).at('//Request') << xml_body(params).root.elements
|
13
|
+
|
14
|
+
builder = Nokogiri::XML::Builder.with(xml)
|
15
|
+
builder.doc.root.to_xml
|
16
|
+
end
|
17
|
+
|
18
|
+
def xml_envelope(action)
|
19
|
+
Nokogiri::XML(
|
20
|
+
<<-EOS
|
21
|
+
<soap:Envelope xmlns:soap=\"#{XmlNamespace::BODY}\" xmlns:ns2=\"#{XmlNamespace::ACTION}\">
|
22
|
+
<soap:Body>
|
23
|
+
<ns2:#{action}>
|
24
|
+
<Request/>
|
25
|
+
</ns2:#{action}>
|
26
|
+
</soap:Body>
|
27
|
+
</soap:Envelope>
|
28
|
+
EOS
|
29
|
+
) do |configuration|
|
30
|
+
configuration.default_xml.noblanks
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def xml_body(params)
|
35
|
+
Nokogiri.XML(params.to_xml) do |configuration|
|
36
|
+
configuration.default_xml.noblanks
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'nokogiri'
|
2
|
+
|
3
|
+
module GlobalSign
|
4
|
+
class Response
|
5
|
+
SUCCESS_CODE = '0'.freeze
|
6
|
+
WARNING_CODE = '1'.freeze
|
7
|
+
|
8
|
+
module XPath
|
9
|
+
RESULT = '//Response/OrderResponseHeader/SuccessCode'
|
10
|
+
ERRORS = '//Response/OrderResponseHeader/Errors'
|
11
|
+
end
|
12
|
+
|
13
|
+
def initialize(body)
|
14
|
+
@xml = Nokogiri::XML(body)
|
15
|
+
end
|
16
|
+
|
17
|
+
def success?
|
18
|
+
@xml.xpath(XPath::RESULT).text == SUCCESS_CODE
|
19
|
+
end
|
20
|
+
|
21
|
+
def warning?
|
22
|
+
@xml.xpath(XPath::RESULT).text == WARNING_CODE
|
23
|
+
end
|
24
|
+
|
25
|
+
def error?
|
26
|
+
!success? && !warning?
|
27
|
+
end
|
28
|
+
|
29
|
+
def error_code
|
30
|
+
errors.at('ErrorCode').try(:text)
|
31
|
+
end
|
32
|
+
|
33
|
+
def error_field
|
34
|
+
errors.at('ErrorField').try(:text)
|
35
|
+
end
|
36
|
+
|
37
|
+
def error_message
|
38
|
+
errors.at('ErrorMessage').try(:text)
|
39
|
+
end
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
def errors
|
44
|
+
@xml.xpath(XPath::ERRORS)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module GlobalSign
|
2
|
+
module UrlVerification
|
3
|
+
class Request < GlobalSign::Request
|
4
|
+
def initialize(order_kind:, validity_period_months:, csr:, renewal_target_order_id: nil, contract_info: nil)
|
5
|
+
@order_kind = order_kind
|
6
|
+
@validity_period_months = validity_period_months
|
7
|
+
@csr = csr
|
8
|
+
@renewal_target_order_id = renewal_target_order_id
|
9
|
+
@contract_info = contract_info || GlobalSign.contract
|
10
|
+
end
|
11
|
+
|
12
|
+
def path
|
13
|
+
'ServerSSLService'
|
14
|
+
end
|
15
|
+
|
16
|
+
def action
|
17
|
+
'URLVerification'
|
18
|
+
end
|
19
|
+
|
20
|
+
def request_header
|
21
|
+
:OrderRequestHeader
|
22
|
+
end
|
23
|
+
|
24
|
+
def params
|
25
|
+
_params = {
|
26
|
+
OrderRequestParameter: {
|
27
|
+
ProductCode: 'DV_LOW_URL',
|
28
|
+
OrderKind: @order_kind,
|
29
|
+
Licenses: 1,
|
30
|
+
ValidityPeriod: {
|
31
|
+
Months: @validity_period_months
|
32
|
+
},
|
33
|
+
CSR: @csr,
|
34
|
+
},
|
35
|
+
ContactInfo: {
|
36
|
+
FirstName: @contract_info.first_name,
|
37
|
+
LastName: @contract_info.last_name,
|
38
|
+
Phone: @contract_info.phone_number,
|
39
|
+
Email: @contract_info.email
|
40
|
+
}
|
41
|
+
}
|
42
|
+
|
43
|
+
# require `RenewalTargetOrderID` to request a renewal certificate
|
44
|
+
if @order_kind == 'renewal'
|
45
|
+
_params[:OrderRequestParameter].merge!(
|
46
|
+
{ RenewalTargetOrderID: @renewal_target_order_id }
|
47
|
+
)
|
48
|
+
end
|
49
|
+
|
50
|
+
_params
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module GlobalSign
|
2
|
+
module UrlVerification
|
3
|
+
class Response < GlobalSign::Response
|
4
|
+
module XPath
|
5
|
+
ORDER_ID = '//Response/OrderID'
|
6
|
+
META_TAG = '//Response/MetaTag'
|
7
|
+
VERIFICATION_URL_LIST = '//Response/VerificationURLList'
|
8
|
+
end
|
9
|
+
|
10
|
+
def params
|
11
|
+
@params ||= {
|
12
|
+
order_id: @xml.xpath(XPath::ORDER_ID).text,
|
13
|
+
meta_tag: @xml.xpath(XPath::META_TAG).text,
|
14
|
+
verification_url_list: verification_url_list,
|
15
|
+
}
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def verification_url_list
|
21
|
+
@xml.xpath(XPath::VERIFICATION_URL_LIST).children.map(&:text)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module GlobalSign
|
2
|
+
module UrlVerificationForIssue
|
3
|
+
class Request < GlobalSign::Request
|
4
|
+
def initialize(order_id:, approver_url:)
|
5
|
+
@order_id = order_id
|
6
|
+
@approver_url = approver_url
|
7
|
+
end
|
8
|
+
|
9
|
+
def path
|
10
|
+
'ServerSSLService'
|
11
|
+
end
|
12
|
+
|
13
|
+
def action
|
14
|
+
'URLVerificationForIssue'
|
15
|
+
end
|
16
|
+
|
17
|
+
def request_header
|
18
|
+
:OrderRequestHeader
|
19
|
+
end
|
20
|
+
|
21
|
+
def params
|
22
|
+
{
|
23
|
+
OrderID: @order_id,
|
24
|
+
ApproverURL: @approver_url,
|
25
|
+
}
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module GlobalSign
|
2
|
+
module UrlVerificationForIssue
|
3
|
+
class Response < GlobalSign::Response
|
4
|
+
module XPath
|
5
|
+
Certificate_Info = '//Response/URLVerificationForIssue/CertificateInfo'
|
6
|
+
CA_Certificates = '//Response/URLVerificationForIssue/Fulfillment/CACertificates'
|
7
|
+
Server_Certificate = '//Response/URLVerificationForIssue/Fulfillment/ServerCertificate'
|
8
|
+
end
|
9
|
+
|
10
|
+
def params
|
11
|
+
@params ||= {
|
12
|
+
certificate_info: {
|
13
|
+
certificate_status: certificate_info.at('CertificateStatus').text,
|
14
|
+
start_date: certificate_info.at('StartDate').text,
|
15
|
+
end_date: certificate_info.at('EndDate').text,
|
16
|
+
common_name: certificate_info.at('CommonName').text,
|
17
|
+
subject_name: certificate_info.at('SubjectName').text,
|
18
|
+
},
|
19
|
+
fulfillment: {
|
20
|
+
ca_certificates: ca_certificates_list,
|
21
|
+
server_certificate: {
|
22
|
+
x509_cert: server_certificate.at('X509Cert').text,
|
23
|
+
pkcs7_cert: server_certificate.at('PKCS7Cert').text,
|
24
|
+
}
|
25
|
+
}
|
26
|
+
}
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def certificate_info
|
32
|
+
@xml.xpath(XPath::Certificate_Info)
|
33
|
+
end
|
34
|
+
|
35
|
+
def ca_certificates_list
|
36
|
+
@xml.xpath(XPath::CA_Certificates).children.map do |c|
|
37
|
+
{
|
38
|
+
ca_cert_type: c.at('CACertType').text,
|
39
|
+
ca_cert: c.at('CACert').text,
|
40
|
+
}
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def server_certificate
|
45
|
+
@xml.xpath(XPath::Server_Certificate)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
data/lib/global_sign.rb
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'active_support/core_ext/hash/conversions'
|
2
|
+
|
3
|
+
require 'global_sign/version'
|
4
|
+
require 'global_sign/client'
|
5
|
+
require 'global_sign/contract'
|
6
|
+
require 'global_sign/request_xml_builder'
|
7
|
+
require 'global_sign/request'
|
8
|
+
require 'global_sign/response'
|
9
|
+
require 'global_sign/order_status'
|
10
|
+
|
11
|
+
require 'global_sign/url_verification'
|
12
|
+
require 'global_sign/url_verification_for_issue'
|
13
|
+
require 'global_sign/order_getter_by_order_id'
|
14
|
+
|
15
|
+
module GlobalSign
|
16
|
+
class << self
|
17
|
+
attr_accessor :configuration, :contract
|
18
|
+
|
19
|
+
def configure
|
20
|
+
@configuration ||= Configuration.new
|
21
|
+
yield @configuration if block_given?
|
22
|
+
end
|
23
|
+
|
24
|
+
def set_contract
|
25
|
+
# initialize with nil, because the initialize method requires keyword args
|
26
|
+
@contract ||= Contract.new(first_name: nil, last_name: nil, phone_number: nil, email: nil)
|
27
|
+
yield @contract if block_given?
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
class Configuration
|
32
|
+
attr_accessor :user_name, :password, :endpoint
|
33
|
+
end
|
34
|
+
end
|
data/wercker.yml
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
box: ruby:2.3
|
2
|
+
build:
|
3
|
+
steps:
|
4
|
+
- bundle-install
|
5
|
+
- script:
|
6
|
+
name: echo ruby information
|
7
|
+
code: |
|
8
|
+
echo "ruby version $(ruby --version) running"
|
9
|
+
echo "from location $(which ruby)"
|
10
|
+
echo -p "gem list: $(gem list)"
|
11
|
+
- script:
|
12
|
+
name: rspec
|
13
|
+
code: bundle exec rspec
|
14
|
+
after-steps:
|
15
|
+
- wantedly/pretty-slack-notify:
|
16
|
+
webhook_url: $SLACK_WEBHOOK_URL
|
metadata
ADDED
@@ -0,0 +1,227 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: global_sign
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- ku00
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-10-31 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activesupport
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: builder
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: faraday
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: nokogiri
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: bundler
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '1.13'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '1.13'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rake
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '10.0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '10.0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rspec
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: webmock
|
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'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: vcr
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: pry-byebug
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ">="
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - ">="
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: dotenv
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - ">="
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
160
|
+
type: :development
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - ">="
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0'
|
167
|
+
description: A Ruby interface to the GlobalSign API.
|
168
|
+
email:
|
169
|
+
- skentaro36@gmail.com
|
170
|
+
executables: []
|
171
|
+
extensions: []
|
172
|
+
extra_rdoc_files: []
|
173
|
+
files:
|
174
|
+
- ".env.sample"
|
175
|
+
- ".gitignore"
|
176
|
+
- ".rspec"
|
177
|
+
- 'CHANGELOG.md '
|
178
|
+
- Gemfile
|
179
|
+
- LICENSE
|
180
|
+
- README.md
|
181
|
+
- Rakefile
|
182
|
+
- bin/console
|
183
|
+
- bin/setup
|
184
|
+
- global_sign.gemspec
|
185
|
+
- lib/global_sign.rb
|
186
|
+
- lib/global_sign/client.rb
|
187
|
+
- lib/global_sign/contract.rb
|
188
|
+
- lib/global_sign/order_getter_by_order_id.rb
|
189
|
+
- lib/global_sign/order_getter_by_order_id/request.rb
|
190
|
+
- lib/global_sign/order_getter_by_order_id/response.rb
|
191
|
+
- lib/global_sign/order_status.rb
|
192
|
+
- lib/global_sign/request.rb
|
193
|
+
- lib/global_sign/request_xml_builder.rb
|
194
|
+
- lib/global_sign/response.rb
|
195
|
+
- lib/global_sign/url_verification.rb
|
196
|
+
- lib/global_sign/url_verification/request.rb
|
197
|
+
- lib/global_sign/url_verification/response.rb
|
198
|
+
- lib/global_sign/url_verification_for_issue.rb
|
199
|
+
- lib/global_sign/url_verification_for_issue/request.rb
|
200
|
+
- lib/global_sign/url_verification_for_issue/response.rb
|
201
|
+
- lib/global_sign/version.rb
|
202
|
+
- wercker.yml
|
203
|
+
homepage: https://github.com/pepabo/global_sign
|
204
|
+
licenses:
|
205
|
+
- MIT
|
206
|
+
metadata: {}
|
207
|
+
post_install_message:
|
208
|
+
rdoc_options: []
|
209
|
+
require_paths:
|
210
|
+
- lib
|
211
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
212
|
+
requirements:
|
213
|
+
- - ">="
|
214
|
+
- !ruby/object:Gem::Version
|
215
|
+
version: '0'
|
216
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
217
|
+
requirements:
|
218
|
+
- - ">="
|
219
|
+
- !ruby/object:Gem::Version
|
220
|
+
version: '0'
|
221
|
+
requirements: []
|
222
|
+
rubyforge_project:
|
223
|
+
rubygems_version: 2.6.7
|
224
|
+
signing_key:
|
225
|
+
specification_version: 4
|
226
|
+
summary: A Ruby interface to the GlobalSign API.
|
227
|
+
test_files: []
|