ultraspeed-epp 1.0.2 → 1.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +18 -34
- data/lib/epp/server.rb +28 -11
- data/lib/epp.rb +4 -2
- metadata +22 -3
data/README.rdoc
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
= EPP
|
1
|
+
= EPP (by {Ultraspeed}[http://ultraspeed.co.uk])
|
2
2
|
|
3
3
|
The EPP gem provides basic functionality for connecting and making requests on EPP (Extensible Provisioning Protocol) servers. Currently, major providers Centralnic and Nominet have been tested.
|
4
4
|
|
@@ -24,48 +24,32 @@ Once you do that, you can install the gem by typing <tt>sudo rake gems:install</
|
|
24
24
|
|
25
25
|
== Example Usage
|
26
26
|
|
27
|
-
First, you must initialize an Epp::Server object to use. This requires the server address and
|
27
|
+
First, you must initialize an Epp::Server object to use. This requires the EPP server address, tag/username and password:
|
28
28
|
|
29
29
|
server = Epp::Server.new(
|
30
30
|
:server => "testbed-epp.nominet.org.uk",
|
31
|
-
:
|
31
|
+
:tag => "TESTING",
|
32
|
+
:password => "testing"
|
32
33
|
)
|
33
34
|
|
34
35
|
If no port is specified, it will be assumed that you will be using port 700.
|
35
36
|
|
36
|
-
You would then make an XML request to the server.
|
37
|
-
|
38
|
-
xml
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
<version>1.0</version>
|
49
|
-
<lang>en</lang>
|
50
|
-
</options>
|
51
|
-
<svcs>
|
52
|
-
<objURI>urn:ietf:params:xml:ns:domain-1.0</objURI>
|
53
|
-
<objURI>urn:ietf:params:xml:ns:contact-1.0</objURI>
|
54
|
-
<objURI>urn:ietf:params:xml:ns:host-1.0</objURI>
|
55
|
-
</svcs>
|
56
|
-
</login>
|
57
|
-
<clTRID>ABC-12345</clTRID>
|
58
|
-
</command>
|
59
|
-
</epp>
|
60
|
-
}
|
61
|
-
|
62
|
-
response = server.request(xml)
|
63
|
-
|
64
|
-
The EPP server would then return the XML response as a string, and set it equal to <tt>response</tt> for your usage.
|
37
|
+
You would then make an XML request to the server.
|
38
|
+
|
39
|
+
xml = "<?xml ... </epp>"
|
40
|
+
response = server.request(xml)
|
41
|
+
|
42
|
+
You can build this however you'd like. The process is as follows:
|
43
|
+
|
44
|
+
* Connect to EPP server, get the <greeting> frame
|
45
|
+
* Send a standard <login> request
|
46
|
+
* Send your request
|
47
|
+
* Send a standard <logout> request
|
48
|
+
* Disconnect the socket from the server
|
65
49
|
|
66
|
-
|
50
|
+
The EPP server would then return the XML response as a string. In this example, the response XML would be set equal to <tt>response</tt> for your usage.
|
67
51
|
|
68
|
-
|
52
|
+
Once the request is complete, it will automatically close the connection. For simplicity purposes, this plug-in will *not* use a persistent connection to the EPP server.
|
69
53
|
|
70
54
|
== Bugs/Issues
|
71
55
|
|
data/lib/epp/server.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
module Epp #:nodoc:
|
2
2
|
class Server
|
3
|
-
include REXML
|
4
3
|
include RequiresParameters
|
5
4
|
|
6
5
|
attr_accessor :tag, :password, :server, :port, :clTRID
|
@@ -43,7 +42,7 @@ module Epp #:nodoc:
|
|
43
42
|
return @response
|
44
43
|
end
|
45
44
|
|
46
|
-
private
|
45
|
+
# private
|
47
46
|
|
48
47
|
# Wrapper which sends an XML frame to the server, and receives
|
49
48
|
# the response frame in return.
|
@@ -53,8 +52,8 @@ module Epp #:nodoc:
|
|
53
52
|
end
|
54
53
|
|
55
54
|
def login
|
56
|
-
xml = Document.new
|
57
|
-
xml << XMLDecl.new("1.0", "UTF-8", "no")
|
55
|
+
xml = REXML::Document.new
|
56
|
+
xml << REXML::XMLDecl.new("1.0", "UTF-8", "no")
|
58
57
|
|
59
58
|
xml.add_element("epp", {
|
60
59
|
"xmlns" => "urn:ietf:params:xml:ns:epp-1.0",
|
@@ -79,12 +78,22 @@ module Epp #:nodoc:
|
|
79
78
|
|
80
79
|
command.add_element("clTRID").text = @clTRID
|
81
80
|
|
82
|
-
|
81
|
+
# Receive the login response
|
82
|
+
response = Hpricot.XML(send_request(xml.to_s))
|
83
|
+
|
84
|
+
result_message = (response/"epp"/"response"/"result"/"msg").text.strip
|
85
|
+
result_code = (response/"epp"/"response"/"result").attr("code").to_i
|
86
|
+
|
87
|
+
if result_code == 1000
|
88
|
+
return true
|
89
|
+
else
|
90
|
+
raise EppErrorResponse.new(:code => result_code, :message => result_message)
|
91
|
+
end
|
83
92
|
end
|
84
93
|
|
85
94
|
def logout
|
86
|
-
xml = Document.new
|
87
|
-
xml << XMLDecl.new("1.0", "UTF-8", "no")
|
95
|
+
xml = REXML::Document.new
|
96
|
+
xml << REXML::XMLDecl.new("1.0", "UTF-8", "no")
|
88
97
|
|
89
98
|
xml.add_element('epp', {
|
90
99
|
'xmlns' => "urn:ietf:params:xml:ns:epp-1.0",
|
@@ -95,7 +104,17 @@ module Epp #:nodoc:
|
|
95
104
|
command = xml.root.add_element("command")
|
96
105
|
login = command.add_element("logout")
|
97
106
|
|
98
|
-
|
107
|
+
# Receive the logout response
|
108
|
+
response = Hpricot.XML(send_request(xml.to_s))
|
109
|
+
|
110
|
+
result_message = (response/"epp"/"response"/"result"/"msg").text.strip
|
111
|
+
result_code = (response/"epp"/"response"/"result").attr("code").to_i
|
112
|
+
|
113
|
+
if result_code == 1500
|
114
|
+
return true
|
115
|
+
else
|
116
|
+
raise EppErrorResponse.new(:code => result_code, :message => result_message)
|
117
|
+
end
|
99
118
|
end
|
100
119
|
|
101
120
|
# Establishes the connection to the server. If the connection is
|
@@ -157,9 +176,7 @@ module Epp #:nodoc:
|
|
157
176
|
# Send an XML frame to the server. Should return the total byte
|
158
177
|
# size of the frame sent to the server. If the socket returns EOF,
|
159
178
|
# the connection has closed and a SocketError is raised.
|
160
|
-
def send_frame(xml)
|
161
|
-
raise SocketError.new("Connection closed by remote server") if @socket.eof?
|
162
|
-
|
179
|
+
def send_frame(xml)
|
163
180
|
@socket.write([xml.size + 4].pack("N") + xml)
|
164
181
|
end
|
165
182
|
end
|
data/lib/epp.rb
CHANGED
@@ -7,9 +7,11 @@ require 'socket'
|
|
7
7
|
require 'activesupport'
|
8
8
|
require 'require_parameters'
|
9
9
|
require 'rexml/document'
|
10
|
+
require 'hpricot'
|
10
11
|
|
11
|
-
require 'epp/server
|
12
|
+
require 'epp/server'
|
13
|
+
require 'epp/exceptions'
|
12
14
|
|
13
15
|
module Epp #:nodoc:
|
14
|
-
VERSION = '1.0.
|
16
|
+
VERSION = '1.0.3'
|
15
17
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ultraspeed-epp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Josh Delsman
|
@@ -11,8 +11,27 @@ cert_chain: []
|
|
11
11
|
|
12
12
|
date: 2009-06-04 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
|
-
dependencies:
|
15
|
-
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: activesupport
|
17
|
+
type: :runtime
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 2.3.2
|
24
|
+
version:
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: hpricot
|
27
|
+
type: :runtime
|
28
|
+
version_requirement:
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.8.1
|
34
|
+
version:
|
16
35
|
description: Basic functionality for connecting and making requests on EPP (Extensible Provisioning Protocol) servers.
|
17
36
|
email: jdelsman@ultraspeed.com
|
18
37
|
executables: []
|