arachni-rpc-pure 0.1.2 → 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.
- checksums.yaml +7 -0
- data/CHANGELOG.md +5 -0
- data/LICENSE.md +1 -1
- data/README.md +19 -8
- data/Rakefile +1 -1
- data/examples/client.rb +36 -48
- data/lib/arachni/rpc/pure.rb +3 -9
- data/lib/arachni/rpc/pure/client.rb +59 -30
- data/lib/arachni/rpc/pure/connection.rb +70 -26
- data/lib/arachni/rpc/pure/version.rb +4 -2
- metadata +44 -66
- data/spec/arachni/rpc/pure/client_spec.rb +0 -119
- data/spec/pems/cacert.pem +0 -37
- data/spec/pems/client/cert.pem +0 -37
- data/spec/pems/client/foo-cert.pem +0 -39
- data/spec/pems/client/foo-key.pem +0 -51
- data/spec/pems/client/key.pem +0 -51
- data/spec/spec.opts +0 -2
- data/spec/spec_helper.rb +0 -42
checksums.yaml
ADDED
@@ -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
|
data/CHANGELOG.md
CHANGED
data/LICENSE.md
CHANGED
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.
|
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@
|
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
|
36
|
-
|
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
|
-
|
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
|
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
|
-
|
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
|
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
|
data/examples/client.rb
CHANGED
@@ -1,63 +1,51 @@
|
|
1
|
-
|
1
|
+
require_relative '../lib/arachni/rpc/pure'
|
2
2
|
|
3
|
-
|
4
|
-
|
3
|
+
dispatcher = Arachni::RPC::Pure::Client.new(
|
4
|
+
host: '127.0.0.1',
|
5
|
+
port: 7331
|
6
|
+
)
|
5
7
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
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
|
-
|
15
|
-
|
16
|
-
|
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
|
-
|
33
|
-
|
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
|
-
|
43
|
-
|
44
|
-
|
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
|
-
|
59
|
-
|
60
|
-
|
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
|
data/lib/arachni/rpc/pure.rb
CHANGED
@@ -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
|
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
|
-
|
10
|
-
|
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
|
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
|
-
|
16
|
-
|
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
|
-
|
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
|
-
|
56
|
+
|
57
|
+
response['obj']
|
38
58
|
end
|
39
59
|
|
40
60
|
private
|
41
61
|
|
42
|
-
def
|
43
|
-
|
44
|
-
|
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
|
49
|
-
|
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
|
-
|
54
|
-
:
|
55
|
-
:args
|
56
|
-
:
|
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
|
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
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
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
|
-
@
|
31
|
-
|
32
|
-
|
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
|
-
@
|
60
|
+
@socket.close
|
37
61
|
end
|
38
62
|
|
63
|
+
# @param [Hash] request
|
64
|
+
# RPC request message data.
|
39
65
|
def perform( request )
|
40
|
-
|
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 =
|
53
|
-
@
|
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 = @
|
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
|
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
|
-
|
98
|
+
def serialize( object )
|
99
|
+
MessagePack.dump object
|
100
|
+
end
|
74
101
|
|
75
|
-
def
|
76
|
-
|
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
|
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
|
-
|
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.
|
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
|
-
|
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
|
-
|
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
|
-
-
|
44
|
-
-
|
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
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
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:
|
64
|
+
rubygems_version: 2.2.2
|
80
65
|
signing_key:
|
81
|
-
specification_version:
|
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
|
-
|
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
|
data/spec/pems/cacert.pem
DELETED
@@ -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-----
|
data/spec/pems/client/cert.pem
DELETED
@@ -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
|
-
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
-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
-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
-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
-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
-
tyq2xKC6qJl+v7ZN36I5AG1RLZjmG1yN2KlFpUsugJjSrBfqLgkoaIvp89VOAhRF
|
8
|
-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
-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
-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
-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
-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
-
AQKCAgAtE0h2EzArtbyS21Gi591Aaf/7qHygMeTzEh0EqfOFLT2Cke3T+/bOpJX6
|
14
|
-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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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
-
LCDSOzCkGNxhc1LLL5qECY1TGov7mn89pRktVFVA1VxAd4Mw5z4QoHAb5fTqi4Dt
|
25
|
-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
-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
-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
-
vu3+f2KGqUFYWVSmzeHNxKVYspUMWhCTfLKPL5mt18iJyNcyRXi8NGTCeJT1jELc
|
29
|
-
+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
-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
-
tpez7SdsW7/pDPuvILq4+RqwUkLhQtYgEeYNv0R1D2RSMLfmnJNJepwjjLYNX9+E
|
32
|
-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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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
|
51
|
-
-----END RSA PRIVATE KEY-----
|
data/spec/pems/client/key.pem
DELETED
@@ -1,51 +0,0 @@
|
|
1
|
-
-----BEGIN RSA PRIVATE KEY-----
|
2
|
-
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
-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
-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
-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
-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
-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
-
C+AtdWlih7GKU/CdzRR/LKBaclD5lUEw4jQ3Jm8UGB7mW0nVhufly2Ky2TCfGpvR
|
9
|
-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
-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
-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
-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
-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
-
LY2OJ9Dp2ugH/EFXXmQwG/Y04mGT06l26kl6fg1eb9C6deX+s3JyNJalW+x3dHcv
|
15
|
-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
-
3a4QCmC3kpjhOLDHk4fM8SveZ5MtTejJcR7Fc/SeZyapvQVPyNMoJ0Bp9BxN3qFN
|
17
|
-
ptp9+ol94wKxR5ukfNtqi8A12pHGm2iVpqyBSL+GE3YEB9JpukmkaVgOSTNi1pTr
|
18
|
-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
-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
-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
-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
-
4myOr7KxGaId+UKqhEYjMYU0YOSlhpMgIdamZsQrz5Oy/NnjOCZf5c10LR+xBiEY
|
23
|
-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
-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
-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
-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
-
HlYIzF0vpck7LzUnZhNoUvVlfuC3HCKY6WshC+kBJpeSqtBMUPDxbqmgSKmve1rI
|
28
|
-
MsGfEeo1Fqq/VY5gMDkwcrV24BTuHhXGInxmamhCf/0bAXyXR5LJ1nB/TjzFzPsO
|
29
|
-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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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
-
aAEnrnH12wjBh+CcToxSY8BVzECYYeic4TE99IqzUqBDhvFjfgM8n9NmebFZ/6pB
|
45
|
-
+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
-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
-
+Hrn4ckeUId+NlKfxxdc5bISARP9vV/jdlJ37QOtm7LlLdhHw97Y8tN24E+N6gN0
|
48
|
-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
-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
-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
|
51
|
-
-----END RSA PRIVATE KEY-----
|
data/spec/spec.opts
DELETED
data/spec/spec_helper.rb
DELETED
@@ -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
|