arachni-rpc-pure 0.1.2 → 0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 12c56321178ecdc10170f910b5c2e2f78d473caa
4
+ data.tar.gz: 54380412a7a078f9ea47d0e48933e54b1b85a950
5
+ SHA512:
6
+ metadata.gz: 11facfba44fdab2235e65bb40ed95c49b017187d9fa4510e3c9aec6cdbf5a1d25b86c37b03a43afad8d489e8abb0273f008d43a6ce24d6d4c7b987c32c96d0a5
7
+ data.tar.gz: cef06f2269e9cef578053bc70ac52a228314e68cf48a4372456abc6ec03e7b27064582910593a3c2f50f557e58379df61806109d694f227b32fbd50be10663eb
@@ -1,4 +1,9 @@
1
1
  # ChangeLog
2
2
 
3
+ ## Version 0.2 _(August 29, 2014)_
4
+
5
+ - Re-purposed to be a client reference for Arachni specifically rather than Arachni-RPC.
6
+
3
7
  ## Version 0.1.2 _(February 11, 2013)_
8
+
4
9
  - Updated ```arachni-rpc``` dependency to ```0.1.3```.
data/LICENSE.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # License
2
2
 
3
- Copyright (C) 2011, Tasos Laskos <tasos.laskos@gmail.com>
3
+ Copyright (C) 2011, Tasos Laskos <tasos.laskos@arachni-scanner.com>
4
4
  All rights reserved.
5
5
 
6
6
  Redistribution and use in source and binary forms, with or without modification,
data/README.md CHANGED
@@ -1,8 +1,9 @@
1
1
  # Arachni-RPC Pure
2
+
2
3
  <table>
3
4
  <tr>
4
5
  <th>Version</th>
5
- <td>0.1.1</td>
6
+ <td>0.2</td>
6
7
  </tr>
7
8
  <tr>
8
9
  <th>Github page</th>
@@ -14,7 +15,7 @@
14
15
  </tr>
15
16
  <tr>
16
17
  <th>Author</th>
17
- <td><a href="mailto:tasos.laskos@gmail.com">Tasos</a> "<a href="mailto:zapotek@segfault.gr">Zapotek</a>" <a href="mailto:tasos.laskos@gmail.com">Laskos</a></td>
18
+ <td><a href="mailto:tasos.laskos@arachni-scanner.com">Tasos Laskos</a></td>
18
19
  </tr>
19
20
  <tr>
20
21
  <th>Twitter</th>
@@ -22,7 +23,7 @@
22
23
  </tr>
23
24
  <tr>
24
25
  <th>Copyright</th>
25
- <td>2011</td>
26
+ <td>2011-2014</td>
26
27
  </tr>
27
28
  <tr>
28
29
  <th>License</th>
@@ -32,12 +33,18 @@
32
33
 
33
34
  ## Synopsis
34
35
 
