kono_epp_client 0.0.3 → 0.1.1
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/CHANGELOG.md +17 -0
- data/README.md +16 -0
- data/Rakefile +6 -0
- data/kono_epp_client.gemspec +39 -0
- data/lib/epp/epp_command/check_contacts.rb +17 -0
- data/lib/epp/epp_command/create_domain.rb +4 -2
- data/lib/epp/epp_command/kono_epp_check_domains.rb +18 -0
- data/lib/epp/epp_command/transfer_domain.rb +22 -5
- data/lib/epp/epp_command/update_domain.rb +60 -44
- data/lib/epp/exceptions.rb +10 -0
- data/lib/epp/server.rb +116 -84
- data/lib/epp/transport/http.rb +10 -5
- data/lib/kono_epp_client/VERSION +1 -0
- data/lib/kono_epp_client/version.rb +3 -0
- data/lib/kono_epp_client.rb +5 -14
- 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/epp/server_spec.rb +69 -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
- data/spec/support/superdiff.rb +1 -0
- metadata +159 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 2c14b24f2b061e44d80192c0e9612382f6f3f2f159bb3266c3750968dc56640d
|
4
|
+
data.tar.gz: bb38b49904a2b3205a270fb0d308cab943a710c54879cc193d2bacc868d16c95
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4361d5610d860fd4d1bcadebe2dfb68eb19f52a12bd7e49eff016eec4ca756229efc69a3fc4473d9be7a4a622e7d993c52a8befb6bf0d7342e4c2fb28fbeee1d
|
7
|
+
data.tar.gz: 84f087306f9ce8b5fb2f16dc50e5022063e588b9535847e8edd85b6ad3fadc1d3f6e4d40815ff44e344a745101b4ec42ffb9377479ff0a8a240c801dc2fa6841
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
# Changelog
|
2
|
+
All notable changes to this project will be documented in this file. See [conventional commits](https://www.conventionalcommits.org/) for commit guidelines.
|
3
|
+
|
4
|
+
- - -
|
5
|
+
## 0.1.1 - 2024-05-23
|
6
|
+
#### Continuous Integration
|
7
|
+
- Cog typo - (f91c1b9) - Marino Bonetti
|
8
|
+
#### Features
|
9
|
+
- Add configuration options for transport - (d83d723) - Marino Bonetti
|
10
|
+
#### Miscellaneous Chores
|
11
|
+
- Configuration for development and deploy - (563edac) - Marino Bonetti
|
12
|
+
#### Tests
|
13
|
+
- Fix methods non present in std - (e0393ff) - Marino Bonetti
|
14
|
+
|
15
|
+
- - -
|
16
|
+
|
17
|
+
Changelog generated by [cocogitto](https://github.com/cocogitto/cocogitto).
|
data/README.md
CHANGED
@@ -1,2 +1,18 @@
|
|
1
1
|
# kono_epp_client
|
2
2
|
A simple EPP Client
|
3
|
+
|
4
|
+
|
5
|
+
|
6
|
+
## Development
|
7
|
+
Build dell'immagine di docker
|
8
|
+
```shell
|
9
|
+
docker compose build
|
10
|
+
```
|
11
|
+
Installazione dipendenze
|
12
|
+
```shell
|
13
|
+
docker compose run app bundle
|
14
|
+
```
|
15
|
+
Run rspec
|
16
|
+
```shell
|
17
|
+
docker compose run app bundle exec rspec
|
18
|
+
```
|
data/Rakefile
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
require_relative "lib/kono_epp_client/version"
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = 'kono_epp_client'
|
5
|
+
s.version = KonoEppClient::VERSION
|
6
|
+
s.date = '2019-10-08'
|
7
|
+
s.summary = "Kono Epp client"
|
8
|
+
s.description = "A simple EPP Client"
|
9
|
+
s.authors = ["Fabio Bonelli", "Jury Ghidinelli", "Marino Bonetti"]
|
10
|
+
s.email = ['jury@archimedianet.it', 'marinobonetti@gmail.com']
|
11
|
+
s.files = ["lib/kono_epp_client.rb"]
|
12
|
+
s.homepage = 'https://github.com/ArchimediaZerogroup/kono_epp_client'
|
13
|
+
s.license = 'MIT'
|
14
|
+
|
15
|
+
s.files = Dir.chdir(__dir__) do
|
16
|
+
`git ls-files -z`.split("\x0").reject do |f|
|
17
|
+
(File.expand_path(f) == __FILE__) ||
|
18
|
+
f.start_with?(*[
|
19
|
+
"bin/", "test/", "spec/", "features/",
|
20
|
+
".git", ".gitlab-ci.yml", "appveyor", "Gemfile",
|
21
|
+
"cog.toml", "docker-compose.yml", "Dockerfile",
|
22
|
+
".rspec", ".rubocop.yml"
|
23
|
+
])
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
files = `git ls-files -z`.split("\x0")
|
28
|
+
s.test_files = files.grep(%r{^(spec)/})
|
29
|
+
|
30
|
+
s.add_dependency 'activesupport', '>= 5.2'
|
31
|
+
s.add_dependency 'rexml'
|
32
|
+
s.add_dependency 'nokogiri', '>= 1.10'
|
33
|
+
|
34
|
+
s.add_development_dependency "rspec"
|
35
|
+
s.add_development_dependency "super_diff"
|
36
|
+
s.add_development_dependency "rspec-html-matchers"
|
37
|
+
s.add_development_dependency 'rspec-snapshot'
|
38
|
+
|
39
|
+
end
|
@@ -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
|
@@ -21,8 +21,10 @@ class KonoEppCreateDomain < KonoEppCommand
|
|
21
21
|
host_name.text = ns[0]
|
22
22
|
|
23
23
|
# FIXME IPv6
|
24
|
-
|
25
|
-
|
24
|
+
if ns[1]
|
25
|
+
host_addr = host_attr.add_element "domain:hostAddr", {"ip" => "v4"}
|
26
|
+
host_addr.text = ns[1]
|
27
|
+
end
|
26
28
|
end
|
27
29
|
|
28
30
|
domain_registrant = domain_create.add_element "domain:registrant"
|
@@ -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
|
@@ -1,12 +1,13 @@
|
|
1
1
|
class KonoEppTransferDomain < KonoEppCommand
|
2
|
-
def initialize(
|
3
|
-
super(
|
2
|
+
def initialize(name, authinfo, op, extension: nil)
|
3
|
+
super(nil, nil)
|
4
4
|
|
5
5
|
command = root.elements['command']
|
6
|
-
transfer = command.add_element(
|
6
|
+
transfer = command.add_element("transfer", {"op" => op})
|
7
|
+
# FIXME dovremmo controllare che le possibili opzioni di OP sono 'request', 'cancel', 'approve', 'reject', 'query'
|
7
8
|
|
8
|
-
domain_transfer = transfer.add_element(
|
9
|
-
|
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"})
|
10
11
|
|
11
12
|
domain_name = domain_transfer.add_element "domain:name"
|
12
13
|
domain_name.text = name
|
@@ -15,5 +16,21 @@ class KonoEppTransferDomain < KonoEppCommand
|
|
15
16
|
domain_pw = domain_authinfo.add_element "domain:pw"
|
16
17
|
|
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
|
+
|
18
35
|
end
|
19
36
|
end
|
@@ -1,71 +1,80 @@
|
|
1
1
|
class KonoEppUpdateDomain < KonoEppCommand
|
2
|
-
def initialize(
|
3
|
-
super(
|
2
|
+
def initialize(options)
|
3
|
+
super(nil, nil)
|
4
4
|
|
5
5
|
command = root.elements['command']
|
6
|
-
update = command.add_element(
|
6
|
+
update = command.add_element("update")
|
7
7
|
|
8
|
-
|
9
|
-
|
10
|
-
"xsi:schemaLocation" => "urn:ietf:params:xml:ns:domain-1.0 domain-1.0.xsd" } )
|
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"})
|
11
10
|
|
12
11
|
name = domain_update.add_element "domain:name"
|
13
12
|
name.text = options[:name]
|
14
13
|
|
15
|
-
if not options[:add_nameservers].blank? or options[:add_admin] or options[:add_tech]
|
14
|
+
if not options[:add_nameservers].blank? or options[:add_admin] or options[:add_tech] or options[:add_status]
|
15
|
+
# <domain:add>
|
16
16
|
domain_add = domain_update.add_element "domain:add"
|
17
|
-
end
|
18
17
|
|
19
|
-
|
20
|
-
|
21
|
-
end
|
18
|
+
unless options[:add_nameservers].blank?
|
19
|
+
domain_add_ns = domain_add.add_element "domain:ns"
|
22
20
|
|
23
|
-
|
24
|
-
|
25
|
-
|
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"
|
26
24
|
|
27
|
-
|
28
|
-
host_attr = domain_add_ns.add_element "domain:hostAttr"
|
29
|
-
host_name = host_attr.add_element "domain:hostName"
|
25
|
+
host_name.text = ns[0]
|
30
26
|
|
31
|
-
|
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
|
32
34
|
|
33
|
-
|
34
|
-
|
35
|
-
|
35
|
+
if options[:add_admin]
|
36
|
+
domain_contact = domain_add.add_element "domain:contact", {"type" => "admin"}
|
37
|
+
domain_contact.text = options[:add_admin]
|
36
38
|
end
|
37
|
-
end
|
38
39
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
end
|
40
|
+
if options[:add_status]
|
41
|
+
domain_add.add_element "domain:status", {"s" => options[:add_status]}
|
42
|
+
end
|
43
43
|
|
44
|
-
|
45
|
-
|
46
|
-
|
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
|
47
48
|
end
|
48
49
|
|
49
|
-
|
50
|
-
|
51
|
-
|
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"
|
52
53
|
|
53
|
-
options[:remove_nameservers].
|
54
|
-
|
55
|
-
host_name = host_attr.add_element "domain:hostName"
|
54
|
+
unless options[:remove_nameservers].blank?
|
55
|
+
domain_remove_ns = domain_remove.add_element "domain:ns"
|
56
56
|
|
57
|
-
|
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
|
58
63
|
end
|
59
|
-
end
|
60
64
|
|
61
|
-
|
62
|
-
|
63
|
-
|
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
|
65
69
|
|
66
|
-
|
67
|
-
|
68
|
-
|
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
|
69
78
|
end
|
70
79
|
|
71
80
|
# <domain:chg>
|
@@ -83,6 +92,13 @@ class KonoEppUpdateDomain < KonoEppCommand
|
|
83
92
|
domain_pw.text = options[:auth_info]
|
84
93
|
end
|
85
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
|
86
102
|
# TODO: Registrant
|
87
103
|
end
|
88
104
|
end
|
data/lib/epp/exceptions.rb
CHANGED
@@ -16,3 +16,13 @@ end
|
|
16
16
|
|
17
17
|
class KonoEppAuthenticationPasswordExpired < KonoEppErrorResponse ; end
|
18
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
|