soap4juddi 0.1.6 → 0.1.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/lib/soap4juddi/broker.rb +7 -13
- data/lib/soap4juddi/connector.rb +61 -17
- data/lib/soap4juddi/invalid_destination_error.rb +4 -0
- data/lib/soap4juddi/invalid_element_error.rb +4 -0
- data/lib/soap4juddi/invalid_request_error.rb +4 -0
- data/lib/soap4juddi/invalid_text_error.rb +4 -0
- data/lib/soap4juddi/version.rb +1 -1
- data/lib/soap4juddi/xml.rb +59 -15
- data/lib/soap4juddi.rb +5 -2
- data/soap4juddi.gemspec +2 -0
- metadata +34 -3
- data/lib/soap4juddi/jsender.rb +0 -50
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6eeb72a738505c99d644f5129fa372a319a50c39
|
4
|
+
data.tar.gz: a16aab08c0e0a2f9ef4485977495a7c5e2e5b63f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9ced6c86ef600c3d03935faf1a21c2435aad05d83b03f7b99afc5dfa18922e3e179695a2347868078161119be9381eaa24e4cfed6766c3beb23891776e35a765
|
7
|
+
data.tar.gz: 85e3575f83470add6ad307625f2d58edd14ea4cd5da0a2f2c6d7ca7899c895304ab7368e6d3619077fb1370a68a24379672522ff1f216037e798104fa718e877
|
data/.gitignore
CHANGED
data/lib/soap4juddi/broker.rb
CHANGED
@@ -43,8 +43,7 @@ module Soap4juddi
|
|
43
43
|
body = "#{body}#{xml}" if desc and not (desc == "")
|
44
44
|
end
|
45
45
|
end
|
46
|
-
|
47
|
-
if contacts
|
46
|
+
if (contacts) and (not contacts.empty?)
|
48
47
|
# byebug
|
49
48
|
contacts_xml = ""
|
50
49
|
contacts.each do |contact|
|
@@ -168,7 +167,7 @@ module Soap4juddi
|
|
168
167
|
|
169
168
|
def extract_service(soap)
|
170
169
|
entries = {}
|
171
|
-
entries[@soap_xml.
|
170
|
+
entries[@soap_xml.extract_value(soap, 'serviceKey')] = extract_name(soap)
|
172
171
|
entries
|
173
172
|
end
|
174
173
|
|
@@ -178,7 +177,7 @@ module Soap4juddi
|
|
178
177
|
while entry do
|
179
178
|
service = entry[/<ns2:serviceInfo (.*?)<\/ns2:serviceInfo>/, 1]
|
180
179
|
break if service.nil? or ((service.is_a? String) and (service.strip == ""))
|
181
|
-
id = @soap_xml.
|
180
|
+
id = @soap_xml.extract_value(service, 'serviceKey')
|
182
181
|
entries[id.gsub(urn, "")] = { 'id' => id, 'name' => extract_name(service) } if id.include?(urn)
|
183
182
|
entry[/<ns2:serviceInfo (.*?)<\/ns2:serviceInfo>/, 1] = ""
|
184
183
|
entry.gsub!("<ns2:serviceInfo </ns2:serviceInfo>", "")
|
@@ -189,7 +188,7 @@ module Soap4juddi
|
|
189
188
|
|
190
189
|
def extract_business(soap)
|
191
190
|
entries = {}
|
192
|
-
entries[@soap_xml.
|
191
|
+
entries[@soap_xml.extract_value(soap, 'businessKey').gsub(@urns['domains'], "").gsub(@urns['teams'], "")] = { 'name' => extract_name(soap), 'description' => extract_descriptions(soap), 'contacts' => extract_contacts(soap) }
|
193
192
|
entries
|
194
193
|
end
|
195
194
|
|
@@ -200,7 +199,7 @@ module Soap4juddi
|
|
200
199
|
business = entry[/<ns2:businessInfo (.*?)<\/ns2:businessInfo>/, 1]
|
201
200
|
break if business.nil? or ((business.is_a? String) and (business.strip == ""))
|
202
201
|
business[/<ns2:serviceInfos(.*?)<\/ns2:serviceInfos>/, 1] = "" if business[/<ns2:serviceInfos(.*?)<\/ns2:serviceInfos>/, 1]
|
203
|
-
id = @soap_xml.
|
202
|
+
id = @soap_xml.extract_value(entry, 'businessKey')
|
204
203
|
key = id.gsub(@urns['domains'], "").gsub(@urns['teams'], "")
|
205
204
|
entries[key] = { 'id' => id, 'name' => extract_name(business) }
|
206
205
|
entry[/<ns2:businessInfo (.*?)<\/ns2:businessInfo>/, 1] = ""
|
@@ -214,11 +213,6 @@ module Soap4juddi
|
|
214
213
|
soap[/<ns2:result errno="(.*?)"\/>/, 1]
|
215
214
|
end
|
216
215
|
|
217
|
-
def check_availability
|
218
|
-
result = `curl -S #{@base_uri}/juddiv3 2>&1`
|
219
|
-
not(result.downcase.include?("fail"))
|
220
|
-
end
|
221
|
-
|
222
216
|
def authenticate(auth_user, auth_password)
|
223
217
|
@soap_connector.authenticate(auth_user, auth_password)
|
224
218
|
end
|
@@ -245,7 +239,7 @@ module Soap4juddi
|
|
245
239
|
while entry do
|
246
240
|
binding = entry[/<ns2:bindingTemplate (.*?)<\/ns2:bindingTemplate>/, 1]
|
247
241
|
break if binding.nil? or ((binding.is_a? String) and (binding.strip == ""))
|
248
|
-
id = @soap_xml.
|
242
|
+
id = @soap_xml.extract_value(binding, 'bindingKey')
|
249
243
|
entries[id] = {'access_point' => extract_access_point(binding), 'description' => extract_description(binding)}
|
250
244
|
entry[/<ns2:bindingTemplate (.*?)<\/ns2:bindingTemplate>/, 1] = ""
|
251
245
|
entry.gsub!("<ns2:bindingTemplate </ns2:bindingTemplate>", "")
|
@@ -277,7 +271,7 @@ module Soap4juddi
|
|
277
271
|
while entry do
|
278
272
|
binding = entry[/<ns2:bindingTemplate (.*?)<\/ns2:bindingTemplate>/, 1]
|
279
273
|
break if binding.nil? or ((binding.is_a? String) and (binding.strip == ""))
|
280
|
-
id = @soap_xml.
|
274
|
+
id = @soap_xml.extract_value(binding, 'bindingKey')
|
281
275
|
entries << extract_access_point(binding)
|
282
276
|
entry[/<ns2:bindingTemplate (.*?)<\/ns2:bindingTemplate>/, 1] = ""
|
283
277
|
entry.gsub!("<ns2:bindingTemplate </ns2:bindingTemplate>", "")
|
data/lib/soap4juddi/connector.rb
CHANGED
@@ -1,24 +1,32 @@
|
|
1
1
|
require 'net/http'
|
2
|
+
require 'jsender'
|
2
3
|
|
3
4
|
module Soap4juddi
|
4
5
|
class Connector
|
5
|
-
include
|
6
|
+
include Jsender
|
7
|
+
|
8
|
+
attr_reader :uri
|
9
|
+
attr_reader :soap_xml
|
10
|
+
attr_accessor :auth_token
|
6
11
|
|
7
12
|
def initialize
|
8
13
|
@soap_xml = Soap4juddi::XML.new
|
9
14
|
end
|
10
15
|
|
16
|
+
def has_credentials?
|
17
|
+
return true if @auth_user or @auth_password
|
18
|
+
false
|
19
|
+
end
|
20
|
+
|
11
21
|
def authenticate(auth_user, auth_password)
|
12
|
-
|
13
|
-
|
22
|
+
@auth_user = auth_user
|
23
|
+
@auth_password =auth_password
|
14
24
|
end
|
15
25
|
|
16
26
|
def authorize(base_uri)
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
end
|
21
|
-
@auth_token
|
27
|
+
validate_base_uri(base_uri)
|
28
|
+
@auth_token = '' #clear existing auth token
|
29
|
+
@auth_token = request_auth_token(base_uri)
|
22
30
|
end
|
23
31
|
|
24
32
|
def request_soap(base_uri, version, service, request, attr = nil, &block)
|
@@ -30,15 +38,31 @@ module Soap4juddi
|
|
30
38
|
end
|
31
39
|
|
32
40
|
def execute(req, &block)
|
41
|
+
validate_destination(req)
|
33
42
|
res = Net::HTTP.start(@uri.hostname, @uri.port) do |http|
|
34
43
|
http.request(req)
|
35
44
|
end
|
36
|
-
|
37
45
|
jsend_result(res, block)
|
38
46
|
end
|
39
47
|
|
48
|
+
def connection(base_uri, service, action)
|
49
|
+
validate_connection_parameters(base_uri, service, action)
|
50
|
+
build_post_request(base_uri, service, action)
|
51
|
+
end
|
52
|
+
|
53
|
+
def extract_auth_token(body)
|
54
|
+
(body.split('authtoken:')[1]).split('<')[0]
|
55
|
+
end
|
56
|
+
|
40
57
|
private
|
41
58
|
|
59
|
+
def request_auth_token(base_uri)
|
60
|
+
result = execute(build_authorization_request(base_uri)) do |res|
|
61
|
+
@auth_token = extract_auth_token(res.body)
|
62
|
+
end
|
63
|
+
@auth_token
|
64
|
+
end
|
65
|
+
|
42
66
|
def build_authorization_request(base_uri)
|
43
67
|
req = connection(base_uri, 'security', 'get_authToken')
|
44
68
|
auth = @soap_xml.element_with_value('get_authToken', '', {'userID' => @auth_user, 'cred' => @auth_password})
|
@@ -46,14 +70,6 @@ module Soap4juddi
|
|
46
70
|
req
|
47
71
|
end
|
48
72
|
|
49
|
-
def connection(base_uri, service, action)
|
50
|
-
@uri = URI("#{base_uri}/juddiv3/services/#{service}")
|
51
|
-
req = Net::HTTP::Post.new(@uri)
|
52
|
-
req.content_type = @soap_xml.content_type
|
53
|
-
req['SOAPAction'] = action
|
54
|
-
req
|
55
|
-
end
|
56
|
-
|
57
73
|
def jsend_result(res, block)
|
58
74
|
case res
|
59
75
|
when Net::HTTPSuccess
|
@@ -68,5 +84,33 @@ module Soap4juddi
|
|
68
84
|
return success_data(result) if result
|
69
85
|
return success
|
70
86
|
end
|
87
|
+
|
88
|
+
def build_uri(base_uri, service)
|
89
|
+
@uri = URI("#{base_uri}/juddiv3/services/#{service}")
|
90
|
+
end
|
91
|
+
|
92
|
+
def validate_connection_parameters(base_uri, service, action)
|
93
|
+
validate_base_uri(base_uri)
|
94
|
+
raise Soap4juddi::InvalidDestinationError.new('no service provided') if service.nil?
|
95
|
+
raise Soap4juddi::InvalidDestinationError.new('no action provided') if action.nil?
|
96
|
+
true
|
97
|
+
end
|
98
|
+
|
99
|
+
def build_post_request(base_uri, service, action)
|
100
|
+
req = Net::HTTP::Post.new(build_uri(base_uri, service))
|
101
|
+
req.content_type = @soap_xml.content_type
|
102
|
+
req['SOAPAction'] = action
|
103
|
+
req
|
104
|
+
end
|
105
|
+
|
106
|
+
def validate_destination(req)
|
107
|
+
raise Soap4juddi::InvalidRequestError.new('no request provided') if req.nil?
|
108
|
+
true
|
109
|
+
end
|
110
|
+
|
111
|
+
def validate_base_uri(base_uri)
|
112
|
+
raise Soap4juddi::InvalidDestinationError.new('no base URI provided') if base_uri.nil?
|
113
|
+
true
|
114
|
+
end
|
71
115
|
end
|
72
116
|
end
|
data/lib/soap4juddi/version.rb
CHANGED
data/lib/soap4juddi/xml.rb
CHANGED
@@ -1,43 +1,87 @@
|
|
1
1
|
module Soap4juddi
|
2
2
|
class XML
|
3
3
|
def element_with_key_value(element, key, value, attributes = nil)
|
4
|
-
element_with_value(element, "#{key}:#{value}")
|
4
|
+
element_with_value(element, "#{key}:#{value}", attributes)
|
5
5
|
end
|
6
6
|
|
7
7
|
def element_with_value(element, value, attributes = nil)
|
8
|
+
validate_element(element)
|
8
9
|
xml = "<urn:#{element}"
|
9
10
|
xml = append_key_value_attributes_to_xml(xml, attributes) if attributes
|
10
|
-
xml
|
11
|
+
xml += ">#{value}</urn:#{element}>"
|
11
12
|
end
|
12
13
|
|
13
|
-
def
|
14
|
-
soap
|
14
|
+
def extract_value(soap, key)
|
15
|
+
validate_text(soap, 'text') and validate_text(key, 'key')
|
16
|
+
extract_value_in_quotes_using_key(soap, key)
|
15
17
|
end
|
16
18
|
|
17
19
|
def envelope_header_body(text, version = 3)
|
18
|
-
"<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/' xmlns:urn='urn:uddi-org:api_v#{version}'> <soapenv:Header/> <soapenv:Body
|
20
|
+
"<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/' xmlns:urn='urn:uddi-org:api_v#{version.to_s}'> <soapenv:Header/> <soapenv:Body>#{text.to_s}</soapenv:Body> </soapenv:Envelope>"
|
19
21
|
end
|
20
22
|
|
21
|
-
def soap_envelope(message, urn = nil,
|
22
|
-
|
23
|
-
|
24
|
-
text =
|
25
|
-
text = text + "</urn:#{urn}>" if urn
|
23
|
+
def soap_envelope(message, urn = nil, attributes = nil)
|
24
|
+
validate_text(urn, 'urn') if urn
|
25
|
+
validate_text(attributes, 'attributes') if attributes
|
26
|
+
text = inject_urn_and_attributes_into_message(message, urn, attributes)
|
26
27
|
envelope_header_body(text, 2)
|
27
28
|
end
|
28
|
-
|
29
|
+
|
29
30
|
def content_type
|
30
31
|
'text/xml;charset=UTF-8'
|
31
32
|
end
|
32
33
|
|
33
34
|
private
|
34
35
|
|
36
|
+
def validate_element(element)
|
37
|
+
raise Soap4juddi::InvalidElementError.new('invalid element provided') if element.nil?
|
38
|
+
raise Soap4juddi::InvalidElementError.new('invalid element provided') if not element.is_a?(String)
|
39
|
+
raise Soap4juddi::InvalidElementError.new('no element provided') if element.strip == ''
|
40
|
+
end
|
41
|
+
|
35
42
|
def append_key_value_attributes_to_xml(xml, attributes)
|
36
|
-
attributes.each do |
|
37
|
-
|
38
|
-
xml = "#{xml} #{k}=#{v}"
|
43
|
+
attributes.each do |a, v|
|
44
|
+
xml += " #{a}='#{v}'"
|
39
45
|
end
|
40
46
|
xml
|
41
|
-
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def validate_text(text, label)
|
50
|
+
raise Soap4juddi::InvalidTextError.new("no #{label} provided") if text.nil?
|
51
|
+
raise Soap4juddi::InvalidTextError.new("invalid #{label} provided") if invalid_text?(text)
|
52
|
+
true
|
53
|
+
end
|
54
|
+
|
55
|
+
def invalid_text?(text)
|
56
|
+
((not text.is_a?(String)) or (text.strip == ''))
|
57
|
+
end
|
58
|
+
|
59
|
+
def extract_value_in_quotes_using_key(soap, key)
|
60
|
+
extract_value_in_arbitrary_quotes_following_key_and_equal_sign(
|
61
|
+
collapse_spaces_around_equal_sign(soap), key
|
62
|
+
)
|
63
|
+
rescue
|
64
|
+
nil
|
65
|
+
end
|
66
|
+
|
67
|
+
def collapse_spaces_around_equal_sign(soap)
|
68
|
+
data = soap
|
69
|
+
data[/\s*=\s*/] = '='
|
70
|
+
data
|
71
|
+
end
|
72
|
+
|
73
|
+
def extract_value_in_arbitrary_quotes_following_key_and_equal_sign(soap, key)
|
74
|
+
result = soap[/#{key}="(.*?)"/, 1]
|
75
|
+
result ||= soap[/#{key}='(.*?)'/, 1]
|
76
|
+
result
|
77
|
+
end
|
78
|
+
|
79
|
+
def inject_urn_and_attributes_into_message(message, urn, attributes)
|
80
|
+
text = ""
|
81
|
+
text += "<urn:#{urn} generic='2.0' xmlns='urn:uddi-org:api_v2' " + (attributes.nil? ? "" : attributes) + ">" if urn
|
82
|
+
text += message.to_s
|
83
|
+
text += "</urn:#{urn}>" if urn
|
84
|
+
text
|
85
|
+
end
|
42
86
|
end
|
43
87
|
end
|
data/lib/soap4juddi.rb
CHANGED
@@ -1,5 +1,8 @@
|
|
1
|
-
require
|
2
|
-
require 'soap4juddi/
|
1
|
+
require 'soap4juddi/version'
|
2
|
+
require 'soap4juddi/invalid_element_error'
|
3
|
+
require 'soap4juddi/invalid_text_error'
|
4
|
+
require 'soap4juddi/invalid_request_error'
|
5
|
+
require 'soap4juddi/invalid_destination_error'
|
3
6
|
require 'soap4juddi/xml'
|
4
7
|
require 'soap4juddi/connector'
|
5
8
|
require 'soap4juddi/broker'
|
data/soap4juddi.gemspec
CHANGED
@@ -23,4 +23,6 @@ Gem::Specification.new do |spec|
|
|
23
23
|
spec.add_development_dependency "bundler", "~> 1.10"
|
24
24
|
spec.add_development_dependency "rake", "~> 10.0"
|
25
25
|
spec.add_development_dependency "rspec"
|
26
|
+
spec.add_development_dependency "byebug"
|
27
|
+
spec.add_dependency "jsender"
|
26
28
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: soap4juddi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ernst van Graan
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-12-
|
11
|
+
date: 2015-12-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -52,6 +52,34 @@ dependencies:
|
|
52
52
|
- - '>='
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: byebug
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: jsender
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - '>='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - '>='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
55
83
|
description: Provides connector, xml and brokerage facilities to a jUDDI consumer
|
56
84
|
email:
|
57
85
|
- ernst.van.graan@hetzner.co.za
|
@@ -71,7 +99,10 @@ files:
|
|
71
99
|
- lib/soap4juddi.rb
|
72
100
|
- lib/soap4juddi/broker.rb
|
73
101
|
- lib/soap4juddi/connector.rb
|
74
|
-
- lib/soap4juddi/
|
102
|
+
- lib/soap4juddi/invalid_destination_error.rb
|
103
|
+
- lib/soap4juddi/invalid_element_error.rb
|
104
|
+
- lib/soap4juddi/invalid_request_error.rb
|
105
|
+
- lib/soap4juddi/invalid_text_error.rb
|
75
106
|
- lib/soap4juddi/version.rb
|
76
107
|
- lib/soap4juddi/xml.rb
|
77
108
|
- soap4juddi.gemspec
|
data/lib/soap4juddi/jsender.rb
DELETED
@@ -1,50 +0,0 @@
|
|
1
|
-
module Soap4juddi
|
2
|
-
module JSender
|
3
|
-
def report(status, message, result = nil)
|
4
|
-
data = compile_data(result)
|
5
|
-
data['notifications'] = message.is_a?(Array) ? message : [ message ]
|
6
|
-
{ 'status' => status, 'data' => data }
|
7
|
-
end
|
8
|
-
|
9
|
-
def fail(message = nil, data = nil)
|
10
|
-
message ||= 'fail'
|
11
|
-
report('fail', message, data)
|
12
|
-
end
|
13
|
-
|
14
|
-
def fail_data(data = nil)
|
15
|
-
fail(nil, data)
|
16
|
-
end
|
17
|
-
|
18
|
-
def success_data(data = nil)
|
19
|
-
success(nil, data)
|
20
|
-
end
|
21
|
-
|
22
|
-
def success(message = nil, data = nil)
|
23
|
-
message ||= 'success'
|
24
|
-
report('success', message, data)
|
25
|
-
end
|
26
|
-
|
27
|
-
def has_data?(result, key = nil)
|
28
|
-
return false if key.nil?
|
29
|
-
return false if (result.nil?) or (result['data'].nil?)
|
30
|
-
return false if (not key.nil?) and (result['data'][key].nil?)
|
31
|
-
true
|
32
|
-
end
|
33
|
-
|
34
|
-
def notifications_include?(result, pattern)
|
35
|
-
return false if not has_data?(result, 'notifications')
|
36
|
-
result['data']['notifications'].to_s.include?(pattern)
|
37
|
-
end
|
38
|
-
|
39
|
-
private
|
40
|
-
|
41
|
-
def compile_data(result)
|
42
|
-
data ||= {}
|
43
|
-
result = { 'result' => result} if not result.is_a? Hash
|
44
|
-
result.each do |key, value|
|
45
|
-
data[key] = value
|
46
|
-
end
|
47
|
-
data
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|