epp-xml 0.0.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 1480e495b0ba62a60b2be562b88c60c8403a55cc
4
+ data.tar.gz: 05e2c04f2d23b96f314055ab5cf405a39981fc09
5
+ SHA512:
6
+ metadata.gz: aa60db69341ed4fdfecf9fd934f192eeb8fcb882100dbc067e065437584e2f38816ae79c1b99a7b8175d89ef4e404be7d911d8a6b32ece8608e5ae6d05dc32ae
7
+ data.tar.gz: 9769d294fb98e8d86d7a852da52497786cf5fc7dbcbded2aac599fab0b90e6edfe6a3fca124043ca11b3b51182073e69a883ce70e77219d1e3127dcf2ba52bd2
@@ -0,0 +1,3 @@
1
+ module EppXmlCore::Contact
2
+
3
+ end
@@ -0,0 +1,80 @@
1
+ module EppXmlCore
2
+ module Domain
3
+ def create(xml_params = {}, dnssec_params = {})
4
+ defaults = {
5
+ name: { value: 'example.ee' },
6
+ period: { value: '1', attrs: { unit: 'y' } },
7
+ ns: [
8
+ { hostObj: { value: 'ns1.example.net' } },
9
+ { hostObj: { value: 'ns2.example.net' } }
10
+ ],
11
+ registrant: { value: 'jd1234' },
12
+ _other: [
13
+ { contact: { value: 'sh8013', attrs: { type: 'admin' } } },
14
+ { contact: { value: 'sh8013', attrs: { type: 'tech' } } },
15
+ { contact: { value: 'sh801333', attrs: { type: 'tech' } } }
16
+ ]
17
+ }
18
+
19
+ xml_params = defaults.deep_merge(xml_params)
20
+
21
+ dsnsec_defaults = {
22
+ _other: [
23
+ { keyData: {
24
+ flags: { value: '257' },
25
+ protocol: { value: '3' },
26
+ alg: { value: '5' },
27
+ pubKey: { value: 'AwEAAddt2AkLfYGKgiEZB5SmIF8EvrjxNMH6HtxWEA4RJ9Ao6LCWheg8' }
28
+ }
29
+ }]
30
+ }
31
+
32
+ dnssec_params = dsnsec_defaults.deep_merge(dnssec_params) if dnssec_params != false
33
+
34
+ xml = Builder::XmlMarkup.new
35
+
36
+ xml.instruct!(:xml, standalone: 'no')
37
+ xml.epp('xmlns' => 'urn:ietf:params:xml:ns:epp-1.0') do
38
+ xml.command do
39
+ xml.create do
40
+ xml.tag!('domain:create', 'xmlns:domain' => 'urn:ietf:params:xml:ns:domain-1.0') do
41
+ EppXml.generate_xml_from_hash(xml_params, xml, 'domain:')
42
+ end
43
+ end
44
+ xml.extension do
45
+ xml.tag!('secDNS:create', 'xmlns:secDNS' => 'urn:ietf:params:xml:ns:secDNS-1.1') do
46
+ EppXml.generate_xml_from_hash(dnssec_params, xml, 'secDNS:')
47
+ end
48
+ end if dnssec_params != false
49
+ xml.clTRID 'ABC-12345'
50
+ end
51
+ end
52
+ end
53
+
54
+ def info(xml_params = {})
55
+ defaults = {
56
+ name: { value: 'example.ee', attrs: { hosts: 'all' } },
57
+ authInfo: {
58
+ pw: { value: '2fooBAR' }
59
+ }
60
+ }
61
+
62
+ xml_params = defaults.deep_merge(xml_params)
63
+
64
+ xml = Builder::XmlMarkup.new
65
+
66
+ xml.instruct!(:xml, standalone: 'no')
67
+ xml.epp('xmlns' => 'urn:ietf:params:xml:ns:epp-1.0') do
68
+ xml.command do
69
+ xml.info do
70
+ xml.tag!('domain:info', 'xmlns:domain' => 'urn:ietf:params:xml:ns:domain-1.0') do
71
+ EppXml.generate_xml_from_hash(xml_params, xml, 'domain:')
72
+ end
73
+ end
74
+ xml.clTRID 'ABC-12345'
75
+ end
76
+ end
77
+ end
78
+
79
+ end
80
+ end
@@ -0,0 +1,37 @@
1
+ module EppXmlCore
2
+ module Session
3
+ def login(xml_params = {})
4
+ defaults = {
5
+ clID: { value: 'user' },
6
+ pw: { value: 'pw' },
7
+ options: {
8
+ version: { value: '1.0' },
9
+ lang: { value: 'en' }
10
+ },
11
+ svcs: {
12
+ _objURIs: [
13
+ objURI: { value: 'urn:ietf:params:xml:ns:contact-1.0' }
14
+ ]
15
+ }
16
+ }
17
+
18
+ xml_params = defaults.deep_merge(xml_params)
19
+
20
+ xml = Builder::XmlMarkup.new
21
+
22
+ xml.instruct!(:xml, standalone: 'no')
23
+ xml.epp(
24
+ 'xmlns' => 'urn:ietf:params:xml:ns:epp-1.0',
25
+ 'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance',
26
+ 'xsi:schemaLocation' => 'urn:ietf:params:xml:ns:epp-1.0 epp-1.0.xsd'
27
+ ) do
28
+ xml.command do
29
+ xml.login do
30
+ EppXml.generate_xml_from_hash(xml_params, xml)
31
+ end
32
+ xml.clTRID 'ABC-12345'
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
data/lib/epp-xml.rb ADDED
@@ -0,0 +1,46 @@
1
+ require 'active_support'
2
+ require 'builder'
3
+ require 'epp-xml/session'
4
+ require 'epp-xml/domain'
5
+ require 'epp-xml/contact'
6
+
7
+ module EppXml
8
+ class Session
9
+ extend ::EppXmlCore::Session
10
+ end
11
+
12
+ class Domain
13
+ extend ::EppXmlCore::Domain
14
+ end
15
+
16
+ class Contact
17
+ extend ::EppXmlCore::Contact
18
+ end
19
+
20
+ def self.generate_xml_from_hash(xml_params, xml, ns = '')
21
+ xml_params.each do |k, v|
22
+ # Value is a hash which has string type value
23
+ if v.is_a?(Hash) && v[:value].is_a?(String)
24
+ xml.tag!("#{ns}#{k}", v[:value], v[:attrs])
25
+ # Value is a hash which is nested
26
+ elsif v.is_a?(Hash)
27
+ xml.tag!("#{ns}#{k}") do
28
+ generate_xml_from_hash(v, xml, ns)
29
+ end
30
+ # Value is an array
31
+ elsif v.is_a?(Array)
32
+ if k.to_s.start_with?('_')
33
+ v.each do |x|
34
+ generate_xml_from_hash(x, xml, ns)
35
+ end
36
+ else
37
+ xml.tag!("#{ns}#{k}") do
38
+ v.each do |x|
39
+ generate_xml_from_hash(x, xml, ns)
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
metadata ADDED
@@ -0,0 +1,115 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: epp-xml
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - GiTLAB LTD
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-10-22 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activesupport
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '4.1'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 4.1.4
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '4.1'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 4.1.4
33
+ - !ruby/object:Gem::Dependency
34
+ name: builder
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '3.2'
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 3.2.2
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '3.2'
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 3.2.2
53
+ - !ruby/object:Gem::Dependency
54
+ name: rspec
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '3.1'
60
+ type: :development
61
+ prerelease: false
62
+ version_requirements: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - "~>"
65
+ - !ruby/object:Gem::Version
66
+ version: '3.1'
67
+ - !ruby/object:Gem::Dependency
68
+ name: nokogiri
69
+ requirement: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - "~>"
72
+ - !ruby/object:Gem::Version
73
+ version: '1.6'
74
+ type: :development
75
+ prerelease: false
76
+ version_requirements: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - "~>"
79
+ - !ruby/object:Gem::Version
80
+ version: '1.6'
81
+ description: Gem for generating valid XML for Extensible Provisioning Protocol requests
82
+ email: info@gitlab.eu
83
+ executables: []
84
+ extensions: []
85
+ extra_rdoc_files: []
86
+ files:
87
+ - lib/epp-xml.rb
88
+ - lib/epp-xml/contact.rb
89
+ - lib/epp-xml/domain.rb
90
+ - lib/epp-xml/session.rb
91
+ homepage: https://github.com/gitlabeu/epp-xml
92
+ licenses:
93
+ - MIT
94
+ metadata: {}
95
+ post_install_message:
96
+ rdoc_options: []
97
+ require_paths:
98
+ - lib
99
+ required_ruby_version: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ required_rubygems_version: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - ">="
107
+ - !ruby/object:Gem::Version
108
+ version: '0'
109
+ requirements: []
110
+ rubyforge_project:
111
+ rubygems_version: 2.2.0
112
+ signing_key:
113
+ specification_version: 4
114
+ summary: Gem for generating XML for EPP requests
115
+ test_files: []