nominet-epp 0.0.2

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