35
- Arachni-RPC Pure is a simple implementation of a client for the <a href="http://github.com/Arachni/arachni-rpc-pure">Arachni-RPC</a> protocol.<br/>
36
- It's written in pure Ruby using SSL sockets and does not have any 3rd party dependencies -- besides the Arachni-RPC spec itself.
36
+ Arachni-RPC Pure is a simple implementation of a client for the
37
+ [Arachni-RPC](http://github.com/Arachni/arachni-rpc) protocol and comes
38
+ pre-configured with a suitable serializer (MessagePack basically) for
39
+ communicating with [Arachni](http://github.com/Arachni/arachni)'s services.
40
+
41
+ It is, in essence, a very simple, reference implementation for people who want
42
+ to write their own clients in order to communicate with
43
+ [Arachni](http://github.com/Arachni/arachni).
37
44
 
38
45
  ## Usage
39
46
 
40
- Check out the files in the <i>examples/</i> directory, they go through everything in great detail.
47
+ Usages examples are in the `examples/` directory.
41
48
 
42
49
  ## Installation
43
50
 
@@ -55,7 +62,9 @@ If you want to clone the repository and work with the source code:
55
62
 
56
63
  ## Running the Specs
57
64
 
58
- In order to run the specs you must first fire up 2 sample servers although they are not part of this project -- as it is only a client implementation.<br/>
65
+ In order to run the specs you must first fire up 2 sample servers although they
66
+ are not part of this project -- as it is only a client implementation.
67
+
59
68
  You can find the required servers in the [Arachni-RPC EM](https://github.com/Arachni/arachni-rpc-em) project.
60
69
 
61
70
  From inside the Arachni-RPC EM directory run:
@@ -73,6 +82,8 @@ Please send your feedback using Github's issue system at
73
82
 
74
83
 
75
84
  ## License
76
- Arachni-RPC Pure is provided under the 3-clause BSD license.<br/>
85
+
86
+ Arachni-RPC Pure is provided under the 3-clause BSD license.
87
+
77
88
  See the [LICENSE](file.LICENSE.html) file for more information.
78
89
 
data/Rakefile CHANGED
@@ -1,7 +1,7 @@
1
1
  =begin
2
2
 
3
3
  This file is part of the Arachni-RPC Pure project and may be subject to
4
- redistribution and commercial restrictions. Please see the Arachni-RPC EM
4
+ redistribution and commercial restrictions. Please see the Arachni-RPC Pure
5
5
  web site for more information on licensing and terms of use.
6
6
 
7
7
  =end
@@ -1,63 +1,51 @@
1
- require File.join( File.expand_path( File.dirname( __FILE__ ) ), '../lib/arachni/rpc/', 'pure' )
1
+ require_relative '../lib/arachni/rpc/pure'
2
2
 
3
- # require 'arachni/rpc/pure'
4
- require 'pp'
3
+ dispatcher = Arachni::RPC::Pure::Client.new(
4
+ host: '127.0.0.1',
5
+ port: 7331
6
+ )
5
7
 
6
- client = Arachni::RPC::Pure::Client.new(
7
- :host => 'localhost',
8
- :port => 7332,
9
- :token => 'superdupersecret',
10
- :serializer => Marshal
8
+ instance_info = dispatcher.call( 'dispatcher.dispatch', 'The Dude' )
9
+ # => {
10
+ # "token" => "1ac10910f41ce86e23ab954033b40a83",
11
+ # "pid" => 27031,
12
+ # "port" => 23496,
13
+ # "url" => "127.0.0.1:23496",
14
+ # "owner" => "The Dude",
15
+ # "birthdate" => "2014-08-05 19:54:07 +0300",
16
+ # "starttime" => "2014-08-05 19:54:58 +0300",
17
+ # "helpers" => {}
18
+ # }
19
+
20
+ instance = Arachni::RPC::Pure::Client.new(
21
+ host: '127.0.0.1',
22
+ port: instance_info['port'],
23
+ token: instance_info['token']
11
24
  )
12
25
 
26
+ p instance.call( 'service.alive?' )
27
+ # => true
28
+
13
29
  begin
14
- # 'bench2' doesn't exist...
15
- client.call( 'bench2.foo', 1 )
16
- rescue Arachni::RPC::Exceptions::InvalidObject => e
17
- pp e
18
- # => #<Arachni::RPC::Exceptions::InvalidObject: Trying to access non-existent object 'bench2'.>
30
+ instance.call( 'service.scan' )
31
+ rescue => e
32
+ # => #<RuntimeError: RemoteException: Option 'url' is mandatory.>
19
33
  end
20
34
 
21
- # This is just an echo method so it will return: 1
22
- pp client.call( 'bench.foo', 1 )
23
- # => 1
24
-
25
- # make access more natural, map (proxy actually) the remote object to a local one
26
- bench = Arachni::RPC::RemoteObjectMapper.new( client, 'bench' )
27
-
28
- pp bench.foo( 2 )
29
- # => 2
30
-
31
35
  begin
32
- # doesn't exist so we'll get an exception,
33
- # won't reach the remote object
34
- #
35
- bench.does_not_exist
36
- rescue Arachni::RPC::Exceptions::InvalidMethod => e
37
- pp e
38
- # => #<Arachni::RPC::Exceptions::InvalidMethod: Trying to access non-public method 'does_not_exist'.>
36
+ instance.call( 'service.error_test' )
37
+ rescue => e
38
+ # => #<RuntimeError: RemoteException: wrong number of arguments (0 for 1)>
39
39
  end
40
40
 
41
41
  begin
42
- # foo() expects an argument but arity is not checked so the call will be
43
- # forwarded to the remote object which will throw a remote exception
44
- bench.foo
45
- rescue Arachni::RPC::Exceptions::RemoteException => e
46
- pp e
47
- # => #<Arachni::RPC::Exceptions::RemoteException: wrong number of arguments (0 for 1)>
42
+ instance.call( 'service.blahblah' )
43
+ rescue => e
44
+ # => #<RuntimeError: InvalidMethod: Trying to access non-public method 'blahblah'.>
48
45
  end
49
46
 
50
- client = Arachni::RPC::Pure::Client.new(
51
- :host => 'localhost',
52
- :port => 7332,
53
- :token => 'invalidtoken',
54
- :serializer => Marshal
55
- )
56
-
57
47
  begin
58
- # the token is not valid so the remote server won't let us through
59
- client.call( 'bench.foo', 1 )
60
- rescue Arachni::RPC::Exceptions::InvalidToken => e
61
- pp e
62
- # => #<Arachni::RPC::Exceptions::InvalidToken: Token missing or invalid while calling: bench.foo>
48
+ instance.call( 'blahblah.stuff' )
49
+ rescue => e
50
+ # => #<RuntimeError: InvalidObject: Trying to access non-existent object 'blahblah'.>
63
51
  end
@@ -1,16 +1,10 @@
1
1
  =begin
2
2
 
3
3
  This file is part of the Arachni-RPC Pure project and may be subject to
4
- redistribution and commercial restrictions. Please see the Arachni-RPC EM
4
+ redistribution and commercial restrictions. Please see the Arachni-RPC Pure
5
5
  web site for more information on licensing and terms of use.
6
6
 
7
7
  =end
8
8
 
9
- require 'openssl'
10
- require 'socket'
11
- require 'yaml'
12
- YAML::ENGINE.yamler = 'syck'
13
-
14
- require 'arachni/rpc'
15
- require File.join( File.expand_path( File.dirname( __FILE__ ) ), 'pure', 'connection' )
16
- require File.join( File.expand_path( File.dirname( __FILE__ ) ), 'pure', 'client' )
9
+ require_relative 'pure/connection'
10
+ require_relative 'pure/client'
@@ -1,7 +1,7 @@
1
1
  =begin
2
2
 
3
3
  This file is part of the Arachni-RPC Pure project and may be subject to
4
- redistribution and commercial restrictions. Please see the Arachni-RPC EM
4
+ redistribution and commercial restrictions. Please see the Arachni-RPC Pure
5
5
  web site for more information on licensing and terms of use.
6
6
 
7
7
  =end
@@ -10,51 +10,80 @@ module Arachni
10
10
  module RPC
11
11
  module Pure
12
12
 
13
+ # Very simple client, essentially establishes a {Connection} and performs
14
+ # requests.
15
+ #
16
+ # @author Tasos Laskos <tasos.laskos@arachni-scanner.com>
13
17
  class Client
14
18
 
15
- def initialize( opts )
16
- @opts = opts
19
+ # @param [Hash] options
20
+ # @option options [String] :host
21
+ # Hostname/IP address.
22
+ # @option options [Integer] :port
23
+ # Port number.
24
+ # @option options [String] :token
25
+ # Optional authentication token.
26
+ # @option options [String] :ssl_ca
27
+ # SSL CA certificate.
28
+ # @option options [String] :ssl_pkey
29
+ # SSL private key.
30
+ # @option options [String] :ssl_cert
31
+ # SSL certificate.
32
+ def initialize( options )
33
+ @options = options
17
34
  end
18
35
 
36
+ # @note Will establish a connection if none is available.
37
+ #
38
+ # Performs an RPC request and returns a response.
39
+ #
40
+ # @param [String] msg
41
+ # RPC message in the form of `handler.method`.
42
+ # @param [Array] args
43
+ # Collection of arguments to be passed to the method.
44
+ #
45
+ # @return [Object]
46
+ # Response object.
47
+ #
48
+ # @raise [RuntimeError]
49
+ # * If a connection error was encountered the relevant exception will be
50
+ # raised.
51
+ # * If the response object is a remote exception, one will also be raised
52
+ # locally.
19
53
  def call( msg, *args )
20
- conn = nil
21
- begin
22
- conn = Connection.new( @opts )
23
- rescue OpenSSL::SSL::SSLError => ex
24
- e = Arachni::RPC::Exceptions::SSLPeerVerificationFailed.new( ex.to_s )
25
- e.set_backtrace( ex.backtrace )
26
- raise e
27
- rescue Errno::ECONNREFUSED => ex
28
- e = Arachni::RPC::Exceptions::ConnectionError.new( ex.to_s )
29
- e.set_backtrace( ex.backtrace )
30
- raise e
31
- end
32
-
33
- response = conn.perform( request( msg, *args ) )
34
- conn.close
35
-
54
+ response = with_connection { |c| c.perform( request( msg, *args ) ) }
36
55
  handle_exception( response )
37
- return response.obj
56
+
57
+ response['obj']
38
58
  end
39
59
 
40
60
  private
41
61
 
42
- def handle_exception( response )
43
- if exception?( response )
44
- raise Arachni::RPC::Exceptions.from_response( response )
62
+ def with_connection( &block )
63
+ c = Connection.new( @options )
64
+
65
+ begin
66
+ block.call c
67
+ ensure
68
+ c.close
45
69
  end
46
70
  end
47
71
 
48
- def exception?( response )
49
- response.obj.is_a?( Hash ) && response.obj.include?( 'exception' )
72
+ def handle_exception( response )
73
+ return if !(data = response['exception'])
74
+
75
+ exception = RuntimeError.new( "#{data['type']}: #{data['message']}" )
76
+ exception.set_backtrace( data['backtrace'] )
77
+
78
+ raise exception
50
79
  end
51
80
 
52
81
  def request( msg, *args )
53
- Request.new(
54
- :message => msg,
55
- :args => args,
56
- :token => @opts[:token]
57
- )
82
+ {
83
+ message: msg,
84
+ args: args,
85
+ token: @options[:token]
86
+ }
58
87
  end
59
88
 
60
89
  end
@@ -1,46 +1,71 @@
1
1
  =begin
2
2
 
3
3
  This file is part of the Arachni-RPC Pure project and may be subject to
4
- redistribution and commercial restrictions. Please see the Arachni-RPC EM
4
+ redistribution and commercial restrictions. Please see the Arachni-RPC Pure
5
5
  web site for more information on licensing and terms of use.
6
6
 
7
7
  =end
8
8
 
9
+ require 'openssl'
10
+ require 'socket'
11
+ require 'zlib'
12
+ require 'msgpack'
13
+
9
14
  module Arachni
10
15
  module RPC
11
16
  module Pure
12
17
 
18
+ # Represents an RPC connection, which is basically an OpenSSL socket with
19
+ # the ability to serialize/unserialize RPC messages.
20
+ #
21
+ # @author Tasos Laskos <tasos.laskos@arachni-scanner.com>
13
22
  class Connection
14
23
 
15
- def initialize( opts )
16
- @opts = opts
17
-
18
- socket = TCPSocket.new( opts[:host], opts[:port] )
19
-
20
- @ssl_context = OpenSSL::SSL::SSLContext.new
21
-
22
- if opts[:ssl_cert] && opts[:ssl_pkey]
23
- @ssl_context.cert = OpenSSL::X509::Certificate.new( File.open( opts[:ssl_cert] ) )
24
- @ssl_context.key = OpenSSL::PKey::RSA.new( File.open( opts[:ssl_pkey] ) )
25
- @ssl_context.ca_file = opts[:ssl_ca]
26
- @ssl_context.verify_mode =
24
+ # @param [Hash] options
25
+ # @option options [String] :host
26
+ # Hostname/IP address.
27
+ # @option options [Integer] :port
28
+ # Port number.
29
+ # @option options [String] :ssl_ca
30
+ # SSL CA certificate.
31
+ # @option options [String] :ssl_pkey
32
+ # SSL private key.
33
+ # @option options [String] :ssl_cert
34
+ # SSL certificate.
35
+ def initialize( options )
36
+ context = OpenSSL::SSL::SSLContext.new
37
+
38
+ if options[:ssl_cert] && options[:ssl_pkey]
39
+ context.cert =
40
+ OpenSSL::X509::Certificate.new( File.open( options[:ssl_cert] ) )
41
+
42
+ context.key =
43
+ OpenSSL::PKey::RSA.new( File.open( options[:ssl_pkey] ) )
44
+
45
+ context.ca_file = options[:ssl_ca]
46
+ context.verify_mode =
27
47
  OpenSSL::SSL::VERIFY_PEER | OpenSSL::SSL::VERIFY_FAIL_IF_NO_PEER_CERT
28
48
  end
29
49
 
30
- @ssl_socket = OpenSSL::SSL::SSLSocket.new( socket, @ssl_context )
31
- @ssl_socket.sync_close = true
32
- @ssl_socket.connect
50
+ @socket = OpenSSL::SSL::SSLSocket.new(
51
+ TCPSocket.new( options[:host], options[:port] ),
52
+ context
53
+ )
54
+ @socket.sync_close = true
55
+ @socket.connect
33
56
  end
34
57
 
58
+ # Closes the connection.
35
59
  def close
36
- @ssl_socket.close
60
+ @socket.close
37
61
  end
38
62
 
63
+ # @param [Hash] request
64
+ # RPC request message data.
39
65
  def perform( request )
40
- Response.new( send_rcv_object( request.prepare_for_tx ) )
66
+ send_rcv_object( request )
41
67
  end
42
68
 
43
-
44
69
  private
45
70
 
46
71
  def send_rcv_object( obj )
@@ -49,12 +74,12 @@ class Connection
49
74
  end
50
75
 
51
76
  def send_object( obj )
52
- serialized = serializer.dump( obj )
53
- @ssl_socket.puts( [ serialized.bytesize, serialized ].pack( 'Na*' ) )
77
+ serialized = serialize( obj )
78
+ @socket.puts( [ serialized.bytesize, serialized ].pack( 'Na*' ) )
54
79
  end
55
80
 
56
81
  def receive_object
57
- while data = @ssl_socket.sysread( 99999 )
82
+ while data = @socket.sysread( 99999 )
58
83
  (@buf ||= '') << data
59
84
  while @buf.size >= 4
60
85
  if @buf.size >= 4 + ( size = @buf.unpack( 'N' ).first )
@@ -62,7 +87,7 @@ class Connection
62
87
 
63
88
  complete = @buf.slice!( 0, size )
64
89
  @buf = ''
65
- return serializer.load( complete )
90
+ return unserialize( complete )
66
91
  else
67
92
  break
68
93
  end
@@ -70,12 +95,31 @@ class Connection
70
95
  end
71
96
  end
72
97
 
73
- private
98
+ def serialize( object )
99
+ MessagePack.dump object
100
+ end
74
101
 
75
- def serializer
76
- @opts[:serializer] ? @opts[:serializer] : YAML
102
+ def unserialize( object )
103
+ MessagePack.load try_decompress( object )
77
104
  end
78
105
 
106
+ # @note Will return the `string` as is if it was not compressed.
107
+ #
108
+ # @param [String] string
109
+ # String to decompress.
110
+ #
111
+ # @return [String]
112
+ # Decompressed string.
113
+ def try_decompress( string )
114
+ # Just an ID representing a serialized, empty data structure.
115
+ return string if string.size == 1
116
+
117
+ begin
118
+ Zlib::Inflate.inflate string
119
+ rescue Zlib::DataError
120
+ string
121
+ end
122
+ end
79
123
 
80
124
  end
81
125
 
@@ -1,7 +1,7 @@
1
1
  =begin
2
2
 
3
3
  This file is part of the Arachni-RPC Pure project and may be subject to
4
- redistribution and commercial restrictions. Please see the Arachni-RPC EM
4
+ redistribution and commercial restrictions. Please see the Arachni-RPC Pure
5
5
  web site for more information on licensing and terms of use.
6
6
 
7
7
  =end
@@ -9,7 +9,9 @@
9
9
  module Arachni
10
10
  module RPC
11
11
  module Pure
12
- VERSION = '0.1.2'
12
+
13
+ VERSION = '0.2'
14
+
13
15
  end
14
16
  end
15
17
  end
metadata CHANGED
@@ -1,92 +1,70 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: arachni-rpc-pure
3
- version: !ruby/object:Gem::Version
4
- version: 0.1.2
5
- prerelease:
3
+ version: !ruby/object:Gem::Version
4
+ version: "0.2"
6
5
  platform: ruby
7
- authors:
6
+ authors:
8
7
  - Tasos Laskos
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-02-11 00:00:00.000000000 Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
15
- name: arachni-rpc
16
- requirement: !ruby/object:Gem::Requirement
17
- none: false
18
- requirements:
19
- - - '='
20
- - !ruby/object:Gem::Version
21
- version: 0.1.3
22
- type: :runtime
23
- prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
27
- - - '='
28
- - !ruby/object:Gem::Version
29
- version: 0.1.3
30
- description: ! ' Pure Ruby client implementation of the Arachni-RPC protocol.
31
11
 
32
- '
33
- email: tasos.laskos@gmail.com
12
+ date: 2014-08-29 00:00:00 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: msgpack
16
+ prerelease: false
17
+ requirement: &id001 !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - &id002
20
+ - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: "0"
23
+ type: :runtime
24
+ version_requirements: *id001
25
+ description: " Pure Ruby client implementation of the Arachni-RPC protocol.\n"
26
+ email: tasos.laskos@arachni-scanner.com
34
27
  executables: []
28
+
35
29
  extensions: []
36
- extra_rdoc_files:
30
+
31
+ extra_rdoc_files:
37
32
  - README.md
38
33
  - LICENSE.md
39
34
  - CHANGELOG.md
40
- files:
35
+ files:
36
+ - CHANGELOG.md
37
+ - LICENSE.md
41
38
  - README.md
42
39
  - Rakefile
43
- - LICENSE.md
44
- - CHANGELOG.md
45
- - lib/arachni/rpc/pure/version.rb
40
+ - examples/client.rb
41
+ - lib/arachni/rpc/pure.rb
46
42
  - lib/arachni/rpc/pure/client.rb
47
43
  - lib/arachni/rpc/pure/connection.rb
48
- - lib/arachni/rpc/pure.rb
49
- - examples/client.rb
50
- - spec/pems/cacert.pem
51
- - spec/pems/client/foo-cert.pem
52
- - spec/pems/client/foo-key.pem
53
- - spec/pems/client/key.pem
54
- - spec/pems/client/cert.pem
55
- - spec/arachni/rpc/pure/client_spec.rb
56
- - spec/spec.opts
57
- - spec/spec_helper.rb
44
+ - lib/arachni/rpc/pure/version.rb
58
45
  homepage: https://github.com/Arachni/arachni-rpc-pure
59
46
  licenses: []
47
+
48
+ metadata: {}
49
+
60
50
  post_install_message:
61
- rdoc_options:
51
+ rdoc_options:
62
52
  - --charset=UTF-8
63
- require_paths:
53
+ require_paths:
64
54
  - lib
65
- required_ruby_version: !ruby/object:Gem::Requirement
66
- none: false
67
- requirements:
68
- - - ! '>='
69
- - !ruby/object:Gem::Version
70
- version: '0'
71
- required_rubygems_version: !ruby/object:Gem::Requirement
72
- none: false
73
- requirements:
74
- - - ! '>='
75
- - !ruby/object:Gem::Version
76
- version: '0'
55
+ required_ruby_version: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - *id002
58
+ required_rubygems_version: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - *id002
77
61
  requirements: []
62
+
78
63
  rubyforge_project:
79
- rubygems_version: 1.8.24
64
+ rubygems_version: 2.2.2
80
65
  signing_key:
81
- specification_version: 3
66
+ specification_version: 4
82
67
  summary: Pure Ruby client for Arachni-RPC.
83
- test_files:
68
+ test_files:
84
69
  - examples/client.rb
85
- - spec/pems/cacert.pem
86
- - spec/pems/client/foo-cert.pem
87
- - spec/pems/client/foo-key.pem
88
- - spec/pems/client/key.pem
89
- - spec/pems/client/cert.pem
90
- - spec/arachni/rpc/pure/client_spec.rb
91
- - spec/spec.opts
92
- - spec/spec_helper.rb
70
+ has_rdoc:
@@ -1,119 +0,0 @@
1
- require File.join( File.expand_path( File.dirname( __FILE__ ) ), '../../../', 'spec_helper' )
2
-
3
- describe Arachni::RPC::Pure::Client do
4
-
5
- before( :all ) do
6
- @arg = [
7
- 'one',
8
- 2,
9
- { :three => 3 },
10
- [ 4 ]
11
- ]
12
- end
13
-
14
- describe "raw interface" do
15
-
16
- it "should be able to perform calls" do
17
- @arg.should == start_client( rpc_opts ).call( 'test.foo', @arg )
18
- end
19
-
20
- end
21
-
22
- describe "Arachni::RPC::RemoteObjectMapper interface" do
23
-
24
- it "should be able to properly forward calls" do
25
- test = Arachni::RPC::RemoteObjectMapper.new( start_client( rpc_opts ), 'test' )
26
- test.foo( @arg ).should == @arg
27
- end
28
-
29
- end
30
-
31
- describe "exception" do
32
-
33
- it "should be raised when requesting inexistent objects" do
34
- begin
35
- start_client( rpc_opts ).call( 'bar2.foo' )
36
- rescue Exception => e
37
- e.rpc_invalid_object_error?.should be_true
38
- end
39
- end
40
-
41
- it "should be raised when requesting inexistent or non-public methods" do
42
- begin
43
- start_client( rpc_opts ).call( 'test.bar2' )
44
- rescue Exception => e
45
- e.rpc_invalid_method_error?.should be_true
46
- end
47
-
48
- end
49
-
50
- it "should be raised when there's a remote exception" do
51
- begin
52
- start_client( rpc_opts ).call( 'test.foo' )
53
- rescue Exception => e
54
- e.rpc_remote_exception?.should be_true
55
- end
56
- end
57
-
58
- end
59
-
60
- it "should be able to retain stability and consistency under heavy load" do
61
- client = start_client( rpc_opts )
62
-
63
- n = 1000
64
- cnt = 0
65
-
66
- mismatches = []
67
-
68
- n.times {
69
- |i|
70
- client.call( 'test.foo', i ) {
71
- |res|
72
-
73
- cnt += 1
74
-
75
- mismatches << [i, res] if i != res
76
- break if cnt == n || !mismatches.empty?
77
- }
78
- }
79
-
80
- mismatches.should be_empty
81
- end
82
-
83
- it "should throw error when connecting to inexistent server" do
84
- begin
85
- start_client( rpc_opts.merge( :port => 9999 ) ).call( 'test.foo', @arg )
86
- rescue Exception => e
87
- e.rpc_connection_error?.should be_true
88
- end
89
- end
90
-
91
- context "when using valid SSL primitives" do
92
- it "should be able to establish a connection" do
93
- res = start_client( rpc_opts_with_ssl_primitives ).call( 'test.foo', @arg )
94
- res.should == @arg
95
- end
96
- end
97
-
98
- context "when using invalid SSL primitives" do
99
- it "should not be able to establish a connection" do
100
- begin
101
- start_client( rpc_opts_with_invalid_ssl_primitives ).call( 'test.foo', @arg )
102
- rescue Exception => e
103
- e.rpc_connection_error?.should be_true
104
- end
105
- end
106
- end
107
-
108
- context "when using mixed SSL primitives" do
109
- it "should not be able to establish a connection" do
110
- begin
111
- start_client( rpc_opts_with_mixed_ssl_primitives ).call( 'test.foo', @arg )
112
- rescue Exception => e
113
- e.rpc_connection_error?.should be_true
114
- e.rpc_ssl_error?.should be_true
115
- end
116
- end
117
- end
118
-
119
- end
@@ -1,37 +0,0 @@
1
- -----BEGIN CERTIFICATE-----
2
- MIIGaDCCBFCgAwIBAgIJAPBYwqAog9f1MA0GCSqGSIb3DQEBBQUAMFMxCzAJBgNV
3
- BAYTAkdSMRgwFgYDVQQDEw9BcmFjaG5pLXRlc3QtQ0ExKjAoBgkqhkiG9w0BCQEW
4
- G2FyYWNobmlAYXJhY2huaS1zY2FubmVyLmNvbTAeFw0xMjExMDIxMDIyNTNaFw0y
5
- MjEwMzExMDIyNTNaMFMxCzAJBgNVBAYTAkdSMRgwFgYDVQQDEw9BcmFjaG5pLXRl
6
- c3QtQ0ExKjAoBgkqhkiG9w0BCQEWG2FyYWNobmlAYXJhY2huaS1zY2FubmVyLmNv
7
- bTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANHbVRqyD7FT8KSCZLm1
8
- YrOwMj78OXRjMb+ucPR+fncXR1TEuPlEFojLtzqtsaA5OJXpj+0toFP+2T4DeFlu
9
- YT4TBrRQ3DxmeY2b5b6ZuurLMfMc1vU+dE92Tj4nuInBz3Z09aDQ8ZWXWzJ7uD3J
10
- eNjOcj7Jc94AGFx05Tii9VriUmX+jXQALv5S5WGVtKt4p67mLm/2xD4JhS+a0+B8
11
- s/Xo7l6EXaFeTsH5jgZDiY+f0Dpk6cM+pZ5AJVJiNonDJs8/nl9vdWPRH40GHsyN
12
- H0/lo/wTxuth/TvX3DBB5hTi/9V5eYbLTLtE1oyXgBxNKrjDu8FVn/jUl8DAIdJL
13
- n4vXwXI70wLyS6aF8uu9ApNnmSbTTc2scAKDmnlINLHqGGlpyleojqphDy3MfQYk
14
- YT9QSXNKHlO4NMLFqrqM1F3hvM3MEteeM12gAeeJLY6YYYJafMMMh/e7kK/y5u+J
15
- ype5t5N8GKskSRp0RvlRYfoH/lnyJd6FEyh9P0QHA4CKAadZBCfOcmwmTY/G0Kjn
16
- 3Y7r7BmJb4PIEcDqUjXwuyq6ZHjx7sawuGG6eXhIGln0JtSymy4j+h+xlh0S7O8B
17
- Ti6dMVxg+DNTkEJz2O00IIBcyToqZ26XovFkN5ueRNOROB3YVpldmpbLyuOQae/D
18
- 4Gc21bEWoR7OAaY2PRl4r563AgMBAAGjggE9MIIBOTAdBgNVHQ4EFgQU8VOtNUbZ
19
- rnbX0gRWIds5yaT+uCwwgYMGA1UdIwR8MHqAFPFTrTVG2a5219IEViHbOcmk/rgs
20
- oVekVTBTMQswCQYDVQQGEwJHUjEYMBYGA1UEAxMPQXJhY2huaS10ZXN0LUNBMSow
21
- KAYJKoZIhvcNAQkBFhthcmFjaG5pQGFyYWNobmktc2Nhbm5lci5jb22CCQDwWMKg
22
- KIPX9TAPBgNVHRMBAf8EBTADAQH/MBEGCWCGSAGG+EIBAQQEAwIBBjAJBgNVHRIE
23
- AjAAMCsGCWCGSAGG+EIBDQQeFhxUaW55Q0EgR2VuZXJhdGVkIENlcnRpZmljYXRl
24
- MCYGA1UdEQQfMB2BG2FyYWNobmlAYXJhY2huaS1zY2FubmVyLmNvbTAOBgNVHQ8B
25
- Af8EBAMCAQYwDQYJKoZIhvcNAQEFBQADggIBAAAAebhmNydIUT+sZpvWM5JKNQdq
26
- YtnghnpZyM37cxLmFIeDKKPTw/3lhDViRRqQaaFTI7ukcqgloPmhMuymQT4o11Fw
27
- XLoQuIeSgS7Mg6eZF3CUKoEy1KnlluegDXtDI+WH/EQHlokBvoMaClltj6vsfqI/
28
- K9K2MAXUKi8K7NRq6VYO1QPtrBfrX9VmLyndbYm8lSG5oDkGGh8NjVgHHZDgrQAQ
29
- 2EmsWbE9yMZ6yl+AaaE5XrbPWnBI8rK77WP93JYVAhmcaQiJzPfMw3sb2QojKdak
30
- 7fvJzAjBeXAoTP5Mu/E+BPPgELzB/DnRaWlrYsAQeRZBV+I3+k5CCVqdOAdJCk5Y
31
- dFNTppHfwVaDj5qKOmodzdUDcDL6ynl15t6WHgj2yBwsDVpWsvbqyitZkemLFwrf
32
- hAedR3dKr+IxrOynST1w4LorDorcGK/DqhD475bQ9EDel5nW18hotUeeeO+K3qc7
33
- iGgj7zTKfmhzL/KMotir/SQYYxQbbtLkkhXDaNVlWiYkHotOzrNbpKAFM776CI47
34
- KTXG88FydcycGHYU8SQLEbEDiowAikr2u+CUHKrJvz2Wr8jkWaMCSfgCyokcY6vR
35
- IIqnrpYHhX2FmKf+tRB8o3KXM6uiOSUvaW23LHcs0OKqcJ0XHOkhTMDFZ82eDZzl
36
- CXJQkVNhmc0Y9prF
37
- -----END CERTIFICATE-----
@@ -1,37 +0,0 @@
1
- -----BEGIN CERTIFICATE-----
2
- MIIGazCCBFOgAwIBAgIBAjANBgkqhkiG9w0BAQUFADBTMQswCQYDVQQGEwJHUjEY
3
- MBYGA1UEAxMPQXJhY2huaS10ZXN0LUNBMSowKAYJKoZIhvcNAQkBFhthcmFjaG5p
4
- QGFyYWNobmktc2Nhbm5lci5jb20wHhcNMTIxMTAyMTAyNDA4WhcNMjIxMDMwMTAy
5
- NDA4WjBKMQswCQYDVQQGEwJHUjEPMA0GA1UEAxMGQ2xpZW50MSowKAYJKoZIhvcN
6
- AQkBFhthcmFjaG5pQGFyYWNobmktc2Nhbm5lci5jb20wggIiMA0GCSqGSIb3DQEB
7
- AQUAA4ICDwAwggIKAoICAQDEl91flpFH2Y1b2voSsjYDEiC70ArJWrmgm/UFdtXT
8
- pCng9ACjJWuf/evBOa8SKmNFgM1NKMF7GaZghDid3npq4Pdz/C74Ci8Q3ORMPC25
9
- Cq5T8oLYr7OGRQG7cmAqq7fP7MbPikEoaV3sg9CYdCqeK5WqT4+2eWvJGZ6t3z/g
10
- A1WYoHMbhXS1MedPlJIboSUcUlvf2BEld4EzwjCAlF7IICAT37ijtlDqVZpByfii
11
- xj47wP/fx7AtHe7tog9h1MgM0ciJgvH9TT3Kc/iSHYwrhS6jcnlwju7P1YkaRjjO
12
- ODIt7HCf6ScMmK+XIJZRuI7I4zWSSUKI5vgj5BKtlyj71xHRcKX+wfUwhz92BwwE
13
- 9kakl+0L4C11aWKHsYpT8J3NFH8soFpyUPmVQTDiNDcmbxQYHuZbSdWG5+XLYrLZ
14
- MJ8am9HB7Z9uQugyZxki/AgQyT21eCJBrg83A0zd+SYezsDA/SVEZXCCrrO5/u/f
15
- 6+RGYZcWXaIk+18uai5ax0HwksN9AnIIYyH19Fkq516a231Hy37/RKn2W/vH7A/J
16
- YdleDe1wqeIApDC/jJncuO380BdzvvwbhTkp3KKjNcx0B9d917q+pguzotiVR19n
17
- /MyIZ2/EU6r+AGyt1jxFZQhbgL6ayVlMgflyCTcsfgN7kC6dW+7L5gfBt3MwoXgK
18
- lwIDAQABo4IBUTCCAU0wCQYDVR0TBAIwADARBglghkgBhvhCAQEEBAMCBLAwKwYJ
19
- YIZIAYb4QgENBB4WHFRpbnlDQSBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0O
20
- BBYEFNDF0OQgaYJqWYB9onMoDJrI6sEHMIGDBgNVHSMEfDB6gBTxU601RtmudtfS
21
- BFYh2znJpP64LKFXpFUwUzELMAkGA1UEBhMCR1IxGDAWBgNVBAMTD0FyYWNobmkt
22
- dGVzdC1DQTEqMCgGCSqGSIb3DQEJARYbYXJhY2huaUBhcmFjaG5pLXNjYW5uZXIu
23
- Y29tggkA8FjCoCiD1/UwJgYDVR0SBB8wHYEbYXJhY2huaUBhcmFjaG5pLXNjYW5u
24
- ZXIuY29tMCYGA1UdEQQfMB2BG2FyYWNobmlAYXJhY2huaS1zY2FubmVyLmNvbTAL
25
- BgNVHQ8EBAMCBaAwDQYJKoZIhvcNAQEFBQADggIBAKOrRHhird4fhaVMHyNdTqQx
26
- tMuqYWrPb+L4vir7Gu9bfNXlS/b5QBBeFbg5YwVeMx2KTdJR9u3XK9PaQQCC0+ak
27
- tDy3beasiFvoThWmzaVLnPR2OpdRbbK9oFZuK7Y7Sdj6hFapbPcS3hG1M7uWtmiF
28
- Cwd3hmXzvyOH7DToQ5wRAtS3kE2I5J9kH8OVP/pIZ/OTnfDTHOilznOMmlJ+LuFh
29
- ECgxIFv9GRAb+J+AxFWBFNgm6yv6cGjAnT2rZR2B2WyKpmHs+mIxqmNSYldublKi
30
- OBVl13M2ETH9NKRkvNjYbD4nsZGWO85zGiv0AVaZxwEfIHuXQdWfSIhxno3UQpxJ
31
- UlCZTpGJ0wvHHrHC7GQZCCdr83Zq8MgcMgCuE78qNbYIE+rf6+MOhnxgg0sJ12Yr
32
- +++VrQx5HDOoChr39rFISRpi2vFxz5QsJONoNLvH0uJoxQ5UDlOXqeq6TlJBBNUk
33
- 77IkxGfqU7XmF9uT8nmcU4hx8yhKFJOZ5ORHX+U8+yaQN8RsxQadF7OzS1MMQXkl
34
- UwIeFEQNNv0JOIkjZILIDHz++PL5Fa+5/lgAV24X68ZIQ5FkgoLoOIWgbcARlsj0
35
- 62BJLPhrIbCUI7XDos+hTmMPWkzfGoIahL1mEMshlrKK/XGIFh9l1iKnI/4ze1bH
36
- 9nvAl0/txVluZtYXlf2E
37
- -----END CERTIFICATE-----
@@ -1,39 +0,0 @@
1
- -----BEGIN CERTIFICATE-----
2
- MIIGzjCCBLagAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJGTzEM
3
- MAoGA1UECBMDZm9vMQwwCgYDVQQHEwNmb28xDDAKBgNVBAoTA2ZvbzEMMAoGA1UE
4
- CxMDZm9vMQwwCgYDVQQDEwNmb28xGjAYBgkqhkiG9w0BCQEWC2Zvb0Bmb28uZm9v
5
- MB4XDTExMDkyNjE0MDEzM1oXDTEyMDkyNTE0MDEzM1owgYMxCzAJBgNVBAYTAkZP
6
- MQwwCgYDVQQIEwNmb28xDDAKBgNVBAcTA2ZvbzEMMAoGA1UEChMDZm9vMQwwCgYD
7
- VQQLEwNmb28xETAPBgNVBAMTCHNvbWVuYW1lMSkwJwYJKoZIhvcNAQkBFhpzb21l
8
- bmFtZUBzb21lbmFtZS5zb21lbmFtZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCC
9
- AgoCggIBAL0r5N/tveIx+Mvuwx5R1rFuK6I8udjkzj7N5zFs/JNsHA/9pVfEX6Y4
10
- NPlER/0MvPUNfX6quuAN3IdEW1g7ond/fuI4iARY/TSgPipIn6jk4v6Y2A6nOmUp
11
- O/32JWZBcM3IF0qMFGfYOq5+D20iWc4l/wPkcHz46/x8Qx3bnncXJix2M/AS9RwN
12
- Kt26Ue5tG8sPY/ckMsvMbfMQ+R+15k1x6RAnBIHeh8QsFlDFBGT+EmKzDgCI41zN
13
- akKiS+ZvJy2byKYT/r0P47Rzx6YP52+rIVh1SlkWwjD6EbVcnvDcW52rDrcqtsSg
14
- uqiZfr+2Td+iOQBtUS2Y5htcjdipRaVLLoCY0qwX6i4JKGiL6fPVTgIUReZPFdk7
15
- CHVCVAAEDl3yGLe6wpqGonKk6JjBZByiW3EE9T8f3uxS3pxD6BitpVCzwYiAJnFr
16
- DvV0xNBLriSJ+Ebcc7f0ng+L7CPO9C8ILX+vIfToURhrup4+vn7W4pyft3b588O2
17
- XBcax+XyBn1aQN6pwZrT/9wv85J94A/WBYkOvPl3Rv2uwjlzwfR/owLVPJkbowgF
18
- iUGQz9vl/0C+KcWkyjnXKXxq2EK7kszBH5m3vgDz2j3mMBGv0xfTZmDVM+Qs12xv
19
- wMwIfsOxo1oMmI6mWSx3NsJqP89ui650WAqORsWZ6O0jVv64tlnXAgMBAAGjggFe
20
- MIIBWjAJBgNVHRMEAjAAMBEGCWCGSAGG+EIBAQQEAwIEsDArBglghkgBhvhCAQ0E
21
- HhYcVGlueUNBIEdlbmVyYXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQUililQx5n
22
- hJGu4Zx3C8kDJEU08ogwgaEGA1UdIwSBmTCBloAUX93JoFY2qeY+HVPZ+jAIbA/Y
23
- rkGhc6RxMG8xCzAJBgNVBAYTAkZPMQwwCgYDVQQIEwNmb28xDDAKBgNVBAcTA2Zv
24
- bzEMMAoGA1UEChMDZm9vMQwwCgYDVQQLEwNmb28xDDAKBgNVBAMTA2ZvbzEaMBgG
25
- CSqGSIb3DQEJARYLZm9vQGZvby5mb2+CCQCmSX0QNZkjADAWBgNVHRIEDzANgQtm
26
- b29AZm9vLmZvbzAlBgNVHREEHjAcgRpzb21lbmFtZUBzb21lbmFtZS5zb21lbmFt
27
- ZTALBgNVHQ8EBAMCBaAwDQYJKoZIhvcNAQEFBQADggIBAFlzE1hgfZ6Zhl8RpckD
28
- 0NDEZFAij+gQl91gcgAnkOE70JxbBiW3LXtdQvdNNpOUUdi10+UtbRyM1XayS7tQ
29
- v/yHvfTINtMXazDQiG+ClcCSapjAFhMJhA7HWMtZLtzXb/Pox2JciGdilbyPeHTb
30
- xitlun85TuTSseOkriND8OnjFolOBb/713adKE/p/UEbqZ9vbMyMgxOgemdPKKSB
31
- H8k/mdQtMbcK7Q01Z/3UMDyxiVoQk2x8SqG4NxKKTRhKN4U8DKCGO8b4awgQo+je
32
- mc01hW60ScVhBR+ha8NkvmReUm/pvIrYdaHnyJxwlY+RjIn2Y3OBlvBHkOVBCTJo
33
- MVHqVQGksEQH/U+zlcWrv8H/1JOhdnq4lXnWkFvOBRUVSXF3vw9q4aMYMB1bagAU
34
- ykciVW367xwj0HMzfAKT09uo0BhyqUuLec4/ksOeDGxLRn5KdrVwAp6b+quBHbkx
35
- BCGdLvBVxgx11E+YV+WbY0pvNNdqpsKq9oZxOLnTQek8YJ317WSzUeUPOT5zu4sM
36
- /B/i43wDiFWV1EcV8gEAy72l7jXi3++JbN56Cd03DML/BxSmfWXwrT3hKDP9mG5+
37
- X4N8iCT+NBIMDYX1EAiBfD7ioxDpIv5yu+WNhTH7qsDPAE0Q3aTd1Un1Lkn7F/51
38
- bKDKa/6PCJlZOkZGTU7wxaCy
39
- -----END CERTIFICATE-----
@@ -1,51 +0,0 @@
1
- -----BEGIN RSA PRIVATE KEY-----
2
- MIIJKAIBAAKCAgEAvSvk3+294jH4y+7DHlHWsW4rojy52OTOPs3nMWz8k2wcD/2l
3
- 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
- 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
- 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
- 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
- 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
- 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
- iIAmcWsO9XTE0EuuJIn4Rtxzt/SeD4vsI870Lwgtf68h9OhRGGu6nj6+ftbinJ+3
10
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- +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
- 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
- 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
- 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
- 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
- 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
- ++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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- xt7TXHx+/wDTvZtw8ImTQ6onQoV4LpMfAoIBAGqZ9HyADbomllKHw+Ks5oL66EYk
46
- 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
- KRWAMAlu9H9kuBa0NhS+iUv2qpFSH1ouAF41jufRFvd4hJW9NAzErI3Gy+mgFqUf
48
- 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
- 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
- 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
51
- -----END RSA PRIVATE KEY-----
@@ -1,51 +0,0 @@
1
- -----BEGIN RSA PRIVATE KEY-----
2
- MIIJKAIBAAKCAgEAxJfdX5aRR9mNW9r6ErI2AxIgu9AKyVq5oJv1BXbV06Qp4PQA
3
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- ptp9+ol94wKxR5ukfNtqi8A12pHGm2iVpqyBSL+GE3YEB9JpukmkaVgOSTNi1pTr
18
- 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
- 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
- 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
- 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
- 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
- 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
- y4PU7XwfcOwz7hr1PHp/tFLEfQ/JpOogLNe9+xeUnznrrnprRtm36CDTp/KgSgIv
25
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- bu0vb0s2wAJssvU38pJ8m0HDrJlNaXGzj6u7TPHtFCBh+nfh07+eVMNWDiADxdwf
43
- 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
- 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
- +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
- v0EpIr5IqZ2dEMZWoXgxZthb1R68RD50tKI2X05Xrsw8gMlPGl5L0HkfCPdaGGhi
47
- +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
- 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
- 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
- OD6LesfpcEtvc1OckXup1WgQWdef3ESwkh+HRW+JhHCgsy7doLuJ4BfP5VA=
51
- -----END RSA PRIVATE KEY-----
@@ -1,2 +0,0 @@
1
- --color
2
- --backtrace
@@ -1,42 +0,0 @@
1
- def cwd
2
- File.expand_path( File.dirname( __FILE__ ) )
3
- end
4
-
5
- require File.join( cwd, '../lib/arachni/rpc/', 'pure' )
6
-
7
- def rpc_opts
8
- {
9
- :host => 'localhost',
10
- :port => 7331,
11
- :token => 'superdupersecret',
12
- :serializer => Marshal,
13
- }
14
- end
15
-
16
- def rpc_opts_with_ssl_primitives
17
- rpc_opts.merge(
18
- :port => 7332,
19
- :ssl_ca => cwd + '/pems/cacert.pem',
20
- :ssl_pkey => cwd + '/pems/client/key.pem',
21
- :ssl_cert => cwd + '/pems/client/cert.pem'
22
- )
23
- end
24
-
25
- def rpc_opts_with_invalid_ssl_primitives
26
- rpc_opts_with_ssl_primitives.merge(
27
- :ssl_pkey => cwd + '/pems/client/foo-key.pem',
28
- :ssl_cert => cwd + '/pems/client/foo-cert.pem'
29
- )
30
- end
31
-
32
- def rpc_opts_with_mixed_ssl_primitives
33
- rpc_opts_with_ssl_primitives.merge(
34
- :ssl_pkey => cwd + '/pems/client/key.pem',
35
- :ssl_cert => cwd + '/pems/client/foo-cert.pem'
36
- )
37
- end
38
-
39
-
40
- def start_client( opts )
41
- Arachni::RPC::Pure::Client.new( opts )
42
- end