globessl 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,51 @@
1
+ module GlobeSSL
2
+ class Product < Base
3
+ attribute :errors, Array[String]
4
+ attribute :id, Integer
5
+ attribute :name, String
6
+ attribute :validation, String
7
+ attribute :wildcard, Boolean
8
+ attribute :multi_domain, Boolean
9
+ attribute :min_domains, Integer
10
+ attribute :max_domains, Integer
11
+ attribute :brand, String
12
+
13
+ def fetch
14
+ @errors.clear
15
+
16
+ unless @id
17
+ @errors << "product id is required"
18
+ return false
19
+ end
20
+
21
+ response = Client.get('/products/details', { 'product_id' => @id })
22
+
23
+ case response.code
24
+ when '200'
25
+ json = response.body
26
+ hash = JSON.parse(json)
27
+
28
+ @name = hash["name"]
29
+ @validation = hash["validation"]
30
+ @wildcard = hash["wildcard"] == 1 ? true : false
31
+ @multi_domain = hash["mdc"] == 1 ? true : false
32
+ @min_domains = hash["mdc_min"]
33
+ @max_domains = hash["mdc_max"]
34
+ @brand = hash["brand"]
35
+
36
+ return true
37
+ when '400', '401', '403'
38
+ set_errors(response)
39
+ return false
40
+ else
41
+ return false
42
+ end
43
+ end
44
+
45
+ def set_errors(response)
46
+ json = response.body
47
+ hash = JSON.parse(json)
48
+ @errors << hash["message"]
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,46 @@
1
+ module GlobeSSL
2
+ class Products < Base
3
+ attribute :errors, Array[String]
4
+ attribute :list, Array[Product]
5
+
6
+ def fetch
7
+ @errors.clear
8
+ @list.clear
9
+
10
+ response = Client.get('/products/list')
11
+
12
+ case response.code
13
+ when '200'
14
+ json = response.body
15
+ hash = JSON.parse(json)
16
+
17
+ collection = hash["products"].inject([]) { |memo, element| memo << element.last }
18
+
19
+ collection.each do |product|
20
+ @list << Product.new(
21
+ :id => product["id"],
22
+ :name => product["name"],
23
+ :validation => product["validation"],
24
+ :wildcard => product["wildcard"],
25
+ :mdc => product["mdc"],
26
+ :mdc_min => product["mdc_min"],
27
+ :mdc_max => product["mdc_max"],
28
+ :brand => product["brand"]
29
+ )
30
+ end
31
+ return true
32
+ when '400', '401', '403'
33
+ set_errors(response)
34
+ return false
35
+ else
36
+ return false
37
+ end
38
+ end
39
+
40
+ def set_errors(response)
41
+ json = response.body
42
+ hash = JSON.parse(json)
43
+ @errors << hash["message"]
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,250 @@
1
+ module GlobeSSL
2
+ class SSLCertificate < Base
3
+ attribute :id, Integer
4
+ attribute :order_id, Integer
5
+ attribute :partner_order_id, Integer
6
+ attribute :status, String
7
+ attribute :status_description, String
8
+ attribute :dcv_method, String
9
+ attribute :dcv_email, String
10
+ attribute :product, Product
11
+ attribute :domain, String
12
+ attribute :domains, String
13
+ attribute :total_domains, Integer
14
+ attribute :period, Integer
15
+ attribute :valid_from, Date
16
+ attribute :valid_till, Date
17
+ attribute :csr_code, String
18
+ attribute :crt_code, String
19
+ attribute :ca_code, String
20
+ attribute :webserver_type, Integer
21
+
22
+ def fetch
23
+ @errors.clear
24
+
25
+ unless @id
26
+ @errors << "cerificate id is required"
27
+ return false
28
+ end
29
+
30
+ response = Client.get('/certificates/get', { "id" => @id })
31
+
32
+ case response.code
33
+ when '200'
34
+ json = response.body
35
+ hash = JSON.parse(json)
36
+
37
+ @order_id = hash["order_id"]
38
+ @partner_order_id = hash["partner_order_id"]
39
+ @status = hash["status"]
40
+ @status_description = hash["status_description"]
41
+ @dcv_method = hash["dcv_method"]
42
+ @dcv_email = hash["dcv_email"]
43
+ @domain = hash["domain"]
44
+ @domains = hash["domains"]
45
+ @total_domains = hash["total_domains"]
46
+ @period = hash["period"]
47
+ @valid_from = hash["valid_from"]
48
+ @valid_till = hash["valid_till"]
49
+ @csr_code = hash["csr_code"]
50
+ @crt_code = hash["crt_code"]
51
+ @ca_code = hash["ca_code"]
52
+
53
+ @product = Product.new(:id => hash["product_id"])
54
+ @product.fetch
55
+
56
+ return true
57
+ when '400', '401', '403'
58
+ set_errors(response)
59
+ return false
60
+ else
61
+ return false
62
+ end
63
+ end
64
+
65
+ def reissue
66
+ @errors.clear
67
+ return false unless valid?
68
+
69
+ params = {
70
+ "id" => @id,
71
+ "csr" => @csr_code,
72
+ "dcv_method" => @dcv_method,
73
+ "webserver_type" => @webserver_type
74
+ }
75
+
76
+ if @dcv_method == "email" && @product.validation == "dv"
77
+ email_params = {
78
+ "approver_email" => @approver_email
79
+ }
80
+ params.merge!(email_params)
81
+
82
+ if @product.multi_domain
83
+ multi_domain_params = {
84
+ "dns_names" => @domains,
85
+ "approver_emails" => @approver_emails
86
+ }
87
+ params.merge!(multi_domain_params)
88
+ end
89
+ end
90
+
91
+ request = Client.post('/certificates/reissue', params)
92
+
93
+ case response.code
94
+ when '200'
95
+ return true
96
+ when '400', '401', '403'
97
+ set_errors(response)
98
+ return false
99
+ else
100
+ return false
101
+ end
102
+ end
103
+
104
+ def set_errors(response)
105
+ json = response.body
106
+ hash = JSON.parse(json)
107
+ @errors << hash["message"]
108
+ end
109
+
110
+ def valid?
111
+ validate
112
+ end
113
+
114
+ def validate
115
+ unless @dcv_method
116
+ @errors << "dcv_method is required"
117
+ else
118
+ unless DomainControlValidation::METHODS.include?(@dcv_method)
119
+ @errors << "dcv_method must be one of 'email', 'http' or 'https'"
120
+ end
121
+ end
122
+
123
+ if @product.multi_domain
124
+ unless @dns_names.size > (@product.min_domains - 1)
125
+ @errors << "dns_names are required"
126
+ end
127
+ end
128
+
129
+ if @dcv_method == "email"
130
+ unless @approver_email
131
+ @errors << "approver_email is required"
132
+ end
133
+
134
+ if @product.multi_domain
135
+ unless @approver_emails.size == @dns_names.size
136
+ @errors << "approver_emails are required"
137
+ end
138
+ end
139
+ end
140
+
141
+ unless @product.validation == "dv" # if not domain validation
142
+ unless @admin_org
143
+ @errors << "admin_org is required"
144
+ end
145
+
146
+ unless @admin_address
147
+ @errors << "admin_address is required"
148
+ end
149
+
150
+ unless @admin_city
151
+ @errors << "admin_city is required"
152
+ end
153
+
154
+ unless @admin_country
155
+ @errors << "admin_country is required"
156
+ else
157
+ unless COUNTRY_CODES.has_key?(@admin_country)
158
+ @errors << "admin_country must be one in COUNTRY_CODES"
159
+ end
160
+ end
161
+
162
+ unless @org_name
163
+ @errors << "org_name is required"
164
+ end
165
+
166
+ unless @org_division
167
+ @errors << "org_division is required"
168
+ end
169
+
170
+ unless @org_address
171
+ @errors << "org_address is required"
172
+ end
173
+
174
+ unless @org_city
175
+ @errors << "org_city is required"
176
+ end
177
+
178
+ unless @org_state
179
+ @errors << "org_state is required"
180
+ end
181
+
182
+ unless @org_country
183
+ @errors << "org_country is required"
184
+ else
185
+ unless COUNTRY_CODES.has_key?(@org_country)
186
+ @errors << "org_country must be one in COUNTRY_CODES"
187
+ end
188
+ end
189
+
190
+ unless @org_postalcode
191
+ @errors << "org_postalcode is required"
192
+ end
193
+
194
+ unless @org_phone
195
+ @errors << "org_phone is required"
196
+ end
197
+ end
198
+
199
+ unless @admin_firstname
200
+ @errors << "admin_firstname is required"
201
+ end
202
+
203
+ unless @admin_lastname
204
+ @errors << "admin_lastname is required"
205
+ end
206
+
207
+ unless @admin_email
208
+ @errors << "admin_email is required"
209
+ end
210
+
211
+ unless @admin_jobtitle
212
+ @errors << "admin_jobtitle is required"
213
+ end
214
+
215
+ unless @admin_phone
216
+ @errors << "admin_phone is required"
217
+ end
218
+
219
+ unless @admin_phone
220
+ @errors << "admin_phone is required"
221
+ end
222
+
223
+ unless @csr
224
+ @errors << "certificate signing request (csr) is required"
225
+ end
226
+
227
+ unless @period
228
+ @errors << "period is required"
229
+ else
230
+ unless EXPIRY_PERIODS.include?(@period)
231
+ @errors << "period must be 1, 2 or 3 years or 0 if product is free"
232
+ end
233
+ end
234
+
235
+ unless @webserver_type
236
+ @errors << "webserver_type is required"
237
+ end
238
+
239
+ unless @product
240
+ @errors << "product is required"
241
+ end
242
+
243
+ if @errors.any?
244
+ return false
245
+ else
246
+ return true
247
+ end
248
+ end
249
+ end
250
+ end
@@ -0,0 +1,10 @@
1
+ module GlobeSSL
2
+ module VERSION
3
+ MAJOR = 1
4
+ MINOR = 0
5
+ TINY = 1
6
+ REVISION = nil
7
+ STRING = [MAJOR, MINOR, TINY, REVISION].compact.join('.')
8
+ SUMMARY = "GlobeSSL Ruby Client v#{STRING}"
9
+ end
10
+ end
@@ -0,0 +1,6 @@
1
+ module GlobeSSL
2
+ class Webserver < Base
3
+ attribute :id, Integer
4
+ attribute :name, String
5
+ end
6
+ end
@@ -0,0 +1,32 @@
1
+ module GlobeSSL
2
+ class Webservers < Base
3
+ attribute :errors, Array[String]
4
+ attribute :list, Array[Product]
5
+
6
+ def fetch
7
+ @errors.clear
8
+ @list.clear
9
+
10
+ response = Client.get('/tools/webservers')
11
+
12
+ case response.code
13
+ when '200'
14
+ json = response.body
15
+ hash = JSON.parse(json)
16
+ hash.each_pair { |key, value| @list << Webserver.new(:id => key, :name => value) }
17
+ return true
18
+ when '400', '401', '403'
19
+ set_errors(response)
20
+ return false
21
+ else
22
+ return false
23
+ end
24
+ end
25
+
26
+ def set_errors(response)
27
+ json = response.body
28
+ hash = JSON.parse(json)
29
+ @errors << hash["message"]
30
+ end
31
+ end
32
+ end
metadata ADDED
@@ -0,0 +1,82 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: globessl
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Jurgen Jocubeit
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-10-13 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: virtus
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 1.0.3
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 1.0.3
27
+ description: A Ruby API client for GlobeSSL CA resellers. This client provides almost
28
+ all of the functionality exposed by v2 of their API.
29
+ email: support@brightcommerce.com
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - ".gitignore"
35
+ - Gemfile
36
+ - LICENSE
37
+ - README.md
38
+ - globessl.gemspec
39
+ - lib/globessl.rb
40
+ - lib/globessl/account_balance.rb
41
+ - lib/globessl/account_details.rb
42
+ - lib/globessl/base.rb
43
+ - lib/globessl/certificate_signing_request.rb
44
+ - lib/globessl/client.rb
45
+ - lib/globessl/configuration.rb
46
+ - lib/globessl/country_codes.rb
47
+ - lib/globessl/domain_control_validation.rb
48
+ - lib/globessl/domain_emails.rb
49
+ - lib/globessl/order_ssl_certificate.rb
50
+ - lib/globessl/product.rb
51
+ - lib/globessl/products.rb
52
+ - lib/globessl/ssl_certificate.rb
53
+ - lib/globessl/version.rb
54
+ - lib/globessl/webserver.rb
55
+ - lib/globessl/webservers.rb
56
+ homepage: https://github.com/brightcommerce/globessl
57
+ licenses:
58
+ - MIT
59
+ metadata:
60
+ copyright: Copyright 2015 Brightcommerce, Inc.
61
+ post_install_message:
62
+ rdoc_options: []
63
+ require_paths:
64
+ - lib
65
+ required_ruby_version: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: 2.0.0
70
+ required_rubygems_version: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ requirements: []
76
+ rubyforge_project:
77
+ rubygems_version: 2.4.5
78
+ signing_key:
79
+ specification_version: 4
80
+ summary: GlobeSSL Ruby Client v1.0.1
81
+ test_files: []
82
+ has_rdoc: