omf_common 6.0.2.pre.2 → 6.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.
Files changed (62) hide show
  1. data/bin/file_broadcaster.rb +5 -0
  2. data/bin/file_receiver.rb +5 -0
  3. data/bin/omf_keygen +3 -3
  4. data/bin/omf_send_configure +114 -0
  5. data/bin/omf_send_request +19 -4
  6. data/example/engine_alt.rb +13 -7
  7. data/example/viz/garage_monitor.rb +69 -0
  8. data/example/viz/garage_viz.rb +52 -0
  9. data/example/viz/htdocs/image/garage.png +0 -0
  10. data/example/viz/htdocs/template/garage_banner.html +2 -0
  11. data/example/viz/layout.yaml +44 -0
  12. data/example/vm_alt.rb +5 -0
  13. data/lib/omf_common.rb +17 -8
  14. data/lib/omf_common/auth.rb +5 -0
  15. data/lib/omf_common/auth/certificate.rb +21 -2
  16. data/lib/omf_common/auth/certificate_store.rb +50 -20
  17. data/lib/omf_common/auth/ssh_pub_key_convert.rb +7 -0
  18. data/lib/omf_common/comm.rb +6 -1
  19. data/lib/omf_common/comm/amqp/amqp_communicator.rb +88 -12
  20. data/lib/omf_common/comm/amqp/amqp_file_transfer.rb +5 -0
  21. data/lib/omf_common/comm/amqp/amqp_topic.rb +37 -18
  22. data/lib/omf_common/comm/local/local_communicator.rb +5 -0
  23. data/lib/omf_common/comm/local/local_topic.rb +5 -0
  24. data/lib/omf_common/comm/topic.rb +32 -13
  25. data/lib/omf_common/comm/xmpp/communicator.rb +11 -1
  26. data/lib/omf_common/comm/xmpp/topic.rb +5 -0
  27. data/lib/omf_common/comm/xmpp/xmpp_mp.rb +5 -0
  28. data/lib/omf_common/command.rb +5 -0
  29. data/lib/omf_common/core_ext/string.rb +5 -0
  30. data/lib/omf_common/default_logging.rb +23 -5
  31. data/lib/omf_common/eventloop.rb +40 -23
  32. data/lib/omf_common/eventloop/em.rb +18 -5
  33. data/lib/omf_common/eventloop/local_evl.rb +18 -15
  34. data/lib/omf_common/exec_app.rb +44 -24
  35. data/lib/omf_common/key.rb +5 -0
  36. data/lib/omf_common/measure.rb +5 -0
  37. data/lib/omf_common/message.rb +5 -0
  38. data/lib/omf_common/message/json/json_message.rb +13 -5
  39. data/lib/omf_common/message/xml/message.rb +19 -4
  40. data/lib/omf_common/message/xml/relaxng_schema.rb +5 -0
  41. data/lib/omf_common/message/xml/topic_message.rb +5 -0
  42. data/lib/omf_common/version.rb +6 -1
  43. data/omf_common.gemspec +3 -2
  44. data/test/fixture/1st_level.pem +20 -0
  45. data/test/fixture/2nd_level.pem +19 -0
  46. data/test/fixture/3rd_level.pem +19 -0
  47. data/test/fixture/pubsub.rb +5 -0
  48. data/test/fixture/rc.pem +18 -0
  49. data/test/fixture/root.pem +17 -0
  50. data/test/omf_common/auth/certificate_spec.rb +27 -0
  51. data/test/omf_common/auth/certificate_store_spec.rb +58 -0
  52. data/test/omf_common/auth/ssh_pub_key_convert_spec.rb +5 -0
  53. data/test/omf_common/comm/topic_spec.rb +7 -1
  54. data/test/omf_common/comm/xmpp/communicator_spec.rb +5 -0
  55. data/test/omf_common/comm/xmpp/topic_spec.rb +5 -0
  56. data/test/omf_common/comm_spec.rb +5 -0
  57. data/test/omf_common/command_spec.rb +5 -0
  58. data/test/omf_common/core_ext/string_spec.rb +5 -0
  59. data/test/omf_common/message/xml/message_spec.rb +5 -0
  60. data/test/omf_common/message_spec.rb +8 -3
  61. data/test/test_helper.rb +5 -0
  62. metadata +48 -11
@@ -1,3 +1,8 @@
1
+ # Copyright (c) 2012 National ICT Australia Limited (NICTA).
2
+ # This software may be used and distributed solely under the terms of the MIT license (License).
3
+ # You should find a copy of the License in LICENSE.TXT or at http://opensource.org/licenses/MIT.
4
+ # By downloading or using this software you accept the terms and the liability disclaimer in the License.
5
+
1
6
  #
2
7
  # Copyright (c) 2006-2012 National ICT Australia (NICTA), Australia
3
8
  #
@@ -36,25 +41,28 @@ class ExecApp
36
41
  # Holds the pids for all active apps
37
42
  @@all_apps = Hash.new
38
43
 
39
- # True if this active app is being killed by a proper
40
- # call to ExecApp.signal_all() or signal()
41
- # (i.e. when the caller of ExecApp decided to stop the application,
42
- # as far as we are concerned, this is a 'clean' exit)
43
- @clean_exit = false
44
-
45
44
  # Return an application instance based on its ID
46
45
  #
47
46
  # @param [String] id of the application to return
48
- def ExecApp.[](id)
47
+ def self.[](id)
49
48
  app = @@all_apps[id]
50
49
  logger.info "Unknown application '#{id}/#{id.class}'" if app.nil?
51
50
  return app
52
51
  end
53
52
 
54
- def ExecApp.signal_all(signal = 'KILL')
53
+ def self.signal_all(signal = 'KILL')
55
54
  @@all_apps.each_value { |app| app.signal(signal) }
56
55
  end
57
56
 
57
+ attr_reader :pid, :clean_exit
58
+
59
+ # True if this active app is being killed by a proper
60
+ # call to ExecApp.signal_all() or signal()
61
+ # (i.e. when the caller of ExecApp decided to stop the application,
62
+ # as far as we are concerned, this is a 'clean' exit)
63
+ @clean_exit = false
64
+
65
+
58
66
  def stdin(line)
59
67
  logger.debug "Writing '#{line}' to app '#{@id}'"
60
68
  @stdin.write("#{line}\n")
@@ -63,9 +71,10 @@ class ExecApp
63
71
 
64
72
  def signal(signal = 'KILL')
65
73
  @clean_exit = true
66
- Process.kill(signal, @pid)
74
+ Process.kill(signal, -1 * @pid) # we are sending to the entire process group
67
75
  end
68
76
 
77
+
69
78
  #
70
79
  # Run an application 'cmd' in a separate thread and monitor
71
80
  # its stdout. Also send status reports to the 'observer' by
@@ -78,9 +87,9 @@ class ExecApp
78
87
  #
79
88
  def initialize(id, cmd, map_std_err_to_out = false, working_directory = nil, &observer)
80
89
 
81
- @id = id
90
+ @id = id || self.object_id
82
91
  @observer = observer
83
- @@all_apps[id] = self
92
+ @@all_apps[@id] = self
84
93
  @exit_status = nil
85
94
  @threads = []
86
95
 
@@ -88,8 +97,9 @@ class ExecApp
88
97
  pr = IO::pipe
89
98
  pe = IO::pipe
90
99
 
