epp-client-base 0.14.0 → 0.15.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 +5 -5
- data/Rakefile +4 -5
- data/epp-client-base.gemspec +4 -4
- data/lib/epp-client/base.rb +22 -18
- data/lib/epp-client/connection.rb +21 -29
- data/lib/epp-client/contact.rb +180 -181
- data/lib/epp-client/domain.rb +180 -185
- data/lib/epp-client/exceptions.rb +1 -0
- data/lib/epp-client/poll.rb +19 -19
- data/lib/epp-client/session.rb +24 -28
- data/lib/epp-client/ssl.rb +9 -12
- data/lib/epp-client/version.rb +1 -1
- data/lib/epp-client/xml.rb +51 -54
- metadata +2 -2
data/lib/epp-client/domain.rb
CHANGED
@@ -1,17 +1,20 @@
|
|
1
1
|
module EPPClient
|
2
|
+
# This module handles all the Domain interactions.!
|
3
|
+
#
|
4
|
+
# See RFC 5731 for more informations
|
2
5
|
module Domain
|
3
6
|
EPPClient::Poll::PARSERS['domain:panData'] = :domain_pending_action_process
|
4
7
|
EPPClient::Poll::PARSERS['domain:trnData'] = :domain_transfer_response
|
5
8
|
|
6
9
|
def domain_check_xml(*domains) # :nodoc:
|
7
10
|
command do |xml|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
11
|
+
xml.check do
|
12
|
+
xml.check('xmlns' => EPPClient::SCHEMAS_URL['domain-1.0']) do
|
13
|
+
domains.each do |dom|
|
14
|
+
xml.name(dom)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
15
18
|
end
|
16
19
|
end
|
17
20
|
|
@@ -32,33 +35,33 @@ module EPPClient
|
|
32
35
|
|
33
36
|
def domain_check_process(xml) # :nodoc:
|
34
37
|
xml.xpath('epp:resData/domain:chkData/domain:cd', EPPClient::SCHEMAS_URL).map do |dom|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
38
|
+
ret = {
|
39
|
+
:name => dom.xpath('domain:name', EPPClient::SCHEMAS_URL).text,
|
40
|
+
:avail => dom.xpath('domain:name', EPPClient::SCHEMAS_URL).attr('avail').value == '1',
|
41
|
+
}
|
42
|
+
unless (reason = dom.xpath('domain:reason', EPPClient::SCHEMAS_URL).text).empty?
|
43
|
+
ret[:reason] = reason
|
44
|
+
end
|
45
|
+
ret
|
43
46
|
end
|
44
47
|
end
|
45
48
|
|
46
49
|
def domain_info_xml(args) # :nodoc:
|
47
50
|
command do |xml|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
51
|
+
xml.info do
|
52
|
+
xml.info('xmlns' => EPPClient::SCHEMAS_URL['domain-1.0']) do
|
53
|
+
xml.name(args[:name])
|
54
|
+
if args.key?(:authInfo)
|
55
|
+
xml.authInfo do
|
56
|
+
if args.key?(:roid)
|
57
|
+
xml.pw({ :roid => args[:roid] }, args[:authInfo])
|
58
|
+
else
|
59
|
+
xml.pw(args[:authInfo])
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
62
65
|
end
|
63
66
|
end
|
64
67
|
|
@@ -113,9 +116,7 @@ module EPPClient
|
|
113
116
|
# [<tt>:authInfo</tt>]
|
114
117
|
# authorization information associated with the domain object.
|
115
118
|
def domain_info(args)
|
116
|
-
|
117
|
-
args = {:name => args}
|
118
|
-
end
|
119
|
+
args = { :name => args } if args.is_a?(String)
|
119
120
|
response = send_request(domain_info_xml(args))
|
120
121
|
|
121
122
|
get_result(:xml => response, :callback => :domain_info_process)
|
@@ -124,117 +125,113 @@ module EPPClient
|
|
124
125
|
def domain_info_process(xml) # :nodoc:
|
125
126
|
dom = xml.xpath('epp:resData/domain:infData', EPPClient::SCHEMAS_URL)
|
126
127
|
ret = {
|
127
|
-
|
128
|
-
|
128
|
+
:name => dom.xpath('domain:name', EPPClient::SCHEMAS_URL).text,
|
129
|
+
:roid => dom.xpath('domain:roid', EPPClient::SCHEMAS_URL).text,
|
129
130
|
}
|
130
131
|
if (status = dom.xpath('domain:status', EPPClient::SCHEMAS_URL)).size > 0
|
131
|
-
|
132
|
+
ret[:status] = status.map { |s| s.attr('s') }
|
132
133
|
end
|
133
134
|
if (registrant = dom.xpath('domain:registrant', EPPClient::SCHEMAS_URL)).size > 0
|
134
|
-
|
135
|
+
ret[:registrant] = registrant.text
|
135
136
|
end
|
136
137
|
if (contact = dom.xpath('domain:contact', EPPClient::SCHEMAS_URL)).size > 0
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
138
|
+
ret[:contacts] = contact.inject({}) do |a, c|
|
139
|
+
s = c.attr('type').to_sym
|
140
|
+
a[s] ||= []
|
141
|
+
a[s] << c.text
|
142
|
+
a
|
143
|
+
end
|
143
144
|
end
|
144
145
|
if (ns = dom.xpath('domain:ns', EPPClient::SCHEMAS_URL)).size > 0
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
146
|
+
if (hostObj = ns.xpath('domain:hostObj', EPPClient::SCHEMAS_URL)).size > 0
|
147
|
+
ret[:ns] = hostObj.map(&:text)
|
148
|
+
elsif (hostAttr = ns.xpath('domain:hostAttr', EPPClient::SCHEMAS_URL)).size > 0
|
149
|
+
ret[:ns] = hostAttr.map do |h|
|
150
|
+
r = { :hostName => h.xpath('domain:hostName', EPPClient::SCHEMAS_URL).text }
|
151
|
+
if (v4 = h.xpath('domain:hostAddr[@ip="v4"]', EPPClient::SCHEMAS_URL)).size > 0
|
152
|
+
r[:hostAddrv4] = v4.map(&:text)
|
153
|
+
end
|
154
|
+
if (v6 = h.xpath('domain:hostAddr[@ip="v6"]', EPPClient::SCHEMAS_URL)).size > 0
|
155
|
+
r[:hostAddrv6] = v6.map(&:text)
|
156
|
+
end
|
157
|
+
r
|
158
|
+
end
|
159
|
+
end
|
159
160
|
end
|
160
161
|
if (host = dom.xpath('domain:host', EPPClient::SCHEMAS_URL)).size > 0
|
161
|
-
|
162
|
+
ret[:host] = host.map(&:text)
|
162
163
|
end
|
163
164
|
%w(clID upID).each do |val|
|
164
|
-
|
165
|
-
|
166
|
-
|
165
|
+
if (r = dom.xpath("domain:#{val}", EPPClient::SCHEMAS_URL)).size > 0
|
166
|
+
ret[val.to_sym] = r.text
|
167
|
+
end
|
167
168
|
end
|
168
169
|
%w(crDate exDate upDate trDate).each do |val|
|
169
|
-
|
170
|
-
|
171
|
-
|
170
|
+
if (r = dom.xpath("domain:#{val}", EPPClient::SCHEMAS_URL)).size > 0
|
171
|
+
ret[val.to_sym] = DateTime.parse(r.text)
|
172
|
+
end
|
172
173
|
end
|
173
174
|
if (authInfo = dom.xpath('domain:authInfo', EPPClient::SCHEMAS_URL)).size > 0
|
174
|
-
|
175
|
+
ret[:authInfo] = authInfo.xpath('domain:pw', EPPClient::SCHEMAS_URL).text
|
175
176
|
end
|
176
|
-
|
177
|
+
ret
|
177
178
|
end
|
178
179
|
|
179
180
|
def domain_nss_xml(xml, nss) #:nodoc:
|
180
181
|
xml.ns do
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
182
|
+
if nss.first.is_a?(Hash)
|
183
|
+
nss.each do |ns|
|
184
|
+
xml.hostAttr do
|
185
|
+
xml.hostName ns[:hostName]
|
186
|
+
if ns.key?(:hostAddrv4)
|
187
|
+
ns[:hostAddrv4].each do |v4|
|
188
|
+
xml.hostAddr({ :ip => :v4 }, v4)
|
189
|
+
end
|
190
|
+
end
|
191
|
+
if ns.key?(:hostAddrv6)
|
192
|
+
ns[:hostAddrv6].each do |v6|
|
193
|
+
xml.hostAddr({ :ip => :v6 }, v6)
|
194
|
+
end
|
195
|
+
end
|
196
|
+
end
|
197
|
+
end
|
198
|
+
else
|
199
|
+
nss.each do |ns|
|
200
|
+
xml.hostObj ns
|
201
|
+
end
|
202
|
+
end
|
202
203
|
end
|
203
204
|
end
|
204
205
|
|
205
206
|
def domain_contacts_xml(xml, args) #:nodoc:
|
206
|
-
args.each do |type,contacts|
|
207
|
-
|
208
|
-
|
209
|
-
|
207
|
+
args.each do |type, contacts|
|
208
|
+
contacts.each do |c|
|
209
|
+
xml.contact({ :type => type }, c)
|
210
|
+
end
|
210
211
|
end
|
211
212
|
end
|
212
213
|
|
213
214
|
def domain_create_xml(args) #:nodoc:
|
214
215
|
command do |xml|
|
215
|
-
|
216
|
-
|
217
|
-
|
216
|
+
xml.create do
|
217
|
+
xml.create('xmlns' => EPPClient::SCHEMAS_URL['domain-1.0']) do
|
218
|
+
xml.name args[:name]
|
218
219
|
|
219
|
-
|
220
|
-
|
221
|
-
|
220
|
+
if args.key?(:period)
|
221
|
+
xml.period({ :unit => args[:period][:unit] }, args[:period][:number])
|
222
|
+
end
|
222
223
|
|
223
|
-
|
224
|
-
domain_nss_xml(xml, args[:ns])
|
225
|
-
end
|
224
|
+
domain_nss_xml(xml, args[:ns]) if args.key?(:ns)
|
226
225
|
|
227
|
-
|
226
|
+
xml.registrant args[:registrant] if args.key?(:registrant)
|
228
227
|
|
229
|
-
|
230
|
-
domain_contacts_xml(xml, args[:contacts])
|
231
|
-
end
|
228
|
+
domain_contacts_xml(xml, args[:contacts]) if args.key?(:contacts)
|
232
229
|
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
230
|
+
xml.authInfo do
|
231
|
+
xml.pw args[:authInfo]
|
232
|
+
end
|
233
|
+
end
|
234
|
+
end
|
238
235
|
end
|
239
236
|
end
|
240
237
|
|
@@ -278,19 +275,20 @@ module EPPClient
|
|
278
275
|
def domain_create_process(xml) #:nodoc:
|
279
276
|
dom = xml.xpath('epp:resData/domain:creData', EPPClient::SCHEMAS_URL)
|
280
277
|
ret = {
|
281
|
-
|
282
|
-
|
283
|
-
|
278
|
+
:name => dom.xpath('domain:name', EPPClient::SCHEMAS_URL).text,
|
279
|
+
:crDate => DateTime.parse(dom.xpath('domain:crDate', EPPClient::SCHEMAS_URL).text),
|
280
|
+
:upDate => DateTime.parse(dom.xpath('domain:crDate', EPPClient::SCHEMAS_URL).text),
|
284
281
|
}
|
282
|
+
ret
|
285
283
|
end
|
286
284
|
|
287
285
|
def domain_delete_xml(domain) #:nodoc:
|
288
286
|
command do |xml|
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
287
|
+
xml.delete do
|
288
|
+
xml.delete('xmlns' => EPPClient::SCHEMAS_URL['domain-1.0']) do
|
289
|
+
xml.name domain
|
290
|
+
end
|
291
|
+
end
|
294
292
|
end
|
295
293
|
end
|
296
294
|
|
@@ -307,44 +305,41 @@ module EPPClient
|
|
307
305
|
|
308
306
|
def domain_update_xml(args) #:nodoc:
|
309
307
|
command do |xml|
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
end
|
346
|
-
end
|
347
|
-
end
|
308
|
+
xml.update do
|
309
|
+
xml.update('xmlns' => EPPClient::SCHEMAS_URL['domain-1.0']) do
|
310
|
+
xml.name args[:name]
|
311
|
+
[:add, :rem].each do |ar|
|
312
|
+
next unless args.key?(ar) && (args[ar].key?(:ns) || args[ar].key?(:contacts) || args[ar].key?(:status))
|
313
|
+
xml.__send__(ar) do
|
314
|
+
domain_nss_xml(xml, args[ar][:ns]) if args[ar].key?(:ns)
|
315
|
+
if args[ar].key?(:contacts)
|
316
|
+
domain_contacts_xml(xml, args[ar][:contacts])
|
317
|
+
end
|
318
|
+
if args[ar].key?(:status)
|
319
|
+
args[ar][:status].each do |st, text|
|
320
|
+
if text.nil?
|
321
|
+
xml.status(:s => st)
|
322
|
+
else
|
323
|
+
xml.status({ :s => st }, text)
|
324
|
+
end
|
325
|
+
end
|
326
|
+
end
|
327
|
+
end
|
328
|
+
end
|
329
|
+
if args.key?(:chg) && (args[:chg].key?(:registrant) || args[:chg].key?(:authInfo))
|
330
|
+
xml.chg do
|
331
|
+
if args[:chg].key?(:registrant)
|
332
|
+
xml.registrant args[:chg][:registrant]
|
333
|
+
end
|
334
|
+
if args[:chg].key?(:authInfo)
|
335
|
+
xml.authInfo do
|
336
|
+
xml.pw args[:chg][:authInfo]
|
337
|
+
end
|
338
|
+
end
|
339
|
+
end
|
340
|
+
end
|
341
|
+
end
|
342
|
+
end
|
348
343
|
end
|
349
344
|
end
|
350
345
|
|
@@ -383,54 +378,54 @@ module EPPClient
|
|
383
378
|
get_result(response)
|
384
379
|
end
|
385
380
|
|
386
|
-
|
387
381
|
def domain_pending_action_process(xml) #:nodoc:
|
388
382
|
dom = xml.xpath('epp:resData/domain:panData', EPPClient::SCHEMAS_URL)
|
389
383
|
ret = {
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
384
|
+
:name => dom.xpath('domain:name', EPPClient::SCHEMAS_URL).text,
|
385
|
+
:paResult => dom.xpath('domain:name', EPPClient::SCHEMAS_URL).attribute('paResult').value,
|
386
|
+
:paTRID => get_trid(dom.xpath('domain:paTRID', EPPClient::SCHEMAS_URL)),
|
387
|
+
:paDate => DateTime.parse(dom.xpath('domain:paDate', EPPClient::SCHEMAS_URL).text),
|
394
388
|
}
|
389
|
+
ret
|
395
390
|
end
|
396
391
|
|
397
392
|
def domain_transfer_response(xml) #:nodoc:
|
398
393
|
dom = xml.xpath('epp:resData/domain:trnData', EPPClient::SCHEMAS_URL)
|
399
394
|
ret = {
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
395
|
+
:name => dom.xpath('domain:name', EPPClient::SCHEMAS_URL).text,
|
396
|
+
:trStatus => dom.xpath('domain:trStatus', EPPClient::SCHEMAS_URL).text,
|
397
|
+
:reID => dom.xpath('domain:reID', EPPClient::SCHEMAS_URL).text,
|
398
|
+
:reDate => DateTime.parse(dom.xpath('domain:reDate', EPPClient::SCHEMAS_URL).text),
|
399
|
+
:acID => dom.xpath('domain:acID', EPPClient::SCHEMAS_URL).text,
|
400
|
+
:acDate => DateTime.parse(dom.xpath('domain:acDate', EPPClient::SCHEMAS_URL).text),
|
406
401
|
}
|
407
402
|
if (exDate = dom.xpath('domain:exDate', EPPClient::SCHEMAS_URL)).size > 0
|
408
|
-
|
403
|
+
ret[:exDate] = DateTime.parse(exDate)
|
409
404
|
end
|
410
405
|
ret
|
411
406
|
end
|
412
407
|
|
413
408
|
def domain_transfer_xml(args) # :nodoc:
|
414
409
|
command do |xml|
|
415
|
-
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
|
410
|
+
xml.transfer('op' => args[:op]) do
|
411
|
+
xml.transfer('xmlns' => EPPClient::SCHEMAS_URL['domain-1.0']) do
|
412
|
+
xml.name(args[:name])
|
413
|
+
if args.key?(:period)
|
414
|
+
xml.period('unit' => args[:period][:unit]) do
|
415
|
+
args[:period][:number]
|
416
|
+
end
|
417
|
+
end
|
418
|
+
if args.key?(:authInfo)
|
419
|
+
xml.authInfo do
|
420
|
+
if args.key?(:roid)
|
421
|
+
xml.pw({ :roid => args[:roid] }, args[:authInfo])
|
422
|
+
else
|
423
|
+
xml.pw(args[:authInfo])
|
424
|
+
end
|
425
|
+
end
|
426
|
+
end
|
427
|
+
end
|
428
|
+
end
|
434
429
|
end
|
435
430
|
end
|
436
431
|
|