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.
Files changed (40) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +17 -0
  3. data/README.md +16 -0
  4. data/Rakefile +6 -0
  5. data/kono_epp_client.gemspec +39 -0
  6. data/lib/epp/epp_command/check_contacts.rb +17 -0
  7. data/lib/epp/epp_command/create_domain.rb +4 -2
  8. data/lib/epp/epp_command/kono_epp_check_domains.rb +18 -0
  9. data/lib/epp/epp_command/transfer_domain.rb +22 -5
  10. data/lib/epp/epp_command/update_domain.rb +60 -44
  11. data/lib/epp/exceptions.rb +10 -0
  12. data/lib/epp/server.rb +116 -84
  13. data/lib/epp/transport/http.rb +10 -5
  14. data/lib/kono_epp_client/VERSION +1 -0
  15. data/lib/kono_epp_client/version.rb +3 -0
  16. data/lib/kono_epp_client.rb +5 -14
  17. data/spec/epp/epp_command/kono_epp_check_contacts_spec.rb +25 -0
  18. data/spec/epp/epp_command/kono_epp_check_domains_spec.rb +16 -0
  19. data/spec/epp/epp_command/kono_epp_create_domain_spec.rb +37 -0
  20. data/spec/epp/epp_command/kono_epp_transfer_domain_spec.rb +33 -0
  21. data/spec/epp/epp_command/kono_epp_update_domain_spec.rb +125 -0
  22. data/spec/epp/kono_epp_command_spec.rb +16 -0
  23. data/spec/epp/server_spec.rb +69 -0
  24. data/spec/fixtures/snapshots/kono_epp_check_contacts/_construct.xml.snap +13 -0
  25. data/spec/fixtures/snapshots/kono_epp_check_domains/_construct.xml.snap +11 -0
  26. data/spec/fixtures/snapshots/kono_epp_create_domain/_create.xml.snap +29 -0
  27. data/spec/fixtures/snapshots/kono_epp_transfer_domain/_con_extension_construct.xml.snap +23 -0
  28. data/spec/fixtures/snapshots/kono_epp_transfer_domain/_construct.xml.snap +13 -0
  29. data/spec/fixtures/snapshots/kono_epp_update_domain/_restore_esiste_l'estensione_di_restore.xml.snap +15 -0
  30. data/spec/fixtures/snapshots/kono_epp_update_domain/_update_auth_info_cambia_AUTH_INFO.xml.snap +15 -0
  31. data/spec/fixtures/snapshots/kono_epp_update_domain/_update_auth_info_con_nuovo_registrant_cambia_REGISTRANT.xml.snap +16 -0
  32. data/spec/fixtures/snapshots/kono_epp_update_domain/_update_contacts_cambia_ADMIN_TECH.xml.snap +18 -0
  33. data/spec/fixtures/snapshots/kono_epp_update_domain/_update_nameservers_aggiunge_e_rimuove_ns.xml.snap +28 -0
  34. data/spec/fixtures/snapshots/kono_epp_update_domain/_update_status_cambia_status.xml.snap +16 -0
  35. data/spec/spec_helper.rb +111 -0
  36. data/spec/support/context.rb +15 -0
  37. data/spec/support/matchers.rb +6 -0
  38. data/spec/support/snapshot.rb +20 -0
  39. data/spec/support/superdiff.rb +1 -0
  40. metadata +159 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 80640a05d680c3d25c1371495913b4816266e4c2
4
- data.tar.gz: 1e2fa73d4c1e1d51ef7a487c275a9a8a08226acb
2
+ SHA256:
3
+ metadata.gz: 2c14b24f2b061e44d80192c0e9612382f6f3f2f159bb3266c3750968dc56640d
4
+ data.tar.gz: bb38b49904a2b3205a270fb0d308cab943a710c54879cc193d2bacc868d16c95
5
5
  SHA512:
6
- metadata.gz: 3bdcb5660089b22ec5ec0f026a35517d04c4c75006b863154db2a04cc0c8809348f0eda14496cd3ed105941c195666ee7a78b8b0eace40db8f44b22efeb1b418
7
- data.tar.gz: 4f1eca44ce49bee99b1ededec75b3e30c058de3ffd1a5cf186e3579355767bbbb25b9f7d83930595b8a7e721bc7b271ca295c23c5642f1353d870fdd7a6fd90b
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,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
@@ -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
- host_addr = host_attr.add_element "domain:hostAddr", { "ip" => "v4" }
25
- host_addr.text = ns[1]
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( name, authinfo, op )
3
- super( nil, nil )
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( "transfer", { "op" => op } )
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( "domain:transfer", { "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" } )
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( options )
3
- super( nil, nil )
2
+ def initialize(options)
3
+ super(nil, nil)
4
4
 
5
5
  command = root.elements['command']
6
- update = command.add_element( "update" )
6
+ update = command.add_element("update")
7
7
 
8
-
9
- domain_update = update.add_element( "domain:update", { "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" } )
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
- if not options[:remove_nameservers].blank? or options[:remove_admin] or options[:remove_tech]
20
- domain_remove = domain_update.add_element "domain:rem"
21
- end
18
+ unless options[:add_nameservers].blank?
19
+ domain_add_ns = domain_add.add_element "domain:ns"
22
20
 
23
- # <domain:add>
24
- unless options[:add_nameservers].blank?
25
- domain_add_ns = domain_add.add_element "domain:ns"
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
- options[:add_nameservers].each do |ns|
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
- host_name.text = ns[0]
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
- # FIXME IPv6
34
- host_addr = host_attr.add_element "domain:hostAddr", { "ip" => "v4" }
35
- host_addr.text = ns[1]
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
- if options[:add_admin]
40
- domain_contact = domain_add.add_element "domain:contact", { "type" => "admin" }
41
- domain_contact.text = options[:add_admin]
42
- end
40
+ if options[:add_status]
41
+ domain_add.add_element "domain:status", {"s" => options[:add_status]}
42
+ end
43
43
 
44
- if options[:add_tech]
45
- domain_contact = domain_add.add_element "domain:contact", { "type" => "tech" }
46
- domain_contact.text = options[:add_tech]
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
- # <domain:rem>
50
- unless options[:remove_nameservers].blank?
51
- domain_remove_ns = domain_remove.add_element "domain:ns"
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].each do |name|
54
- host_attr = domain_remove_ns.add_element "domain:hostAttr"
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
- host_name.text = name
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
- if options[:remove_admin]
62
- domain_contact = domain_remove.add_element "domain:contact", { "type" => "admin" }
63
- domain_contact.text = options[:remove_admin]
64
- end
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
- if options[:remove_tech]
67
- domain_contact = domain_remove.add_element "domain:contact", { "type" => "tech" }
68
- domain_contact.text = options[:remove_tech]
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
@@ -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