91
- logger.debug "Starting application '#{id}' - cmd: '#{cmd}'"
92
- @observer.call(:STARTED, id, cmd)
100
+ logger.debug "Starting application '#{@id}' - cmd: '#{cmd}'"
101
+ #@observer.call(:STARTED, id, cmd)
102
+ call_observer(:STARTED, cmd)
93
103
  @pid = fork {
94
104
  # child will remap pipes to std and exec cmd
95
105
  pw[1].close
@@ -105,6 +115,9 @@ class ExecApp
105
115
  pe[1].close
106
116
 
107
117
  begin
118
+ pgid = Process.setsid # Create a new process group
119
+ # which includes all potential child processes
120
+ STDOUT.puts "INTERNAL WARNING: Assuming process_group_id == pid" unless pgid == $$
108
121
  Dir.chdir working_directory if working_directory
109
122
  exec(cmd)
110
123
  rescue => ex
@@ -124,12 +137,15 @@ class ExecApp
124
137
  @threads << Thread.new(id, @pid) do |id, pid|
125
138
  ret = Process.waitpid(pid)
126
139
  @exit_status = $?.exitstatus
140
+ if @exit_status > 127
141
+ @exit_status = 128 - @exit_status
142
+ end
127
143
  @@all_apps.delete(@id)
128
144
  # app finished
129
145
  if (@exit_status == 0) || @clean_exit
130
- logger.debug "Application '#{id}' finished"
146
+ logger.debug "Application '#{@id}' finished"
131
147
  else
132
- logger.debug "Application '#{id}' failed (code=#{@exit_status})"
148
+ logger.debug "Application '#{@id}' failed (code=#{@exit_status})"
133
149
  end
134
150
  end
135
151
  @stdin = pw[1]
@@ -137,13 +153,9 @@ class ExecApp
137
153
  # wait for done in yet another thread
138
154
  Thread.new do
139
155
  @threads.each {|t| t.join }
140
- if (@exit_status == 0) || @clean_exit
141
- s = "OK"
142
- else
143
- s = "ERROR"
144
- end
145
- @observer.call("DONE.#{s}", @id, "status: #{@exit_status}")
156
+ call_observer("EXIT", @exit_status)
146
157
  end
158
+ logger.debug "Application is running with PID #{@pid}"
147
159
  end
148
160
 
149
161
  private
@@ -160,12 +172,10 @@ class ExecApp
160
172
  begin
161
173
  while true do
162
174
  s = pipe.readline.chomp
163
- #puts "#{name}: #{s}"
164
- @observer.call(name.to_s.upcase, @id, s)
175
+ call_observer(name.to_s.upcase, s)
165
176
  end
166
177
  rescue EOFError
167
178
  # do nothing
168
- #puts "++++ STOP MONITORING #{name}"
169
179
  rescue => err
170
180
  logger.error "monitorApp(#{@id}): #{err}"
171
181
  logger.debug "#{err}\n\t#{err.backtrace.join("\n\t")}"
@@ -174,4 +184,14 @@ class ExecApp
174
184
  end
175
185
  end
176
186
  end
187
+
188
+ def call_observer(event_type, msg)
189
+ return unless @observer
190
+ begin
191
+ @observer.call(event_type, @id, msg)
192
+ rescue Exception => ex
193
+ logger.warn "Exception while calling observer '#{@observer}': #{ex}"
194
+ logger.debug "#{ex}\n\t#{ex.backtrace.join("\n\t")}"
195
+ end
196
+ end
177
197
  end
@@ -1,3 +1,8 @@
1
+ # Copyright (c) 2012 National ICT Australia Limited (NICTA).
2
+ # This software may be used and distributed solely under the terms of the MIT license (License).
3
+ # You should find a copy of the License in LICENSE.TXT or at http://opensource.org/licenses/MIT.
4
+ # By downloading or using this software you accept the terms and the liability disclaimer in the License.
5
+
1
6
  require 'openssl'
2
7
  require 'singleton'
3
8
 
@@ -1,3 +1,8 @@
1
+ # Copyright (c) 2012 National ICT Australia Limited (NICTA).
2
+ # This software may be used and distributed solely under the terms of the MIT license (License).
3
+ # You should find a copy of the License in LICENSE.TXT or at http://opensource.org/licenses/MIT.
4
+ # By downloading or using this software you accept the terms and the liability disclaimer in the License.
5
+
1
6
  require 'oml4r'
2
7
  module OmfCommon
3
8
  class Measure
@@ -1,3 +1,8 @@
1
+ # Copyright (c) 2012 National ICT Australia Limited (NICTA).
2
+ # This software may be used and distributed solely under the terms of the MIT license (License).
3
+ # You should find a copy of the License in LICENSE.TXT or at http://opensource.org/licenses/MIT.
4
+ # By downloading or using this software you accept the terms and the liability disclaimer in the License.
5
+
1
6
  module OmfCommon
2
7
 
3
8
  class MPMessage < OML4R::MPBase
@@ -1,3 +1,8 @@
1
+ # Copyright (c) 2012 National ICT Australia Limited (NICTA).
2
+ # This software may be used and distributed solely under the terms of the MIT license (License).
3
+ # You should find a copy of the License in LICENSE.TXT or at http://opensource.org/licenses/MIT.
4
+ # By downloading or using this software you accept the terms and the liability disclaimer in the License.
5
+
1
6
 
2
7
  require 'json'
3
8
  require 'omf_common/auth'
@@ -18,10 +23,13 @@ module OmfCommon
18
23
 
19
24
  def self.create(type, properties, body = {})
20
25
  if type == :request
21
- unless properties.kind_of?(Array)
26
+ unless (req_props = properties).kind_of?(Array)
22
27
  raise "Expected array, but got #{properties.class} for request message"
23
28
  end
24
- properties = {select: properties}
29
+ #properties = {select: properties}
30
+ properties = {}
31
+ req_props.each {|n| properties[n] = nil }
32
+
25
33
  elsif not properties.kind_of?(Hash)
26
34
  raise "Expected hash, but got #{properties.class}"
27
35
  end
@@ -89,8 +97,8 @@ module OmfCommon
89
97
  return nil
90
98
  end
91
99
 
92
- unless cert.verify_cert
93
- warn "JWT: Invalid certificate '#{cert.to_s}', NOT signed by root certificate."
100
+ unless OmfCommon::Auth::CertificateStore.instance.verify(cert)
101
+ warn "JWT: Invalid certificate '#{cert.to_s}', NOT signed by CA certs, or its CA cert NOT loaded into cert store."
94
102
  end
95
103
 
96
104
  #puts ">>> #{cert.to_x509.public_key}::#{signature_base_string}"
@@ -170,7 +178,7 @@ module OmfCommon
170
178
  #puts "MARSHALL: #{@content.inspect} - #{@properties.to_hash.inspect}"
171
179
  raise "Missing SRC declaration in #{@content}" unless @content[:src]
172
180
  if @content[:src].is_a? OmfCommon::Comm::Topic
173
- @content[:src] = @content[:src].id
181
+ @content[:src] = @content[:src].address
174
182
  end
175
183
  #raise 'local/local' if @content[:src].id.match 'local:/local'
176
184
  #puts @content.inspect
@@ -1,3 +1,8 @@
1
+ # Copyright (c) 2012 National ICT Australia Limited (NICTA).
2
+ # This software may be used and distributed solely under the terms of the MIT license (License).
3
+ # You should find a copy of the License in LICENSE.TXT or at http://opensource.org/licenses/MIT.
4
+ # By downloading or using this software you accept the terms and the liability disclaimer in the License.
5
+
1
6
  require 'niceogiri'
2
7
  require 'hashie'
3
8
  require 'securerandom'
@@ -71,8 +76,13 @@ class XML
71
76
  cert = OmfCommon::Auth::CertificateStore.instance.cert_for(iss)
72
77
  end
73
78
 
74
- unless cert.verify_cert
75
- warn "Invalid certificate '#{cert.to_s}', NOT signed by root certificate."
79
+ if cert.nil?
80
+ warn "Missing certificate of '#{iss}'"
81
+ return nil
82
+ end
83
+
84
+ unless OmfCommon::Auth::CertificateStore.instance.verify(cert)
85
+ warn "Invalid certificate '#{cert.to_s}', NOT signed by CA certs, or its CA cert NOT loaded into cert store."
76
86
  return nil
77
87
  end
78
88
 
@@ -83,6 +93,11 @@ class XML
83
93
  return nil
84
94
  end
85
95
  end
96
+ else
97
+ if self.authenticate?
98
+ debug "Message not signed: '#{xml}'"
99
+ return nil
100
+ end
86
101
  end
87
102
 
88
103
  parsed_msg = self.create(xml_node.name.to_sym).tap do |message|
@@ -158,7 +173,7 @@ class XML
158
173
  #end
159
174
  ['text/xml', @envelope]
160
175
  else
161
- error "Missing cert for #{src}"
176
+ error "Missing cert for #{src}. Auth turned on but could not locate a proper cert."
162
177
  ['text/xml', nil]
163
178
  end
164
179
  else
@@ -328,7 +343,7 @@ class XML
328
343
 
329
344
  # Reconstruct xml node into Ruby object
330
345
  #
331
- # @param [Niceogiri::XML::Node] property xml node
346
+ # @param [Niceogiri::XML::Node] node xml node
332
347
  # @return [Object] the content of the property, as string, integer, float, or mash(hash with indifferent access)
333
348
  def reconstruct_data(node, data_binding = nil)
334
349
  node_type = node.attr('type')
@@ -1,3 +1,8 @@
1
+ # Copyright (c) 2012 National ICT Australia Limited (NICTA).
2
+ # This software may be used and distributed solely under the terms of the MIT license (License).
3
+ # You should find a copy of the License in LICENSE.TXT or at http://opensource.org/licenses/MIT.
4
+ # By downloading or using this software you accept the terms and the liability disclaimer in the License.
5
+
1
6
  require 'singleton'
2
7
 
3
8
  module OmfCommon
@@ -1,3 +1,8 @@
1
+ # Copyright (c) 2012 National ICT Australia Limited (NICTA).
2
+ # This software may be used and distributed solely under the terms of the MIT license (License).
3
+ # You should find a copy of the License in LICENSE.TXT or at http://opensource.org/licenses/MIT.
4
+ # By downloading or using this software you accept the terms and the liability disclaimer in the License.
5
+
1
6
  # module OmfCommon
2
7
  # class TopicMessage
3
8
  # attr_accessor :body, :comm
@@ -1,4 +1,9 @@
1
+ # Copyright (c) 2012 National ICT Australia Limited (NICTA).
2
+ # This software may be used and distributed solely under the terms of the MIT license (License).
3
+ # You should find a copy of the License in LICENSE.TXT or at http://opensource.org/licenses/MIT.
4
+ # By downloading or using this software you accept the terms and the liability disclaimer in the License.
5
+
1
6
  module OmfCommon
2
- VERSION = "6.0.2.pre.2"
7
+ VERSION = "6.0.2"
3
8
  PROTOCOL_VERSION = "6.0"
4
9
  end
data/omf_common.gemspec CHANGED
@@ -27,11 +27,12 @@ Gem::Specification.new do |s|
27
27
  s.add_development_dependency "pry"
28
28
  s.add_development_dependency "mocha"
29
29
 
30
- s.add_runtime_dependency "eventmachine", "~> 0.12.10"
31
- s.add_runtime_dependency "blather", "= 0.8.1"
30
+ s.add_runtime_dependency "eventmachine", "= 1.0.3"
31
+ s.add_runtime_dependency "blather", "= 0.8.4"
32
32
  s.add_runtime_dependency "logging", "~> 1.7.1"
33
33
  s.add_runtime_dependency "hashie", "~> 1.2.0"
34
34
  s.add_runtime_dependency "oml4r", "~> 2.9.1"
35
+ s.add_runtime_dependency "json", "~> 1.7.7"
35
36
  #s.add_runtime_dependency "json-jwt", "~> 0.5.2"
36
37
  #s.add_runtime_dependency "amqp", "~> 1.0.1"
37
38
  end
@@ -0,0 +1,20 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIDBDCCAm2gAwIBAgIJANcH4kPmdM2jMA0GCSqGSIb3DQEBBQUAMGAxCzAJBgNV
3
+ BAYTAkFVMQwwCgYDVQQIEwNOU1cxDzANBgNVBAcTBlN5ZG5leTEOMAwGA1UEChMF
4
+ TklDVEExEDAOBgNVBAMTB1JPT1QgQ0ExEDAOBgkqhkiG9w0BCQEWASAwHhcNMTMw
5
+ NTAxMDg0NTU3WhcNMjMwNDI5MDg0NTU3WjBgMQswCQYDVQQGEwJBVTEMMAoGA1UE
6
+ CBMDTlNXMQ8wDQYDVQQHEwZTeWRuZXkxDjAMBgNVBAoTBU5JQ1RBMRAwDgYDVQQD
7
+ EwdST09UIENBMRAwDgYJKoZIhvcNAQkBFgEgMIGfMA0GCSqGSIb3DQEBAQUAA4GN
8
+ ADCBiQKBgQC28Im2u+pQCSJhArXolkQ6GP1RixNqZ09wRxY9Gwps1Fj7KJu+q5GF
9
+ ZloNLAip9W9L51hEPnyaNduj295d5c3uyRyzlsn+031c5LjwXPplZuu+xgd2AuZs
10
+ tsD+CodVLqyidl5VWwHk4rVpyhaOfvWmn/ZuC2hUybxvZOOjKXeV+wIDAQABo4HF
11
+ MIHCMB0GA1UdDgQWBBSHx/Xp8sLIr7c9W+IUOBwTX2vqkTCBkgYDVR0jBIGKMIGH
12
+ gBSHx/Xp8sLIr7c9W+IUOBwTX2vqkaFkpGIwYDELMAkGA1UEBhMCQVUxDDAKBgNV
13
+ BAgTA05TVzEPMA0GA1UEBxMGU3lkbmV5MQ4wDAYDVQQKEwVOSUNUQTEQMA4GA1UE
14
+ AxMHUk9PVCBDQTEQMA4GCSqGSIb3DQEJARYBIIIJANcH4kPmdM2jMAwGA1UdEwQF
15
+ MAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAh6YSg5nJlepenAY/a8sRNV1p74QYIwpq
16
+ E7yTYdnodxUwFz3oMob1a/Eiub+G9ftYgzalygefeVONfpJ60vtJIRCtV40zMdoW
17
+ Y/K+olrL3UOSF06ygwuTSOz57W90tTNhSzZL/rYh1RG+D51ArfLRfLyMIgBQ+1Xj
18
+ JV0hI92Bt18=
19
+ -----END CERTIFICATE-----
20
+
@@ -0,0 +1,19 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIDATCCAmqgAwIBAgIBATANBgkqhkiG9w0BAQQFADBgMQswCQYDVQQGEwJBVTEM
3
+ MAoGA1UECBMDTlNXMQ8wDQYDVQQHEwZTeWRuZXkxDjAMBgNVBAoTBU5JQ1RBMRAw
4
+ DgYDVQQDEwdST09UIENBMRAwDgYJKoZIhvcNAQkBFgEgMB4XDTEzMDUwMTA4NDYz
5
+ M1oXDTE2MDQzMDA4NDYzM1owZTELMAkGA1UEBhMCQVUxDDAKBgNVBAgTA05TVzEP
6
+ MA0GA1UEBxMGU3lkbmV5MQ4wDAYDVQQKEwVOSUNUQTEVMBMGA1UEAxMMU0lHTklO
7
+ RyBDQSAxMRAwDgYJKoZIhvcNAQkBFgEgMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB
8
+ iQKBgQDsJub6FR+Ogyt6ixzLLBqNij3CQLG2ABMpyan+S2Dj+6GrCTz7JRzWA2hv
9
+ IqBVwDu0TLLhooDo9RUmaElu8rNDqRgjQX5mMEyiMORwLYZrPlZ6dLLvQ6ueU884
10
+ 7tbAal4t6IT+rrE4LGKqi8SbI8oDbJVpoyrRiUtqn4T/ooUuPQIDAQABo4HFMIHC
11
+ MB0GA1UdDgQWBBTbIoyq6tp5SZiP0i6LsbNM6ksyyjCBkgYDVR0jBIGKMIGHgBSH
12
+ x/Xp8sLIr7c9W+IUOBwTX2vqkaFkpGIwYDELMAkGA1UEBhMCQVUxDDAKBgNVBAgT
13
+ A05TVzEPMA0GA1UEBxMGU3lkbmV5MQ4wDAYDVQQKEwVOSUNUQTEQMA4GA1UEAxMH
14
+ Uk9PVCBDQTEQMA4GCSqGSIb3DQEJARYBIIIJANcH4kPmdM2jMAwGA1UdEwQFMAMB
15
+ Af8wDQYJKoZIhvcNAQEEBQADgYEAOUuQjbbgblYAr0c9HXGoCnTGzspYKPkg4cLi
16
+ NJl4MtbNk0gPZIwKS6BiFImDTUaZHY4Fzxt5UNO3/QtbsHhDR3jSgLei18sWGtRW
17
+ cGjjNxpx06329f1KckvSttwANMLNGzGtlAlIyl+GH+X+nEiZWeropjvV6lKb8mK8
18
+ YdS+BH4=
19
+ -----END CERTIFICATE-----
@@ -0,0 +1,19 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIDDTCCAnagAwIBAgIBATANBgkqhkiG9w0BAQQFADBlMQswCQYDVQQGEwJBVTEM
3
+ MAoGA1UECBMDTlNXMQ8wDQYDVQQHEwZTeWRuZXkxDjAMBgNVBAoTBU5JQ1RBMRUw
4
+ EwYDVQQDEwxTSUdOSU5HIENBIDExEDAOBgkqhkiG9w0BCQEWASAwHhcNMTMwNTAx
5
+ MDg1MzM1WhcNMTQwNTAxMDg1MzM1WjBKMQswCQYDVQQGEwJBVTEMMAoGA1UECBMD
6
+ TlNXMQ8wDQYDVQQHEwZTeWRuZXkxDjAMBgNVBAoTBU5JQ1RBMQwwCgYDVQQDEwNj
7
+ ZHcwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALtP3bHh41wm1OMBS9F9Zyvi
8
+ l9r3hWHaShVOvRm/fiH4NShSLv9wJylKz24Tx2XDRuh0v9+ZNqJp1abI8Hfd2GTt
9
+ HW3W68mCzqAnDk+vn+a4FpZn0qn+EM/EqNX/3r852z9L3qcxMidHtQm0ietE3HKF
10
+ pfsHbuR/4UzT2WV/jdiFAgMBAAGjgecwgeQwCQYDVR0TBAIwADAsBglghkgBhvhC
11
+ AQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFGVV
12
+ 8h3nvWWk9BXHalRsJIuftY8lMIGJBgNVHSMEgYEwf4AU2yKMquraeUmYj9Iui7Gz
13
+ TOpLMsqhZKRiMGAxCzAJBgNVBAYTAkFVMQwwCgYDVQQIEwNOU1cxDzANBgNVBAcT
14
+ BlN5ZG5leTEOMAwGA1UEChMFTklDVEExEDAOBgNVBAMTB1JPT1QgQ0ExEDAOBgkq
15
+ hkiG9w0BCQEWASCCAQEwDQYJKoZIhvcNAQEEBQADgYEAjz4HM8BrKhwNBMPZ066b
16
+ p/0FdpmrPpZhFR4UJqLZD6fqnHDAKwZZs8UFYqLrIkgkNNOkIMA0LYRaCCYFC19m
17
+ yjEeBlQ0dPFgGApJwcZ6tvuhyWXhAnTDCFIbgsdU2MHPl0ccpaPHRMpOPIuu1T9B
18
+ uE55figSibhihtqzAelHJE4=
19
+ -----END CERTIFICATE-----
@@ -1,3 +1,8 @@
1
+ # Copyright (c) 2012 National ICT Australia Limited (NICTA).
2
+ # This software may be used and distributed solely under the terms of the MIT license (License).
3
+ # You should find a copy of the License in LICENSE.TXT or at http://opensource.org/licenses/MIT.
4
+ # By downloading or using this software you accept the terms and the liability disclaimer in the License.
5
+
1
6
  def affiliations_xml
2
7
  <<-NODE
3
8
  <iq type='result'
@@ -0,0 +1,18 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIC2DCCAcCgAwIBAgIBAzANBgkqhkiG9w0BAQUFADAkMSIwIAYDVQQDDBlmcmNw
3
+ Ly9vbWYvL2ZyY3AuY2Eub21mX2NhMB4XDTEzMDQyNDAzMzQyM1oXDTEzMDQyNDAz
4
+ NDAyOFowKDEmMCQGA1UEAwwdZnJjcC8vb21mLy9mcmNwLmNvbnRyb2xsZXIucmMw
5
+ ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDRJZSSENhtqWoPdupdB5AS
6
+ QFyq+m8LyxslAdSIdrFhB9hA9vpma8w4oUGtiTdfehqP2UzkM/35WeFzU9deuwvV
7
+ ayQqWEKUU5oPprquWCR+tFNsgSNZWghmB5B3mKxpRFbIAwKOu3SmHzMedf1oe1k3
8
+ paOmZjjsq8SIp3oPo8FToTxyARQPU+Pz/BVyLy15YCs8Xj7iJ8PESN/FxBRhO0oj
9
+ PPJzB/ObuflmKodhz33xAEzoKEk3Q/EQYrLEtCdAKLGjnqWCewsRK12aZcZzNoih
10
+ 7uXn+L/J2Zz8MF8VLkvBXlh+Y6ouy5gpSQq9bLlJ+73zo7Cx9xTrHZ9zOJ131rhZ
11
+ AgMBAAGjETAPMA0GA1UdEQQGMASGAnJjMA0GCSqGSIb3DQEBBQUAA4IBAQABQnzU
12
+ Cz+XbjnIQGDwN6WDtxKX8e1C8DR15YVSt4vZY+5vnWla7Tdvp3wU+6HE0l7SEHQa
13
+ HjXgSkCUIbJV8Z+UZ7VXvY7zlaX6Rdz+CYBZ6QlTV5DKFtPfoifGD6I3k1svs0aA
14
+ XOJzvXNvRAviuLEKKm8/+c8SX257OWh0p7WysG97iizmx7fYDzOns69xdZaPIcR5
15
+ D5yxrf3sJ3LcV3ydHmQ0NUPLs1NWHoUXQ6D64gA/x8j9jxcpN88fI5iQLdhLVkaR
16
+ JQHxSLUlmA8TXf3gMZriJvvDTUN4oaO0Wshbyt/t4sTkIAW/uCDFMPBD/VIrHPnZ
17
+ CP+RbTSNF3njpBt8
18
+ -----END CERTIFICATE-----
@@ -0,0 +1,17 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIICwTCCAamgAwIBAgIBATANBgkqhkiG9w0BAQUFADAkMSIwIAYDVQQDDBlmcmNw
3
+ Ly9vbWYvL2ZyY3AuY2Eub21mX2NhMB4XDTEzMDQyNDAzMzQyM1oXDTEzMDQyNDA0
4
+ MzQyM1owJDEiMCAGA1UEAwwZZnJjcC8vb21mLy9mcmNwLmNhLm9tZl9jYTCCASIw
5
+ DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJubh9SKDnfQv7r6qdevcF0Jb3Nb
6
+ H7dr20yu3ujfmOsgmmiTQIjOv6YSIfLLdOBUrSG/Tw/TWl3NhDGLjplwI1puaTIl
7
+ sOCqi3mh/VVPN4e4b+riDVJD/Wdvj7278aVisy74cvF+IwQj1puDhD5K1eC9UcZ+
8
+ sv8CcQj+DR2u7GMHxbLwAcou74R+cWiFyXwFjrSDqC6neQ/BpCWwM0Gm/OAV5WX0
9
+ inBBKBYvn/5RTfDLKatLKjaLWuduQWRJz1Qe7phrXRFJABXQCy/5q9qRG/fsLzPu
10
+ 6+puqtfo5OBYbZlrRVsZCP7Nv8CKibi5AoEFR4MdAIjLaXbbdFjWPg7DdQcCAwEA
11
+ ATANBgkqhkiG9w0BAQUFAAOCAQEAUaiWcrWEhSb9TgJ5FmUz+kf8y10q6ai7cYoP
12
+ Tg5oBJqpIZbV2cPL//MtnHLvFmlGN8JCTaqOBGhnmErtm9jaeUBkSVidM03JUy6b
13
+ HAYz90GH53hR7x+2TedYus3C2oQqZbKgXsBhzIzqMpXewLAIIyEXUq7kLeOQWUok
14
+ jrA8jS/VAnJ0/TNIlkeCttPab3DTdzI0Eo1r+juH86jnCOoz6MjSt9krZNPHxLoD
15
+ 7HLy+TvJAvdfMs+1WvPMEAaNGynrtg9/74bod8CGajYbPLtMysA+a7+S6GeOl/y4
16
+ RxI1DK2kvXlEZEWsguuiFUYZk6CMyKNTT2fTiGAiLFmSFO2Rxg==
17
+ -----END CERTIFICATE-----
@@ -1,3 +1,8 @@
1
+ # Copyright (c) 2012 National ICT Australia Limited (NICTA).
2
+ # This software may be used and distributed solely under the terms of the MIT license (License).
3
+ # You should find a copy of the License in LICENSE.TXT or at http://opensource.org/licenses/MIT.
4
+ # By downloading or using this software you accept the terms and the liability disclaimer in the License.
5
+
1
6
  require 'test_helper'
2
7
 
3
8
  describe OmfCommon::Auth::Certificate do
@@ -46,6 +51,16 @@ describe OmfCommon::Auth::Certificate do
46
51
  @entity.verify_cert.must_equal true
47
52
  end
48
53
 
54
+ it "must be verified successfully by using X509 cert store" do
55
+ store = OpenSSL::X509::Store.new
56
+ store.add_cert(@root.to_x509)
57
+
58
+ @entity = @root.create_for('my_addr', 'bob', 'my_resource', 'omf')
59
+
60
+ store.verify(@root.to_x509).must_equal true
61
+ store.verify(@entity.to_x509).must_equal true
62
+ end
63
+
49
64
  it "must verify cert validity" do
50
65
  @root.verify_cert.must_equal true
51
66
  @root.create_for('my_addr', 'bob', 'my_resource', 'omf').verify_cert.must_equal true
@@ -93,6 +108,18 @@ describe OmfCommon::Auth::Certificate do
93
108
  test_entity.can_sign?.must_equal false
94
109
  test_entity.verify_cert.must_equal true
95
110
  end
111
+
112
+ it "must generate a cert from SSH key too" do
113
+ private_folder = "#{File.dirname(__FILE__)}/../../fixture"
114
+ ssh_pub_key = File.read("#{private_folder}/omf_test.pub")
115
+ pub_key = OpenSSL::PKey::RSA.new(File.read("#{private_folder}/omf_test.pub.pem"))
116
+ lambda do
117
+ test_entity = @root.create_for('my_addr', 'bob', 'my_resource', 'omf', 365, 'bob')
118
+ end.must_raise ArgumentError
119
+
120
+ test_entity = @root.create_for('my_addr', 'bob', 'my_resource', 'omf', 365, ssh_pub_key)
121
+ test_entity.to_x509.public_key.to_s.must_equal pub_key.to_s
122
+ end
96
123
  end
97
124
 
98
125
  describe "when provided an existing public cert and I have a private key associated" do