nominet-epp 0.0.2

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.
@@ -0,0 +1,84 @@
1
+ module NominetEPP
2
+ module Operations
3
+ # EPP Transfer Operation
4
+ module Transfer
5
+ # @overload transfer(:release, name, tag, to_account_id = nil)
6
+ # @param [String] name Domain to release
7
+ # @param [String] tag TAG to release the domain to
8
+ # @param [String] to_account_id Specific account ID to release to
9
+ # @return [Hash] +{:result => true|:handshake}+ if successfully transferred or pending
10
+ # @return [false] transfer failed
11
+ # @overload transfer(:approve, case_id)
12
+ # @param [String] case_id Transfer case to approve
13
+ # @return [false] failed
14
+ # @return [Hash] of +:case_id+ and array of +:domains+
15
+ # @overload transfer(:reject, case_id)
16
+ # @param [String] case_id Transfer case to reject
17
+ # @return [false] failed
18
+ # @return [Hash] of +:case_id+ and array of +:domains+
19
+ # @param [Symbol] type Type of transfer operation
20
+ # @raise [ArgumentError] type is not one of +:release+, +:approve+ or +:reject+
21
+ # @see transfer_release
22
+ # @see transfer_approve
23
+ # @see transfer_reject
24
+ def transfer(type, *args)
25
+ raise ArgumentError, "type must be :release, :approve, :reject" unless [:release, :approve, :reject].include?(type)
26
+
27
+ resp = @client.transfer do |transfer|
28
+ transfer['op'] = type.to_s
29
+ transfer << self.send(:"transfer_#{type}", *args)
30
+ end
31
+
32
+ if type == :release
33
+ case resp.code
34
+ when 1000
35
+ { :result => true }
36
+ when 1001
37
+ { :result => :handshake }
38
+ else
39
+ false
40
+ end
41
+ else
42
+ return false unless resp.success?
43
+ nCase, domainList = resp.data
44
+ { :case_id => node_value(nCase,'//n:Case/n:case-id'),
45
+ :domains => domainList.find('//n:domain-name', namespaces).map{|n| n.content.strip} }
46
+ end
47
+ end
48
+
49
+ private
50
+ # @param [String] name Domain to release
51
+ # @param [String] tag TAG to release the domain to
52
+ # @param [String] to_account_id Specific account ID to release to
53
+ # @return [XML::Node] +domain:transfer+ payload
54
+ def transfer_release(name, tag, to_account_id = nil)
55
+ domain('transfer') do |node, ns|
56
+ node << XML::Node.new('name', name, ns)
57
+ node << XML::Node.new('registrar-tag', tag, ns)
58
+
59
+ unless to_account_id.nil?
60
+ account = XML::Node.new('account', nil, ns)
61
+ account << XML::Node.new('account-id', to_account_id, ns)
62
+ node << account
63
+ end
64
+ end
65
+ end
66
+
67
+ # @param [String] case_id Transfer case to approve
68
+ # @return [XML::Node] +notification:case+ payload
69
+ def transfer_approve(case_id)
70
+ notification('Case') do |node, ns|
71
+ node << XML::Node.new('case-id', case_id, ns)
72
+ end
73
+ end
74
+
75
+ # @param [String] case_id Transfer case to reject
76
+ # @return [XML::Node] +notification:case+ payload
77
+ def transfer_reject(case_id)
78
+ notification('Case') do |node, ns|
79
+ node << XML::Node.new('case-id', case_id, ns)
80
+ end
81
+ end
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,56 @@
1
+ module NominetEPP
2
+ module Operations
3
+ # EPP Unlock Operation
4
+ module Unlock
5
+ # Unlock domain or account 'investigation' or 'opt-out'
6
+ #
7
+ # @param [Symbol] entity Entity to unlock
8
+ # @param [String] type Type of unlock
9
+ # @param [String] id Domain name or account ID
10
+ # @raise [ArgumentError] entity is not +:domain+ or +:account+
11
+ # @raise [ArgumentError] type is not 'investigation' or 'opt-out'
12
+ # @return [Boolean] unlocking successful
13
+ def unlock(entity, type, id)
14
+ raise ArgumentError, "entity must be :domain or :account" unless [:domain, :account].include?(entity)
15
+ raise ArgumentError, "type must be 'investigation' or 'opt-out'" unless %w(investigation opt-out).include?(type)
16
+
17
+ resp = @client.update do
18
+ case type
19
+ when 'investigation'
20
+ lock_investigation(entity, id)
21
+ when 'opt-out'
22
+ lock_opt_out(entity, id)
23
+ end
24
+ end
25
+
26
+ return resp.success?
27
+ end
28
+ private
29
+ # Create +account:unlock+ XML element for opt-out lock
30
+ # @param [Symbol] entity Entity to set opt out lock on
31
+ # @param [String] id Domain name or Account ID to lock
32
+ # @return [XML::Node] +account:unlock+ element
33
+ def unlock_opt_out(entity, id)
34
+ account('unlock') do |node, ns|
35
+ node['type'] = 'opt-out'
36
+ node << XML::Node.new((entity == :domain ? 'domain-name' : 'roid'), id, ns)
37
+ end
38
+ end
39
+
40
+ # Create +unlock+ XML element for investigation lock
41
+ #
42
+ # We don't support 'investigation' on account:domain-name as this ability
43
+ # is already provided via domain:name
44
+ #
45
+ # @param [Symbol] entity Entity to set investigation unlock on
46
+ # @param [String] id Domain name or account ID to set unlock on
47
+ # @return [XML::Node] +lock+ element
48
+ def unlock_investigation(entity, id)
49
+ self.send(entity, 'unlock') do |node, ns|
50
+ node['type'] = 'investigation'
51
+ node << XML::Node.new((entity == :domain ? 'name' : 'roid'), id, ns)
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,36 @@
1
+ module NominetEPP
2
+ module Operations
3
+ # EPP Unrenew Operation
4
+ module Unrenew
5
+ # Reverse a renewal request for one or more domain names.
6
+ #
7
+ # Unrenew commands will only be processed if the renewal invoice
8
+ # has not yet been generated. If the operation is successful, an
9
+ # email will be sent to the registrant of the domain name notifying
10
+ # them of the renewal reversal.
11
+ #
12
+ # @param [String, ...] *names Domain names to unrenew
13
+ # @return [false] unrenew failed
14
+ # @return [Hash<String, Time>] hash of domains and expiry times
15
+ def unrenew(*names)
16
+ resp = @client.update do
17
+ domain('unrenew') do |node, ns|
18
+ names.each do |name|
19
+ node << XML::Node.new('name', name, ns)
20
+ end
21
+ end
22
+ end
23
+
24
+ return false unless resp.success?
25
+
26
+ hash = {}
27
+ resp.data.find('//domain:renData', namespaces).each do |node|
28
+ renName = node_value(node, 'domain:name')
29
+ renExp = node_value(node, 'domain:exDate')
30
+ hash[renName] = Time.parse(renExp)
31
+ end
32
+ hash
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,67 @@
1
+ module NominetEPP
2
+ module Operations
3
+ # EPP Update Operation
4
+ module Update
5
+ # @param [Symbol] entity Entity to update
6
+ # @param [String] id Domain, Account or Contact to update
7
+ # @param [Hash] fields Fields to update
8
+ def update(entity, id, fields = {})
9
+ resp = @client.update do
10
+ self.send(:"update_#{entity}", id, fields)
11
+ end
12
+
13
+ return resp.success?
14
+ end
15
+ private
16
+ # Generate +domain:update+ payload
17
+ # @param [String] name Domain name to update
18
+ # @param [Hash] fields Fields to update on the domain
19
+ # @return [XML::Node] +domain:update+ payload
20
+ def update_domain(name, fields)
21
+ domain('update') do |node, ns|
22
+ node << XML::Node.new('name', name, ns)
23
+ fields.each do |k,v|
24
+ case k
25
+ when :account
26
+ node << (d_acct = XML::Node.new('account', nil, ns))
27
+ d_acct << account('update') do |acct, a_ns|
28
+ account_update_xml(v, acct, a_ns)
29
+ end
30
+ when :ns
31
+ node << domain_ns_xml(v, ns)
32
+ else
33
+ node << XML::Node.new(k.gsub('_', '-'), v, ns)
34
+ end
35
+ end
36
+ end
37
+ end
38
+
39
+ # Generate +account:update+ payload
40
+ # @param [String] roid Account ID
41
+ # @param [Hash] fields Fields to update on the account
42
+ # @return [XML::Node] +account:update+ payload
43
+ def update_account(roid, fields = {})
44
+ account('update') do |node, ns|
45
+ node << XML::Node.new('roid', roid, ns)
46
+ account_fields_xml(fields, node, ns)
47
+ end
48
+ end
49
+
50
+ # Generate +contact:update+ payload
51
+ # @param [String] roid Contact ID
52
+ # @param [Hash] fields Fields to update on the contact
53
+ # @raise [ArgumentError] invalid keys
54
+ # @return [XML::Node] +contact:update+ payload
55
+ def update_contact(roid, fields = {})
56
+ raise ArgumentError, "fields allowed keys name, email, phone, mobile" unless (fields.keys - [:name, :email, :phone, :mobile]).empty?
57
+
58
+ contact('update') do |node, ns|
59
+ node << XML::Node.new('roid', roid, ns)
60
+ fields.each do |k,v|
61
+ node << XML::Node.new(k, v, ns)
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,74 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{nominet-epp}
8
+ s.version = "0.0.2"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Geoff Garside"]
12
+ s.date = %q{2011-01-07}
13
+ s.description = %q{Client for communicating with the Nominet EPP}
14
+ s.email = %q{geoff@geoffgarside.co.uk}
15
+ s.extra_rdoc_files = [
16
+ "LICENSE",
17
+ "README.rdoc"
18
+ ]
19
+ s.files = [
20
+ ".document",
21
+ "LICENSE",
22
+ "README.rdoc",
23
+ "Rakefile",
24
+ "VERSION",
25
+ "lib/nominet-epp.rb",
26
+ "lib/nominet-epp/helpers.rb",
27
+ "lib/nominet-epp/operations.rb",
28
+ "lib/nominet-epp/operations/check.rb",
29
+ "lib/nominet-epp/operations/create.rb",
30
+ "lib/nominet-epp/operations/delete.rb",
31
+ "lib/nominet-epp/operations/fork.rb",
32
+ "lib/nominet-epp/operations/hello.rb",
33
+ "lib/nominet-epp/operations/info.rb",
34
+ "lib/nominet-epp/operations/list.rb",
35
+ "lib/nominet-epp/operations/lock.rb",
36
+ "lib/nominet-epp/operations/merge.rb",
37
+ "lib/nominet-epp/operations/poll.rb",
38
+ "lib/nominet-epp/operations/renew.rb",
39
+ "lib/nominet-epp/operations/transfer.rb",
40
+ "lib/nominet-epp/operations/unlock.rb",
41
+ "lib/nominet-epp/operations/unrenew.rb",
42
+ "lib/nominet-epp/operations/update.rb",
43
+ "nominet-epp.gemspec",
44
+ "test/helper.rb",
45
+ "test/test_nominet-epp.rb"
46
+ ]
47
+ s.homepage = %q{http://github.com/geoffgarside/nominet-epp}
48
+ s.require_paths = ["lib"]
49
+ s.rubygems_version = %q{1.4.2}
50
+ s.summary = %q{Nominet EPP (Extensible Provisioning Protocol) Client}
51
+ s.test_files = [
52
+ "test/helper.rb",
53
+ "test/test_nominet-epp.rb"
54
+ ]
55
+
56
+ if s.respond_to? :specification_version then
57
+ s.specification_version = 3
58
+
59
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
60
+ s.add_development_dependency(%q<shoulda>, [">= 0"])
61
+ s.add_development_dependency(%q<yard>, [">= 0"])
62
+ s.add_runtime_dependency(%q<epp-client>, [">= 0"])
63
+ else
64
+ s.add_dependency(%q<shoulda>, [">= 0"])
65
+ s.add_dependency(%q<yard>, [">= 0"])
66
+ s.add_dependency(%q<epp-client>, [">= 0"])
67
+ end
68
+ else
69
+ s.add_dependency(%q<shoulda>, [">= 0"])
70
+ s.add_dependency(%q<yard>, [">= 0"])
71
+ s.add_dependency(%q<epp-client>, [">= 0"])
72
+ end
73
+ end
74
+
data/test/helper.rb ADDED
@@ -0,0 +1,10 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+ require 'shoulda'
4
+
5
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
6
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
7
+ require 'nominet-epp'
8
+
9
+ class Test::Unit::TestCase
10
+ end
@@ -0,0 +1,7 @@
1
+ require 'helper'
2
+
3
+ class TestNominetEpp < Test::Unit::TestCase
4
+ should "probably rename this file and start testing for real" do
5
+ flunk "hey buddy, you should probably rename this file and start testing for real"
6
+ end
7
+ end
metadata ADDED
@@ -0,0 +1,135 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: nominet-epp
3
+ version: !ruby/object:Gem::Version
4
+ hash: 27
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 2
10
+ version: 0.0.2
11
+ platform: ruby
12
+ authors:
13
+ - Geoff Garside
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-01-07 00:00:00 +00:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: shoulda
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 3
30
+ segments:
31
+ - 0
32
+ version: "0"
33
+ type: :development
34
+ version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: yard
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ hash: 3
44
+ segments:
45
+ - 0
46
+ version: "0"
47
+ type: :development
48
+ version_requirements: *id002
49
+ - !ruby/object:Gem::Dependency
50
+ name: epp-client
51
+ prerelease: false
52
+ requirement: &id003 !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ hash: 3
58
+ segments:
59
+ - 0
60
+ version: "0"
61
+ type: :runtime
62
+ version_requirements: *id003
63
+ description: Client for communicating with the Nominet EPP
64
+ email: geoff@geoffgarside.co.uk
65
+ executables: []
66
+
67
+ extensions: []
68
+
69
+ extra_rdoc_files:
70
+ - LICENSE
71
+ - README.rdoc
72
+ files:
73
+ - .document
74
+ - LICENSE
75
+ - README.rdoc
76
+ - Rakefile
77
+ - VERSION
78
+ - lib/nominet-epp.rb
79
+ - lib/nominet-epp/helpers.rb
80
+ - lib/nominet-epp/operations.rb
81
+ - lib/nominet-epp/operations/check.rb
82
+ - lib/nominet-epp/operations/create.rb
83
+ - lib/nominet-epp/operations/delete.rb
84
+ - lib/nominet-epp/operations/fork.rb
85
+ - lib/nominet-epp/operations/hello.rb
86
+ - lib/nominet-epp/operations/info.rb
87
+ - lib/nominet-epp/operations/list.rb
88
+ - lib/nominet-epp/operations/lock.rb
89
+ - lib/nominet-epp/operations/merge.rb
90
+ - lib/nominet-epp/operations/poll.rb
91
+ - lib/nominet-epp/operations/renew.rb
92
+ - lib/nominet-epp/operations/transfer.rb
93
+ - lib/nominet-epp/operations/unlock.rb
94
+ - lib/nominet-epp/operations/unrenew.rb
95
+ - lib/nominet-epp/operations/update.rb
96
+ - nominet-epp.gemspec
97
+ - test/helper.rb
98
+ - test/test_nominet-epp.rb
99
+ has_rdoc: true
100
+ homepage: http://github.com/geoffgarside/nominet-epp
101
+ licenses: []
102
+
103
+ post_install_message:
104
+ rdoc_options: []
105
+
106
+ require_paths:
107
+ - lib
108
+ required_ruby_version: !ruby/object:Gem::Requirement
109
+ none: false
110
+ requirements:
111
+ - - ">="
112
+ - !ruby/object:Gem::Version
113
+ hash: 3
114
+ segments:
115
+ - 0
116
+ version: "0"
117
+ required_rubygems_version: !ruby/object:Gem::Requirement
118
+ none: false
119
+ requirements:
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
122
+ hash: 3
123
+ segments:
124
+ - 0
125
+ version: "0"
126
+ requirements: []
127
+
128
+ rubyforge_project:
129
+ rubygems_version: 1.4.2
130
+ signing_key:
131
+ specification_version: 3
132
+ summary: Nominet EPP (Extensible Provisioning Protocol) Client
133
+ test_files:
134
+ - test/helper.rb
135
+ - test/test_nominet-epp.rb