kono_epp_client 0.0.3 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|