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.
- data/.document +5 -0
- data/LICENSE +20 -0
- data/README.rdoc +17 -0
- data/Rakefile +55 -0
- data/VERSION +1 -0
- data/lib/nominet-epp.rb +139 -0
- data/lib/nominet-epp/helpers.rb +83 -0
- data/lib/nominet-epp/operations.rb +20 -0
- data/lib/nominet-epp/operations/check.rb +39 -0
- data/lib/nominet-epp/operations/create.rb +166 -0
- data/lib/nominet-epp/operations/delete.rb +20 -0
- data/lib/nominet-epp/operations/fork.rb +53 -0
- data/lib/nominet-epp/operations/hello.rb +11 -0
- data/lib/nominet-epp/operations/info.rb +93 -0
- data/lib/nominet-epp/operations/list.rb +83 -0
- data/lib/nominet-epp/operations/lock.rb +56 -0
- data/lib/nominet-epp/operations/merge.rb +41 -0
- data/lib/nominet-epp/operations/poll.rb +38 -0
- data/lib/nominet-epp/operations/renew.rb +40 -0
- data/lib/nominet-epp/operations/transfer.rb +84 -0
- data/lib/nominet-epp/operations/unlock.rb +56 -0
- data/lib/nominet-epp/operations/unrenew.rb +36 -0
- data/lib/nominet-epp/operations/update.rb +67 -0
- data/nominet-epp.gemspec +74 -0
- data/test/helper.rb +10 -0
- data/test/test_nominet-epp.rb +7 -0
- metadata +135 -0
@@ -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
|
data/nominet-epp.gemspec
ADDED
@@ -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
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
|