soap4juddi 0.1.6 → 0.1.8
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.
- 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
|