kono_epp_client 0.0.2 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/README.md +2 -0
- data/lib/epp/epp_command/check_contacts.rb +17 -0
- data/lib/epp/epp_command/create_contact.rb +87 -0
- data/lib/epp/epp_command/create_domain.rb +44 -0
- data/lib/epp/epp_command/delete_contact.rb +15 -0
- data/lib/epp/epp_command/delete_domain.rb +14 -0
- data/lib/epp/epp_command/hello.rb +13 -0
- data/lib/epp/epp_command/info_contact.rb +15 -0
- data/lib/epp/epp_command/info_domain.rb +14 -0
- data/lib/epp/epp_command/kono_epp_check_domains.rb +18 -0
- data/lib/epp/epp_command/login.rb +79 -0
- data/lib/epp/epp_command/logout.rb +10 -0
- data/lib/epp/epp_command/poll.rb +16 -0
- data/lib/epp/epp_command/transfer_domain.rb +36 -0
- data/lib/epp/epp_command/update_contact.rb +115 -0
- data/lib/epp/epp_command/update_domain.rb +104 -0
- data/lib/epp/epp_command.rb +15 -0
- data/lib/epp/exceptions.rb +28 -0
- data/lib/epp/server.rb +295 -0
- data/lib/epp/transport/http.rb +71 -0
- data/lib/epp/transport/tcp.rb +93 -0
- data/lib/epp/transport.rb +13 -0
- data/lib/kono_epp_client.rb +5 -14
- data/lib/require_parameters.rb +14 -0
- data/spec/epp/epp_command/kono_epp_check_contacts_spec.rb +25 -0
- data/spec/epp/epp_command/kono_epp_check_domains_spec.rb +16 -0
- data/spec/epp/epp_command/kono_epp_create_domain_spec.rb +37 -0
- data/spec/epp/epp_command/kono_epp_transfer_domain_spec.rb +33 -0
- data/spec/epp/epp_command/kono_epp_update_domain_spec.rb +125 -0
- data/spec/epp/kono_epp_command_spec.rb +16 -0
- data/spec/fixtures/snapshots/kono_epp_check_contacts/_construct.xml.snap +13 -0
- data/spec/fixtures/snapshots/kono_epp_check_domains/_construct.xml.snap +11 -0
- data/spec/fixtures/snapshots/kono_epp_create_domain/_create.xml.snap +29 -0
- data/spec/fixtures/snapshots/kono_epp_transfer_domain/_con_extension_construct.xml.snap +23 -0
- data/spec/fixtures/snapshots/kono_epp_transfer_domain/_construct.xml.snap +13 -0
- data/spec/fixtures/snapshots/kono_epp_update_domain/_restore_esiste_l'estensione_di_restore.xml.snap +15 -0
- data/spec/fixtures/snapshots/kono_epp_update_domain/_update_auth_info_cambia_AUTH_INFO.xml.snap +15 -0
- data/spec/fixtures/snapshots/kono_epp_update_domain/_update_auth_info_con_nuovo_registrant_cambia_REGISTRANT.xml.snap +16 -0
- data/spec/fixtures/snapshots/kono_epp_update_domain/_update_contacts_cambia_ADMIN_TECH.xml.snap +18 -0
- data/spec/fixtures/snapshots/kono_epp_update_domain/_update_nameservers_aggiunge_e_rimuove_ns.xml.snap +28 -0
- data/spec/fixtures/snapshots/kono_epp_update_domain/_update_status_cambia_status.xml.snap +16 -0
- data/spec/spec_helper.rb +111 -0
- data/spec/support/context.rb +15 -0
- data/spec/support/matchers.rb +6 -0
- data/spec/support/snapshot.rb +20 -0
- metadata +157 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 8a4bd5d2aace0903e87fdb0dfa0e5c0b6d6c5252bc174536eeae420c07334197
|
4
|
+
data.tar.gz: e40f8a2a045e31022ab9dcf011e9a5b6eb03f89f798054e9b6d096263583cce8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c13b257e76b8e742e42f6636e00c9b138ccedabedb26f96dfadcc68ab9b3b7f535258c27789aaa5a803e2265dec08ace2ad9bd4abf2791dbfb4080207c4fd393
|
7
|
+
data.tar.gz: e782dd2e967c202cc9e85c37e0ecc7befc605d4a77f3b83c86878dc3a002433c99cb70441a5cf81e15b631fa8433bf9e534f60a86f4c06bacb7679b14a57ce66
|
data/README.md
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
class KonoEppCheckContacts < KonoEppCommand
|
2
|
+
def initialize(ids)
|
3
|
+
super(nil, nil)
|
4
|
+
|
5
|
+
command = root.elements['command']
|
6
|
+
|
7
|
+
info = command.add_element "check"
|
8
|
+
|
9
|
+
contact_check = info.add_element("contact:check", {"xmlns:contact" => "urn:ietf:params:xml:ns:contact-1.0"})
|
10
|
+
|
11
|
+
ids.each do |t|
|
12
|
+
contact_id = contact_check.add_element "contact:id"
|
13
|
+
contact_id.text = t
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,87 @@
|
|
1
|
+
class KonoEppCreateContact < KonoEppCommand
|
2
|
+
def initialize( options )
|
3
|
+
super( nil, nil )
|
4
|
+
|
5
|
+
command = root.elements['command']
|
6
|
+
|
7
|
+
create = command.add_element "create"
|
8
|
+
|
9
|
+
contact_create = create.add_element( "contact:create", { "xmlns:contact" => "urn:ietf:params:xml:ns:contact-1.0",
|
10
|
+
"xsi:schemaLocation" => "urn:ietf:params:xml:ns:contact-1.0 contact-1.0.xsd" } )
|
11
|
+
|
12
|
+
puts options
|
13
|
+
id = contact_create.add_element "contact:id"
|
14
|
+
id.text = options[:id]
|
15
|
+
|
16
|
+
postal_info = contact_create.add_element "contact:postalInfo", { "type" => "loc" }
|
17
|
+
|
18
|
+
name = postal_info.add_element "contact:name"
|
19
|
+
name.text = options[:name]
|
20
|
+
|
21
|
+
unless options[:organization].blank?
|
22
|
+
organization = postal_info.add_element "contact:org"
|
23
|
+
organization.text = options[:organization]
|
24
|
+
end
|
25
|
+
|
26
|
+
addr = postal_info.add_element "contact:addr"
|
27
|
+
|
28
|
+
unless options[:street].blank?
|
29
|
+
street = addr.add_element "contact:street"
|
30
|
+
street.text = options[:street]
|
31
|
+
end
|
32
|
+
|
33
|
+
city = addr.add_element "contact:city"
|
34
|
+
city.text = options[:city]
|
35
|
+
|
36
|
+
unless options[:state].blank?
|
37
|
+
state = addr.add_element "contact:sp"
|
38
|
+
state.text = options[:state]
|
39
|
+
end
|
40
|
+
|
41
|
+
unless options[:postal_code].blank?
|
42
|
+
postal_code = addr.add_element "contact:pc"
|
43
|
+
postal_code.text = options[:postal_code]
|
44
|
+
end
|
45
|
+
|
46
|
+
country_code = addr.add_element "contact:cc"
|
47
|
+
country_code.text = options[:country_code]
|
48
|
+
|
49
|
+
if options[:voice]
|
50
|
+
voice = contact_create.add_element "contact:voice"
|
51
|
+
voice.text = options[:voice]
|
52
|
+
end
|
53
|
+
|
54
|
+
if options[:fax]
|
55
|
+
fax = contact_create.add_element "contact:fax"
|
56
|
+
fax.text = options[:fax]
|
57
|
+
end
|
58
|
+
|
59
|
+
email = contact_create.add_element "contact:email"
|
60
|
+
email.text = options[:email]
|
61
|
+
|
62
|
+
auth_info = contact_create.add_element "contact:authInfo"
|
63
|
+
pw = auth_info.add_element "contact:pw"
|
64
|
+
pw.text = options[:auth_info]
|
65
|
+
|
66
|
+
# FIXME
|
67
|
+
extension = command.add_element "extension"
|
68
|
+
extension_create = extension.add_element "extcon:create", { "xmlns:extcon" => 'http://www.nic.it/ITNIC-EPP/extcon-1.0',
|
69
|
+
"xsi:schemaLocation" => 'http://www.nic.it/ITNIC-EPP/extcon-1.0 extcon-1.0.xsd' }
|
70
|
+
|
71
|
+
publish = extension_create.add_element "extcon:consentForPublishing"
|
72
|
+
publish.text = options[:publish] == "1" ? "true" : "false"
|
73
|
+
|
74
|
+
if options[:is_registrant]
|
75
|
+
extcon_registrant = extension_create.add_element "extcon:registrant"
|
76
|
+
|
77
|
+
extcon_nationality = extcon_registrant.add_element "extcon:nationalityCode"
|
78
|
+
extcon_nationality.text = options[:nationality]
|
79
|
+
|
80
|
+
extcon_entity = extcon_registrant.add_element "extcon:entityType"
|
81
|
+
extcon_entity.text = options[:entity_type]
|
82
|
+
|
83
|
+
extcon_regcode = extcon_registrant.add_element "extcon:regCode"
|
84
|
+
extcon_regcode.text = options[:reg_code]
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
class KonoEppCreateDomain < KonoEppCommand
|
2
|
+
def initialize( options )
|
3
|
+
super( nil, nil )
|
4
|
+
|
5
|
+
command = root.elements['command']
|
6
|
+
create = command.add_element( "create" )
|
7
|
+
|
8
|
+
|
9
|
+
domain_create = create.add_element( "domain:create", { "xmlns:domain" => "urn:ietf:params:xml:ns:domain-1.0",
|
10
|
+
"xsi:schemaLocation" => "urn:ietf:params:xml:ns:domain-1.0 domain-1.0.xsd" } )
|
11
|
+
|
12
|
+
name = domain_create.add_element "domain:name"
|
13
|
+
name.text = options[:name]
|
14
|
+
|
15
|
+
domain_ns = domain_create.add_element "domain:ns"
|
16
|
+
|
17
|
+
options[:nameservers].each do |ns|
|
18
|
+
host_attr = domain_ns.add_element "domain:hostAttr"
|
19
|
+
host_name = host_attr.add_element "domain:hostName"
|
20
|
+
|
21
|
+
host_name.text = ns[0]
|
22
|
+
|
23
|
+
# FIXME IPv6
|
24
|
+
if ns[1]
|
25
|
+
host_addr = host_attr.add_element "domain:hostAddr", {"ip" => "v4"}
|
26
|
+
host_addr.text = ns[1]
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
domain_registrant = domain_create.add_element "domain:registrant"
|
31
|
+
domain_registrant.text = options[:registrant]
|
32
|
+
|
33
|
+
domain_contact = domain_create.add_element "domain:contact", { "type" => "admin" }
|
34
|
+
domain_contact.text = options[:admin]
|
35
|
+
|
36
|
+
domain_contact = domain_create.add_element "domain:contact", { "type" => "tech" }
|
37
|
+
domain_contact.text = options[:tech]
|
38
|
+
|
39
|
+
domain_authinfo = domain_create.add_element "domain:authInfo"
|
40
|
+
|
41
|
+
domain_pw = domain_authinfo.add_element "domain:pw"
|
42
|
+
domain_pw.text = options[:authinfo]
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
class KonoEppDeleteContact < KonoEppCommand
|
2
|
+
def initialize( id )
|
3
|
+
super( nil, nil )
|
4
|
+
|
5
|
+
command = root.elements['command']
|
6
|
+
|
7
|
+
delete = command.add_element "delete"
|
8
|
+
|
9
|
+
contact_delete = delete.add_element( "contact:delete", { "xmlns:contact" => "urn:ietf:params:xml:ns:contact-1.0",
|
10
|
+
"xsi:schemaLocation" => "urn:ietf:params:xml:ns:contact-1.0 contact-1.0.xsd" } )
|
11
|
+
|
12
|
+
contact_id = contact_delete.add_element "contact:id"
|
13
|
+
contact_id.text = id
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
class KonoEppDeleteDomain < KonoEppCommand
|
2
|
+
def initialize( name )
|
3
|
+
super( nil, nil )
|
4
|
+
|
5
|
+
command = root.elements['command']
|
6
|
+
delete = command.add_element( "delete" )
|
7
|
+
|
8
|
+
domain_delete = delete.add_element( "domain:delete", { "xmlns:domain" => "urn:ietf:params:xml:ns:domain-1.0",
|
9
|
+
"xsi:schemaLocation" => "urn:ietf:params:xml:ns:domain-1.0 domain-1.0.xsd" } )
|
10
|
+
|
11
|
+
domain_name = domain_delete.add_element "domain:name"
|
12
|
+
domain_name.text = name
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
class KonoEppHello < REXML::Document
|
2
|
+
def initialize
|
3
|
+
super
|
4
|
+
|
5
|
+
add( XMLDecl.new( "1.0", "UTF-8", "no" ) )
|
6
|
+
|
7
|
+
epp = add_element( "epp", { "xmlns" => "urn:ietf:params:xml:ns:epp-1.0",
|
8
|
+
"xmlns:xsi" => "http://www.w3.org/2001/XMLSchema-instance",
|
9
|
+
"xsi:schemaLocation" => "urn:ietf:params:xml:ns:epp-1.0 epp-1.0.xsd" } )
|
10
|
+
|
11
|
+
epp.add_element( "hello" )
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
class KonoEppInfoContact < KonoEppCommand
|
2
|
+
def initialize( id )
|
3
|
+
super( nil, nil )
|
4
|
+
|
5
|
+
command = root.elements['command']
|
6
|
+
|
7
|
+
info = command.add_element "info"
|
8
|
+
|
9
|
+
contact_info = info.add_element( "contact:info", { "xmlns:contact" => "urn:ietf:params:xml:ns:contact-1.0",
|
10
|
+
"xsi:schemaLocation" => "urn:ietf:params:xml:ns:contact-1.0 contact-1.0.xsd" } )
|
11
|
+
|
12
|
+
contact_id = contact_info.add_element "contact:id"
|
13
|
+
contact_id.text = id
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
class KonoEppInfoDomain < KonoEppCommand
|
2
|
+
def initialize( name )
|
3
|
+
super( nil, nil )
|
4
|
+
|
5
|
+
command = root.elements['command']
|
6
|
+
info = command.add_element( "info" )
|
7
|
+
|
8
|
+
domain_info = info.add_element( "domain:info", { "xmlns:domain" => "urn:ietf:params:xml:ns:domain-1.0",
|
9
|
+
"xsi:schemaLocation" => "urn:ietf:params:xml:ns:domain-1.0 domain-1.0.xsd" } )
|
10
|
+
|
11
|
+
domain_name = domain_info.add_element "domain:name", { "hosts" => "all" }
|
12
|
+
domain_name.text = name
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class KonoEppCheckDomains < KonoEppCommand
|
4
|
+
def initialize( *domains )
|
5
|
+
super( nil, nil )
|
6
|
+
|
7
|
+
command = root.elements['command']
|
8
|
+
check = command.add_element( "check" )
|
9
|
+
|
10
|
+
domain_check = check.add_element( "domain:check", { "xmlns:domain" => "urn:ietf:params:xml:ns:domain-1.0",
|
11
|
+
"xsi:schemaLocation" => "urn:ietf:params:xml:ns:domain-1.0 domain-1.0.xsd" } )
|
12
|
+
|
13
|
+
domains.each do |d|
|
14
|
+
domain_name = domain_check.add_element "domain:name"
|
15
|
+
domain_name.text = d
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
class KonoEppLogin < KonoEppCommand
|
2
|
+
def initialize( id = nil, password = nil )
|
3
|
+
super( nil, nil )
|
4
|
+
|
5
|
+
@command = root.elements['command']
|
6
|
+
@login = @command.add_element( "login" )
|
7
|
+
|
8
|
+
@login.add_element( "clID" ).text = id if id
|
9
|
+
@login.add_element( "pw" ).text = password if password
|
10
|
+
|
11
|
+
@command.add_element( "clTRID" ).text = "ABC-12345"
|
12
|
+
end
|
13
|
+
|
14
|
+
def version=( value )
|
15
|
+
@options = @login.add_element( "options" ) unless @options
|
16
|
+
@options.add_element( "version") unless @options.elements['version']
|
17
|
+
|
18
|
+
@options.elements['version'].text = value
|
19
|
+
end
|
20
|
+
|
21
|
+
def version
|
22
|
+
version = @options.elements['version']
|
23
|
+
|
24
|
+
version.text if version
|
25
|
+
end
|
26
|
+
|
27
|
+
def lang=( value )
|
28
|
+
@options = @login.add_element( "options" ) unless @options
|
29
|
+
@options.add_element( "lang") unless @options.elements['lang']
|
30
|
+
|
31
|
+
@options.elements['lang'].text = value
|
32
|
+
end
|
33
|
+
|
34
|
+
def lang
|
35
|
+
lang = @options.elements['lang']
|
36
|
+
|
37
|
+
lang.text if version
|
38
|
+
end
|
39
|
+
|
40
|
+
def new_password=( value )
|
41
|
+
newpw = @login.add_element( "newPW" )
|
42
|
+
newpw.text = value
|
43
|
+
end
|
44
|
+
|
45
|
+
def services=( services )
|
46
|
+
svcs = @login.add_element( "svcs" ) unless @login.elements['svcs']
|
47
|
+
services.each {|service| svcs.add_element("objURI").text = service }
|
48
|
+
end
|
49
|
+
|
50
|
+
def services
|
51
|
+
svcs = @login.elements['svcs']
|
52
|
+
|
53
|
+
res = []
|
54
|
+
svcs.elements.each( "objURI" ) { |obj| res << obj.text } if svcs
|
55
|
+
|
56
|
+
return res
|
57
|
+
end
|
58
|
+
|
59
|
+
def extensions=( extensions )
|
60
|
+
svcs = @login.elements['svcs']
|
61
|
+
|
62
|
+
svcs = @login.add_element( "svcs" ) unless svcs
|
63
|
+
|
64
|
+
# Include schema extensions for registrars which require it
|
65
|
+
extensions_container = svcs.add_element("svcExtension") unless extensions.empty?
|
66
|
+
|
67
|
+
for uri in extensions
|
68
|
+
extensions_container.add_element("extURI").text = uri
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def extensions
|
73
|
+
svc_extension = @login.elements['svcs/svcExtension']
|
74
|
+
|
75
|
+
svc_extension.elements.each( "extURI" ) { |obj| res << obj.text } if svcs_extension
|
76
|
+
|
77
|
+
return res
|
78
|
+
end
|
79
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
class KonoEppPoll < KonoEppCommand
|
2
|
+
def initialize( op = :req )
|
3
|
+
super( nil, nil )
|
4
|
+
|
5
|
+
command = root.elements['command']
|
6
|
+
poll = command.add_element( "poll" )
|
7
|
+
|
8
|
+
poll.add_attribute( "op", op.to_s )
|
9
|
+
end
|
10
|
+
|
11
|
+
def ack_id=( id )
|
12
|
+
poll = root.elements['command/poll']
|
13
|
+
|
14
|
+
poll.add_attribute( "msgID", id )
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
class KonoEppTransferDomain < KonoEppCommand
|
2
|
+
def initialize(name, authinfo, op, extension: nil)
|
3
|
+
super(nil, nil)
|
4
|
+
|
5
|
+
command = root.elements['command']
|
6
|
+
transfer = command.add_element("transfer", {"op" => op})
|
7
|
+
# FIXME dovremmo controllare che le possibili opzioni di OP sono 'request', 'cancel', 'approve', 'reject', 'query'
|
8
|
+
|
9
|
+
domain_transfer = transfer.add_element("domain:transfer", {"xmlns:domain" => "urn:ietf:params:xml:ns:domain-1.0",
|
10
|
+
"xsi:schemaLocation" => "urn:ietf:params:xml:ns:domain-1.0 domain-1.0.xsd"})
|
11
|
+
|
12
|
+
domain_name = domain_transfer.add_element "domain:name"
|
13
|
+
domain_name.text = name
|
14
|
+
|
15
|
+
domain_authinfo = domain_transfer.add_element "domain:authInfo"
|
16
|
+
domain_pw = domain_authinfo.add_element "domain:pw"
|
17
|
+
|
18
|
+
domain_pw.text = authinfo
|
19
|
+
|
20
|
+
## Questa estensione è per Modifica del Registrar con contestuale modifica del Registrante
|
21
|
+
if extension
|
22
|
+
|
23
|
+
ext_elm = command.add_element "extension"
|
24
|
+
ext_trade = ext_elm.add_element "extdom:trade", {"xmlns:extdom"=>"http://www.nic.it/ITNIC-EPP/extdom-2.0",
|
25
|
+
"xsi:schemaLocation" => "http://www.nic.it/ITNIC-EPP/extdom-2.0 extdom-2.0.xsd"}
|
26
|
+
|
27
|
+
transfer_trade = ext_trade.add_element "extdom:transferTrade"
|
28
|
+
transfer_trade.add_element("extdom:newRegistrant").text = extension[:new_registrant] if extension[:new_registrant]
|
29
|
+
if extension[:new_auth_info]
|
30
|
+
transfer_trade.add_element("extdom:newAuthInfo").add_element("extdom:pw").tap{|x|x.text=extension[:new_auth_info]}
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,115 @@
|
|
1
|
+
class KonoEppUpdateContact < KonoEppCommand
|
2
|
+
|
3
|
+
# TODO: Add and remove fields
|
4
|
+
def initialize( options )
|
5
|
+
super( nil, nil )
|
6
|
+
|
7
|
+
command = root.elements['command']
|
8
|
+
|
9
|
+
update = command.add_element "update"
|
10
|
+
|
11
|
+
contact_update = update.add_element( "contact:update", { "xmlns:contact" => "urn:ietf:params:xml:ns:contact-1.0",
|
12
|
+
"xsi:schemaLocation" => "urn:ietf:params:xml:ns:contact-1.0 contact-1.0.xsd" } )
|
13
|
+
|
14
|
+
id = contact_update.add_element "contact:id"
|
15
|
+
id.text = options[:id]
|
16
|
+
|
17
|
+
contact_chg = contact_update.add_element "contact:chg"
|
18
|
+
|
19
|
+
unless options[:name].blank? \
|
20
|
+
and options[:organization].blank? \
|
21
|
+
and options[:address].blank? \
|
22
|
+
and options[:city].blank? \
|
23
|
+
and options[:state].blank? \
|
24
|
+
and options[:postal_code].blank? \
|
25
|
+
and options[:country].blank?
|
26
|
+
|
27
|
+
postal_info = contact_chg.add_element "contact:postalInfo", { "type" => "loc" }
|
28
|
+
|
29
|
+
unless options[:name].blank?
|
30
|
+
name = postal_info.add_element "contact:name"
|
31
|
+
name.text = options[:name]
|
32
|
+
end
|
33
|
+
|
34
|
+
unless options[:organization].blank?
|
35
|
+
organization = postal_info.add_element "contact:org"
|
36
|
+
organization.text = options[:organization]
|
37
|
+
end
|
38
|
+
|
39
|
+
# NOTE: city and country are REQUIRED
|
40
|
+
unless options[:address].blank? \
|
41
|
+
and options[:city].blank? \
|
42
|
+
and options[:state].blank? \
|
43
|
+
and options[:postal_code].blank? \
|
44
|
+
and options[:country].blank?
|
45
|
+
|
46
|
+
addr = postal_info.add_element "contact:addr"
|
47
|
+
|
48
|
+
unless options[:address].blank?
|
49
|
+
street = addr.add_element "contact:street"
|
50
|
+
street.text = options[:address]
|
51
|
+
end
|
52
|
+
|
53
|
+
city = addr.add_element "contact:city"
|
54
|
+
city.text = options[:city]
|
55
|
+
|
56
|
+
unless options[:state].blank?
|
57
|
+
state = addr.add_element "contact:sp"
|
58
|
+
state.text = options[:state]
|
59
|
+
end
|
60
|
+
|
61
|
+
unless options[:postal_code].blank?
|
62
|
+
postal_code = addr.add_element "contact:pc"
|
63
|
+
postal_code.text = options[:postal_code]
|
64
|
+
end
|
65
|
+
|
66
|
+
country_code = addr.add_element "contact:cc"
|
67
|
+
country_code.text = options[:country]
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
if options[:voice]
|
72
|
+
voice = contact_chg.add_element "contact:voice"
|
73
|
+
voice.text = options[:voice]
|
74
|
+
end
|
75
|
+
|
76
|
+
if options[:fax]
|
77
|
+
fax = contact_chg.add_element "contact:fax"
|
78
|
+
fax.text = options[:fax]
|
79
|
+
end
|
80
|
+
|
81
|
+
if options[:email]
|
82
|
+
email = contact_chg.add_element "contact:email"
|
83
|
+
email.text = options[:email]
|
84
|
+
end
|
85
|
+
|
86
|
+
|
87
|
+
unless not options.has_key?( :publish ) \
|
88
|
+
and options[:nationality].blank? \
|
89
|
+
and options[:entity_type].blank? \
|
90
|
+
and options[:reg_code].blank?
|
91
|
+
|
92
|
+
# FIXME
|
93
|
+
extension = command.add_element "extension"
|
94
|
+
extension_update = extension.add_element "extcon:update", { "xmlns:extcon" => 'http://www.nic.it/ITNIC-EPP/extcon-1.0',
|
95
|
+
"xsi:schemaLocation" => 'http://www.nic.it/ITNIC-EPP/extcon-1.0 extcon-1.0.xsd' }
|
96
|
+
if options.has_key?( :publish )
|
97
|
+
publish = extension_update.add_element "extcon:consentForPublishing"
|
98
|
+
publish.text = options[:publish]
|
99
|
+
end
|
100
|
+
|
101
|
+
if options[:becomes_registrant]
|
102
|
+
extcon_registrant = extension_update.add_element "extcon:registrant"
|
103
|
+
|
104
|
+
extcon_nationality = extcon_registrant.add_element "extcon:nationalityCode"
|
105
|
+
extcon_nationality.text = options[:nationality]
|
106
|
+
|
107
|
+
extcon_entity = extcon_registrant.add_element "extcon:entityType"
|
108
|
+
extcon_entity.text = options[:entity_type]
|
109
|
+
|
110
|
+
extcon_regcode = extcon_registrant.add_element "extcon:regCode"
|
111
|
+
extcon_regcode.text = options[:reg_code]
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
@@ -0,0 +1,104 @@
|
|
1
|
+
class KonoEppUpdateDomain < KonoEppCommand
|
2
|
+
def initialize(options)
|
3
|
+
super(nil, nil)
|
4
|
+
|
5
|
+
command = root.elements['command']
|
6
|
+
update = command.add_element("update")
|
7
|
+
|
8
|
+
domain_update = update.add_element("domain:update", {"xmlns:domain" => "urn:ietf:params:xml:ns:domain-1.0",
|
9
|
+
"xsi:schemaLocation" => "urn:ietf:params:xml:ns:domain-1.0 domain-1.0.xsd"})
|
10
|
+
|
11
|
+
name = domain_update.add_element "domain:name"
|
12
|
+
name.text = options[:name]
|
13
|
+
|
14
|
+
if not options[:add_nameservers].blank? or options[:add_admin] or options[:add_tech] or options[:add_status]
|
15
|
+
# <domain:add>
|
16
|
+
domain_add = domain_update.add_element "domain:add"
|
17
|
+
|
18
|
+
unless options[:add_nameservers].blank?
|
19
|
+
domain_add_ns = domain_add.add_element "domain:ns"
|
20
|
+
|
21
|
+
options[:add_nameservers].each do |ns|
|
22
|
+
host_attr = domain_add_ns.add_element "domain:hostAttr"
|
23
|
+
host_name = host_attr.add_element "domain:hostName"
|
24
|
+
|
25
|
+
host_name.text = ns[0]
|
26
|
+
|
27
|
+
# FIXME IPv6
|
28
|
+
if ns[1]
|
29
|
+
host_addr = host_attr.add_element "domain:hostAddr", {"ip" => "v4"}
|
30
|
+
host_addr.text = ns[1]
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
if options[:add_admin]
|
36
|
+
domain_contact = domain_add.add_element "domain:contact", {"type" => "admin"}
|
37
|
+
domain_contact.text = options[:add_admin]
|
38
|
+
end
|
39
|
+
|
40
|
+
if options[:add_status]
|
41
|
+
domain_add.add_element "domain:status", {"s" => options[:add_status]}
|
42
|
+
end
|
43
|
+
|
44
|
+
if options[:add_tech]
|
45
|
+
domain_contact = domain_add.add_element "domain:contact", {"type" => "tech"}
|
46
|
+
domain_contact.text = options[:add_tech]
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
if not options[:remove_nameservers].blank? or options[:remove_admin] or options[:remove_tech] or options[:remove_status]
|
51
|
+
# <domain:rem>
|
52
|
+
domain_remove = domain_update.add_element "domain:rem"
|
53
|
+
|
54
|
+
unless options[:remove_nameservers].blank?
|
55
|
+
domain_remove_ns = domain_remove.add_element "domain:ns"
|
56
|
+
|
57
|
+
options[:remove_nameservers].each do |ns_name|
|
58
|
+
host_attr = domain_remove_ns.add_element "domain:hostAttr"
|
59
|
+
host_name = host_attr.add_element "domain:hostName"
|
60
|
+
|
61
|
+
host_name.text = ns_name
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
if options[:remove_admin]
|
66
|
+
domain_contact = domain_remove.add_element "domain:contact", {"type" => "admin"}
|
67
|
+
domain_contact.text = options[:remove_admin]
|
68
|
+
end
|
69
|
+
|
70
|
+
if options[:remove_status]
|
71
|
+
domain_remove.add_element "domain:status", {"s" => options[:remove_status]}
|
72
|
+
end
|
73
|
+
|
74
|
+
if options[:remove_tech]
|
75
|
+
domain_contact = domain_remove.add_element "domain:contact", {"type" => "tech"}
|
76
|
+
domain_contact.text = options[:remove_tech]
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
# <domain:chg>
|
81
|
+
if options[:auth_info]
|
82
|
+
domain_change = domain_update.add_element "domain:chg"
|
83
|
+
|
84
|
+
if options[:registrant]
|
85
|
+
domain_registrant = domain_change.add_element "domain:registrant"
|
86
|
+
domain_registrant.text = options[:registrant]
|
87
|
+
end
|
88
|
+
|
89
|
+
domain_authinfo = domain_change.add_element "domain:authInfo"
|
90
|
+
|
91
|
+
domain_pw = domain_authinfo.add_element "domain:pw"
|
92
|
+
domain_pw.text = options[:auth_info]
|
93
|
+
end
|
94
|
+
|
95
|
+
if options[:restore]
|
96
|
+
command.add_element("extension").tap do |ext|
|
97
|
+
ext.add_element("rgp:update", {"xmlns:rgp"=>"urn:ietf:params:xml:ns:rgp-1.0",
|
98
|
+
"xsi:schemaLocation"=>"urn:ietf:params:xml:ns:rgp-1.0 rgp-1.0.xsd"}).
|
99
|
+
add_element("rgp:restore", {"op"=> "request"})
|
100
|
+
end
|
101
|
+
end
|
102
|
+
# TODO: Registrant
|
103
|
+
end
|
104
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
include REXML
|
2
|
+
|
3
|
+
class KonoEppCommand < REXML::Document
|
4
|
+
def initialize( source = nil, context = nil )
|
5
|
+
super( source, context )
|
6
|
+
|
7
|
+
add( XMLDecl.new( "1.0", "UTF-8", "no" ) )
|
8
|
+
|
9
|
+
epp = add_element( "epp", { "xmlns" => "urn:ietf:params:xml:ns:epp-1.0",
|
10
|
+
"xmlns:xsi" => "http://www.w3.org/2001/XMLSchema-instance",
|
11
|
+
"xsi:schemaLocation" => "urn:ietf:params:xml:ns:epp-1.0 epp-1.0.xsd" } )
|
12
|
+
|
13
|
+
epp.add_element( "command" )
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
class KonoEppErrorResponse < StandardError #:nodoc:
|
2
|
+
attr_accessor :response_xml, :response_code, :reason_code, :message
|
3
|
+
|
4
|
+
# Generic EPP exception. Accepts a response code and a message
|
5
|
+
def initialize(attributes = {})
|
6
|
+
@response_xml = attributes[:xml]
|
7
|
+
@response_code = attributes[:response_code]
|
8
|
+
@reason_code = attributes[:reason_code]
|
9
|
+
@message = attributes[:message]
|
10
|
+
end
|
11
|
+
|
12
|
+
def to_s
|
13
|
+
"#{@message} (reason: #{@reason_code} code: #{@response_code})"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
class KonoEppAuthenticationPasswordExpired < KonoEppErrorResponse ; end
|
18
|
+
class KonoEppLoginNeeded < KonoEppErrorResponse ; end
|
19
|
+
|
20
|
+
##
|
21
|
+
# Errore NIC:
|
22
|
+
# 2304=Object status prohibits operation 9022=Domain has status clientTransferProhibited
|
23
|
+
class KonoEppDomainHasStatusCliTransProhibited < KonoEppErrorResponse; end
|
24
|
+
|
25
|
+
##
|
26
|
+
# Errore NIC:
|
27
|
+
# 2304=Object status prohibits operation 9026=Domain has status clientUpdateProhibited
|
28
|
+
class KonoEppDomainHasStatusClientUpdateProhibited < KonoEppErrorResponse; end
|