toq 0.0.4.1 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/toq/exceptions.rb +9 -0
- data/lib/toq/server.rb +28 -0
- data/lib/toq/version.rb +1 -1
- data/spec/servers/server.rb +21 -0
- data/spec/toq/server_spec.rb +38 -0
- metadata +21 -21
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 272f1b4331d14f8c5d4b9dcb5969e83a6c6f189de4cfe38a533c4d0660d44d23
|
4
|
+
data.tar.gz: 43752df680609784b637d8e5398403b96190899b1492ce870cac212dd72d9ee5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9c9de3857a967e239b15a6160d6aed561fbb0e3a3bd31a0e9040f7b84b4ef33a5f12205f1fc17e042d466355d318a1073ee4b5955ef246fdbbf6cd1039c5d159
|
7
|
+
data.tar.gz: ea66f7e0a9ae201bbdcffe8c6220bf989f680f5a8aa54fff297ac6c6fc89e8cf95fc7c2bcc113dc6a8d4c19da5ad53eab2c0faba5d59a326e24f14802852ed12
|
data/lib/toq/exceptions.rb
CHANGED
@@ -116,6 +116,15 @@ module Exceptions
|
|
116
116
|
|
117
117
|
end
|
118
118
|
|
119
|
+
class UnsafeMethod < Base
|
120
|
+
|
121
|
+
# @return [Bool] true
|
122
|
+
def rpc_unsafe_method_error?
|
123
|
+
true
|
124
|
+
end
|
125
|
+
|
126
|
+
end
|
127
|
+
|
119
128
|
# An invalid method has been called.
|
120
129
|
#
|
121
130
|
# Occurs when a remote method doesn't exist or isn't public.
|
data/lib/toq/server.rb
CHANGED
@@ -188,6 +188,12 @@ class Server
|
|
188
188
|
raise Exceptions::InvalidObject.new( msg )
|
189
189
|
end
|
190
190
|
|
191
|
+
if !method_safe?( obj_name, meth_name )
|
192
|
+
msg = "Trying to access unsafe method '#{meth_name}'."
|
193
|
+
@logger.error( 'Call' ){ msg + " [on behalf of #{peer_ip_addr}]" }
|
194
|
+
raise Exceptions::UnsafeMethod.new( msg )
|
195
|
+
end
|
196
|
+
|
191
197
|
# The handler needs to know if this is an async call because if it is
|
192
198
|
# we'll have already send the response and it doesn't need to do
|
193
199
|
# transmit anything.
|
@@ -259,6 +265,28 @@ class Server
|
|
259
265
|
!!@objects[obj_name]
|
260
266
|
end
|
261
267
|
|
268
|
+
def method_safe?( obj_name, meth_name )
|
269
|
+
ancestors = @objects[obj_name].class.ancestors - [Object, Kernel, BasicObject]
|
270
|
+
|
271
|
+
ancestors.each do |ancestor|
|
272
|
+
case ancestor
|
273
|
+
when Class
|
274
|
+
if ancestor.allocate.public_methods( false ).include? meth_name.to_sym
|
275
|
+
return true
|
276
|
+
end
|
277
|
+
|
278
|
+
when Module
|
279
|
+
object = Object.new
|
280
|
+
object.extend( ancestor )
|
281
|
+
if object.public_methods( false ).include? meth_name.to_sym
|
282
|
+
return true
|
283
|
+
end
|
284
|
+
end
|
285
|
+
end
|
286
|
+
|
287
|
+
false
|
288
|
+
end
|
289
|
+
|
262
290
|
end
|
263
291
|
|
264
292
|
end
|
data/lib/toq/version.rb
CHANGED
data/spec/servers/server.rb
CHANGED
@@ -45,14 +45,30 @@ def rpc_opts_with_mixed_ssl_primitives
|
|
45
45
|
)
|
46
46
|
end
|
47
47
|
|
48
|
+
module MyModule
|
49
|
+
def in_module
|
50
|
+
true
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
48
54
|
class Parent
|
55
|
+
include MyModule
|
56
|
+
|
49
57
|
def foo( arg )
|
50
58
|
arg
|
51
59
|
end
|
60
|
+
|
61
|
+
def in_parent
|
62
|
+
true
|
63
|
+
end
|
52
64
|
end
|
53
65
|
|
54
66
|
class Test < Parent
|
55
67
|
|
68
|
+
def in_child
|
69
|
+
true
|
70
|
+
end
|
71
|
+
|
56
72
|
def delay( arg, &block )
|
57
73
|
Raktr.global.run_in_thread if !Raktr.global.running?
|
58
74
|
Raktr.global.delay( 1 ) { block.call( arg ) }
|
@@ -68,6 +84,11 @@ class Test < Parent
|
|
68
84
|
end
|
69
85
|
end
|
70
86
|
|
87
|
+
private
|
88
|
+
|
89
|
+
def private_method
|
90
|
+
true
|
91
|
+
end
|
71
92
|
end
|
72
93
|
|
73
94
|
def start_server( opts, do_not_start = false )
|
data/spec/toq/server_spec.rb
CHANGED
@@ -8,6 +8,13 @@ end
|
|
8
8
|
describe Toq::Server do
|
9
9
|
let(:options) { rpc_opts.merge( port: 7333 ) }
|
10
10
|
subject { start_server( options, true ) }
|
11
|
+
let(:server) { start_server( options ) }
|
12
|
+
let(:client) { start_client( options ) }
|
13
|
+
|
14
|
+
before :all do
|
15
|
+
Thread.new { server }
|
16
|
+
client
|
17
|
+
end
|
11
18
|
|
12
19
|
describe '#initialize' do
|
13
20
|
it 'should be able to properly setup class options' do
|
@@ -63,6 +70,37 @@ describe Toq::Server do
|
|
63
70
|
subject.logger.class.should == ::Logger
|
64
71
|
end
|
65
72
|
|
73
|
+
context 'when a method is public' do
|
74
|
+
it 'can be called' do
|
75
|
+
expect( client.call('test.in_child') ).to be_truthy
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
context 'when a method is private' do
|
80
|
+
it 'cannot be called' do
|
81
|
+
expect { client.call('test.private_method') }.to raise_error Toq::Exceptions::UnsafeMethod
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
context 'when a method is inherited' do
|
86
|
+
it 'can be called' do
|
87
|
+
expect( client.call('test.in_parent') ).to be_truthy
|
88
|
+
expect( client.call('test.in_module') ).to be_truthy
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
context 'when a method is inherited from Kernel' do
|
93
|
+
it 'cannot be called' do
|
94
|
+
expect { client.call('test.exec', 'ls') }.to raise_error Toq::Exceptions::UnsafeMethod
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
context 'when a method is inherited from Object' do
|
99
|
+
it 'cannot be called' do
|
100
|
+
expect { client.call('test.included_modules') }.to raise_error Toq::Exceptions::UnsafeMethod
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
66
104
|
describe '#alive?' do
|
67
105
|
it 'returns true' do
|
68
106
|
subject.should be_alive
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: toq
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tasos Laskos
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-05-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: raktr
|
@@ -74,7 +74,7 @@ homepage: https://github.com/qadron/toq
|
|
74
74
|
licenses:
|
75
75
|
- BSD 3-Clause
|
76
76
|
metadata: {}
|
77
|
-
post_install_message:
|
77
|
+
post_install_message:
|
78
78
|
rdoc_options:
|
79
79
|
- "--charset=UTF-8"
|
80
80
|
require_paths:
|
@@ -90,27 +90,27 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
90
90
|
- !ruby/object:Gem::Version
|
91
91
|
version: '0'
|
92
92
|
requirements: []
|
93
|
-
rubygems_version: 3.4.
|
94
|
-
signing_key:
|
93
|
+
rubygems_version: 3.4.22
|
94
|
+
signing_key:
|
95
95
|
specification_version: 4
|
96
96
|
summary: Simple RPC protocol.
|
97
97
|
test_files:
|
98
|
-
- spec/spec_helper.rb
|
99
|
-
- spec/toq/request_spec.rb
|
100
|
-
- spec/toq/response_spec.rb
|
101
|
-
- spec/toq/client_spec.rb
|
102
|
-
- spec/toq/exceptions_spec.rb
|
103
|
-
- spec/toq/server_spec.rb
|
104
|
-
- spec/toq/proxy_spec.rb
|
105
|
-
- spec/toq/message_spec.rb
|
106
|
-
- spec/servers/server.rb
|
107
|
-
- spec/servers/unix_socket.rb
|
108
98
|
- spec/servers/with_ssl_primitives.rb
|
109
99
|
- spec/servers/basic.rb
|
110
|
-
- spec/
|
111
|
-
- spec/
|
112
|
-
- spec/pems/server/key.pem
|
113
|
-
- spec/pems/client/foo-key.pem
|
114
|
-
- spec/pems/client/foo-cert.pem
|
100
|
+
- spec/servers/server.rb
|
101
|
+
- spec/servers/unix_socket.rb
|
115
102
|
- spec/pems/client/cert.pem
|
116
103
|
- spec/pems/client/key.pem
|
104
|
+
- spec/pems/client/foo-cert.pem
|
105
|
+
- spec/pems/client/foo-key.pem
|
106
|
+
- spec/pems/server/cert.pem
|
107
|
+
- spec/pems/server/key.pem
|
108
|
+
- spec/pems/cacert.pem
|
109
|
+
- spec/spec_helper.rb
|
110
|
+
- spec/toq/proxy_spec.rb
|
111
|
+
- spec/toq/client_spec.rb
|
112
|
+
- spec/toq/response_spec.rb
|
113
|
+
- spec/toq/server_spec.rb
|
114
|
+
- spec/toq/message_spec.rb
|
115
|
+
- spec/toq/request_spec.rb
|
116
|
+
- spec/toq/exceptions_spec.rb
|