forest_admin_rpc_agent 1.13.3 → 1.13.4
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/forest_admin_rpc_agent/middleware/authentication.rb +12 -1
- data/lib/forest_admin_rpc_agent/routes/action_execute.rb +2 -6
- data/lib/forest_admin_rpc_agent/routes/action_form.rb +3 -10
- data/lib/forest_admin_rpc_agent/routes/aggregate.rb +2 -5
- data/lib/forest_admin_rpc_agent/routes/base_route.rb +12 -3
- data/lib/forest_admin_rpc_agent/routes/chart.rb +3 -7
- data/lib/forest_admin_rpc_agent/routes/create.rb +2 -5
- data/lib/forest_admin_rpc_agent/routes/datasource_chart.rb +2 -5
- data/lib/forest_admin_rpc_agent/routes/delete.rb +2 -5
- data/lib/forest_admin_rpc_agent/routes/list.rb +2 -5
- data/lib/forest_admin_rpc_agent/routes/native_query.rb +2 -2
- data/lib/forest_admin_rpc_agent/routes/schema.rb +2 -7
- data/lib/forest_admin_rpc_agent/routes/sse.rb +1 -1
- data/lib/forest_admin_rpc_agent/routes/update.rb +2 -5
- data/lib/forest_admin_rpc_agent/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: d53c87e67caf6c3d8d25e0153e5e2d9d70c9c2729068a8fdf9b1ae87fc1d2a9c
|
|
4
|
+
data.tar.gz: 33e47c98fa34e2334d1e11a6bf24a4402d3d71ef7fee86339de5b5a201577c96
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 9a8955692b0f1e9665c1449422d59ae40f3806c3be9e16f2a4de9a43a4a5e907ce1d0eafa0699fbdbf5b48cafb9b772cdbdfde12b45f1b9d0b95f819e50fb49c
|
|
7
|
+
data.tar.gz: 5bceed442425fdcbf317aab144eb58f05414d857183fe81a47339504701e1086c8c88938672854705952e5907e2a314b5a9377ddcd480dbdd371a3f03035c2a4
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
require 'json'
|
|
2
|
+
|
|
1
3
|
module ForestAdminRpcAgent
|
|
2
4
|
module Middleware
|
|
3
5
|
class Authentication
|
|
@@ -19,7 +21,16 @@ module ForestAdminRpcAgent
|
|
|
19
21
|
return [401, { 'Content-Type' => 'application/json' }, [{ error: 'Unauthorized' }.to_json]]
|
|
20
22
|
end
|
|
21
23
|
|
|
22
|
-
@app.call(env)
|
|
24
|
+
status, headers, response = @app.call(env)
|
|
25
|
+
|
|
26
|
+
if request.get_header('HTTP_FOREST_CALLER')
|
|
27
|
+
caller = ForestAdminDatasourceToolkit::Components::Caller.new(
|
|
28
|
+
**(JSON.parse(request.get_header('HTTP_FOREST_CALLER')).symbolize_keys)
|
|
29
|
+
)
|
|
30
|
+
headers = headers.merge({ caller: caller })
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
[status, headers, response]
|
|
23
34
|
end
|
|
24
35
|
|
|
25
36
|
private
|
|
@@ -12,19 +12,15 @@ module ForestAdminRpcAgent
|
|
|
12
12
|
end
|
|
13
13
|
|
|
14
14
|
def handle_request(args)
|
|
15
|
-
return
|
|
15
|
+
return {} unless args[:params]['collection_name']
|
|
16
16
|
|
|
17
17
|
datasource = ForestAdminRpcAgent::Facades::Container.datasource
|
|
18
18
|
collection = datasource.get_collection(args[:params]['collection_name'])
|
|
19
|
-
|
|
20
|
-
caller = ForestAdminDatasourceToolkit::Components::Caller.new(
|
|
21
|
-
**args[:params]['caller'].to_h.transform_keys(&:to_sym)
|
|
22
|
-
)
|
|
23
19
|
filter = FilterFactory.from_plain_object(args[:params]['filter'])
|
|
24
20
|
data = args[:params]['data']
|
|
25
21
|
action = args[:params]['action']
|
|
26
22
|
|
|
27
|
-
collection.execute(caller, action, data, filter)
|
|
23
|
+
collection.execute(args[:caller], action, data, filter)
|
|
28
24
|
end
|
|
29
25
|
end
|
|
30
26
|
end
|
|
@@ -12,24 +12,17 @@ module ForestAdminRpcAgent
|
|
|
12
12
|
end
|
|
13
13
|
|
|
14
14
|
def handle_request(args)
|
|
15
|
-
return
|
|
15
|
+
return {} unless args[:params]['collection_name']
|
|
16
16
|
|
|
17
17
|
datasource = ForestAdminRpcAgent::Facades::Container.datasource
|
|
18
18
|
collection = datasource.get_collection(args[:params]['collection_name'])
|
|
19
|
-
|
|
20
|
-
caller = if args[:params].key?('caller')
|
|
21
|
-
ForestAdminDatasourceToolkit::Components::Caller.new(
|
|
22
|
-
**args[:params]['caller'].to_h.transform_keys(&:to_sym)
|
|
23
|
-
)
|
|
24
|
-
end
|
|
25
19
|
filter = FilterFactory.from_plain_object(args[:params]['filter'])
|
|
26
20
|
metas = args[:params]['metas'] || {}
|
|
27
21
|
data = args[:params]['data']
|
|
28
22
|
action = args[:params]['action']
|
|
29
23
|
|
|
30
|
-
form = collection.get_form(caller, action, data, filter, metas)
|
|
31
|
-
|
|
32
|
-
form.to_json
|
|
24
|
+
form = collection.get_form(args[:caller], action, data, filter, metas)
|
|
25
|
+
encode_file_element(form)
|
|
33
26
|
end
|
|
34
27
|
|
|
35
28
|
def encode_file_element(elements)
|
|
@@ -12,11 +12,8 @@ module ForestAdminRpcAgent
|
|
|
12
12
|
end
|
|
13
13
|
|
|
14
14
|
def handle_request(args)
|
|
15
|
-
return
|
|
15
|
+
return {} unless args[:params]['collection_name']
|
|
16
16
|
|
|
17
|
-
caller = ForestAdminDatasourceToolkit::Components::Caller.new(
|
|
18
|
-
**args[:params]['caller'].to_h.transform_keys(&:to_sym)
|
|
19
|
-
)
|
|
20
17
|
datasource = ForestAdminRpcAgent::Facades::Container.datasource
|
|
21
18
|
collection = datasource.get_collection(args[:params]['collection_name'])
|
|
22
19
|
|
|
@@ -27,7 +24,7 @@ module ForestAdminRpcAgent
|
|
|
27
24
|
)
|
|
28
25
|
filter = FilterFactory.from_plain_object(args[:params]['filter'])
|
|
29
26
|
|
|
30
|
-
collection.aggregate(caller, filter, aggregation, args[:params]['limit'])
|
|
27
|
+
collection.aggregate(args[:caller], filter, aggregation, args[:params]['limit'])
|
|
31
28
|
end
|
|
32
29
|
end
|
|
33
30
|
end
|
|
@@ -20,7 +20,8 @@ module ForestAdminRpcAgent
|
|
|
20
20
|
|
|
21
21
|
def register_sinatra(app)
|
|
22
22
|
app.send(@method.to_sym, @url) do
|
|
23
|
-
handle_request(params)
|
|
23
|
+
result = handle_request(params)
|
|
24
|
+
serialize_response(result)
|
|
24
25
|
end
|
|
25
26
|
end
|
|
26
27
|
|
|
@@ -33,8 +34,8 @@ module ForestAdminRpcAgent
|
|
|
33
34
|
|
|
34
35
|
if status == 200
|
|
35
36
|
params = request.query_parameters.merge(request.request_parameters)
|
|
36
|
-
|
|
37
|
-
[200, { 'Content-Type' => 'application/json' }, [
|
|
37
|
+
result = handle_request({ params: params, caller: headers[:caller] })
|
|
38
|
+
[200, { 'Content-Type' => 'application/json' }, [serialize_response(result)]]
|
|
38
39
|
else
|
|
39
40
|
[status, headers, response]
|
|
40
41
|
end
|
|
@@ -47,6 +48,14 @@ module ForestAdminRpcAgent
|
|
|
47
48
|
as: @name,
|
|
48
49
|
route_alias: @name
|
|
49
50
|
end
|
|
51
|
+
|
|
52
|
+
private
|
|
53
|
+
|
|
54
|
+
def serialize_response(result)
|
|
55
|
+
return result if result.is_a?(String) && (result.start_with?('{', '['))
|
|
56
|
+
|
|
57
|
+
result.to_json
|
|
58
|
+
end
|
|
50
59
|
end
|
|
51
60
|
end
|
|
52
61
|
end
|
|
@@ -10,17 +10,13 @@ module ForestAdminRpcAgent
|
|
|
10
10
|
end
|
|
11
11
|
|
|
12
12
|
def handle_request(args)
|
|
13
|
-
return
|
|
13
|
+
return {} unless args[:params]['collection_name']
|
|
14
14
|
|
|
15
|
-
chart_name = args[:params]['
|
|
16
|
-
caller = ForestAdminDatasourceToolkit::Components::Caller.new(
|
|
17
|
-
**args[:params]['caller'].to_h.transform_keys(&:to_sym)
|
|
18
|
-
)
|
|
15
|
+
chart_name = args[:params]['chart']
|
|
19
16
|
datasource = ForestAdminRpcAgent::Facades::Container.datasource
|
|
20
17
|
collection = datasource.get_collection(args[:params]['collection_name'])
|
|
21
18
|
|
|
22
|
-
|
|
23
|
-
collection.render_chart(caller, chart_name, primary_key_values)
|
|
19
|
+
collection.render_chart(caller, chart_name, args[:params]['record_id'])
|
|
24
20
|
end
|
|
25
21
|
end
|
|
26
22
|
end
|
|
@@ -8,15 +8,12 @@ module ForestAdminRpcAgent
|
|
|
8
8
|
end
|
|
9
9
|
|
|
10
10
|
def handle_request(args)
|
|
11
|
-
return
|
|
11
|
+
return {} unless args[:params]['collection_name']
|
|
12
12
|
|
|
13
|
-
caller = ForestAdminDatasourceToolkit::Components::Caller.new(
|
|
14
|
-
**args[:params]['caller'].to_h.transform_keys(&:to_sym)
|
|
15
|
-
)
|
|
16
13
|
datasource = ForestAdminRpcAgent::Facades::Container.datasource
|
|
17
14
|
collection = datasource.get_collection(args[:params]['collection_name'])
|
|
18
15
|
|
|
19
|
-
[collection.create(caller, args[:params]['data'])]
|
|
16
|
+
[collection.create(args[:caller], args[:params]['data'].first)]
|
|
20
17
|
end
|
|
21
18
|
end
|
|
22
19
|
end
|
|
@@ -8,15 +8,12 @@ module ForestAdminRpcAgent
|
|
|
8
8
|
end
|
|
9
9
|
|
|
10
10
|
def handle_request(args)
|
|
11
|
-
return
|
|
11
|
+
return {} unless args[:params]['chart']
|
|
12
12
|
|
|
13
13
|
chart_name = args[:params]['chart']
|
|
14
|
-
caller = ForestAdminDatasourceToolkit::Components::Caller.new(
|
|
15
|
-
**args[:params]['caller'].to_h.transform_keys(&:to_sym)
|
|
16
|
-
)
|
|
17
14
|
datasource = ForestAdminRpcAgent::Facades::Container.datasource
|
|
18
15
|
|
|
19
|
-
datasource.render_chart(caller, chart_name)
|
|
16
|
+
datasource.render_chart(args[:caller], chart_name)
|
|
20
17
|
end
|
|
21
18
|
end
|
|
22
19
|
end
|
|
@@ -12,16 +12,13 @@ module ForestAdminRpcAgent
|
|
|
12
12
|
end
|
|
13
13
|
|
|
14
14
|
def handle_request(args)
|
|
15
|
-
return
|
|
15
|
+
return {} unless args[:params]['collection_name']
|
|
16
16
|
|
|
17
|
-
caller = ForestAdminDatasourceToolkit::Components::Caller.new(
|
|
18
|
-
**args[:params]['caller'].to_h.transform_keys(&:to_sym)
|
|
19
|
-
)
|
|
20
17
|
datasource = ForestAdminRpcAgent::Facades::Container.datasource
|
|
21
18
|
collection = datasource.get_collection(args[:params]['collection_name'])
|
|
22
19
|
filter = FilterFactory.from_plain_object(args[:params]['filter'])
|
|
23
20
|
|
|
24
|
-
collection.delete(caller, filter)
|
|
21
|
+
collection.delete(args[:caller], filter)
|
|
25
22
|
end
|
|
26
23
|
end
|
|
27
24
|
end
|
|
@@ -12,17 +12,14 @@ module ForestAdminRpcAgent
|
|
|
12
12
|
end
|
|
13
13
|
|
|
14
14
|
def handle_request(args)
|
|
15
|
-
return
|
|
15
|
+
return {} unless args[:params]['collection_name']
|
|
16
16
|
|
|
17
|
-
caller = ForestAdminDatasourceToolkit::Components::Caller.new(
|
|
18
|
-
**args[:params]['caller'].to_h.transform_keys(&:to_sym)
|
|
19
|
-
)
|
|
20
17
|
datasource = ForestAdminRpcAgent::Facades::Container.datasource
|
|
21
18
|
collection = datasource.get_collection(args[:params]['collection_name'])
|
|
22
19
|
projection = Projection.new(args[:params]['projection'])
|
|
23
20
|
filter = FilterFactory.from_plain_object(args[:params]['filter'])
|
|
24
21
|
|
|
25
|
-
collection.list(caller, filter, projection)
|
|
22
|
+
collection.list(args[:caller], filter, projection)
|
|
26
23
|
end
|
|
27
24
|
end
|
|
28
25
|
end
|
|
@@ -8,14 +8,14 @@ module ForestAdminRpcAgent
|
|
|
8
8
|
end
|
|
9
9
|
|
|
10
10
|
def handle_request(args)
|
|
11
|
-
return
|
|
11
|
+
return {} unless args[:params]['connection_name'] && args[:params]['query']
|
|
12
12
|
|
|
13
13
|
connection_name = args[:params]['connection_name']
|
|
14
14
|
query = args[:params]['query']
|
|
15
15
|
binds = args[:params]['binds'] || []
|
|
16
16
|
datasource = ForestAdminRpcAgent::Facades::Container.datasource
|
|
17
17
|
|
|
18
|
-
datasource.execute_native_query(connection_name, query, binds)
|
|
18
|
+
datasource.execute_native_query(connection_name, query, binds)
|
|
19
19
|
end
|
|
20
20
|
end
|
|
21
21
|
end
|
|
@@ -18,15 +18,10 @@ module ForestAdminRpcAgent
|
|
|
18
18
|
.map { |_name, collection| collection.schema.merge({ name: collection.name }) }
|
|
19
19
|
.sort_by { |collection| collection[:name] }
|
|
20
20
|
|
|
21
|
-
connections =
|
|
22
|
-
agent.customizer.datasources.each do |root_datasource|
|
|
23
|
-
connections = connections.union(
|
|
24
|
-
root_datasource.live_query_connections.keys.map { |connection_name| { name: connection_name } }
|
|
25
|
-
)
|
|
26
|
-
end
|
|
21
|
+
connections = datasource.live_query_connections.keys.map { |connection_name| { name: connection_name } }
|
|
27
22
|
schema[:native_query_connections] = connections
|
|
28
23
|
|
|
29
|
-
schema
|
|
24
|
+
schema
|
|
30
25
|
end
|
|
31
26
|
end
|
|
32
27
|
end
|
|
@@ -5,7 +5,7 @@ module ForestAdminRpcAgent
|
|
|
5
5
|
class Sse
|
|
6
6
|
DEFAULT_HEARTBEAT_INTERVAL = 1
|
|
7
7
|
|
|
8
|
-
def initialize(url = '
|
|
8
|
+
def initialize(url = 'sse', method = 'get', name = 'rpc_sse', heartbeat_interval: DEFAULT_HEARTBEAT_INTERVAL)
|
|
9
9
|
@url = url
|
|
10
10
|
@method = method
|
|
11
11
|
@name = name
|
|
@@ -10,16 +10,13 @@ module ForestAdminRpcAgent
|
|
|
10
10
|
end
|
|
11
11
|
|
|
12
12
|
def handle_request(args)
|
|
13
|
-
return
|
|
13
|
+
return {} unless args[:params]['collection_name']
|
|
14
14
|
|
|
15
|
-
caller = ForestAdminDatasourceToolkit::Components::Caller.new(
|
|
16
|
-
**args[:params]['caller'].to_h.transform_keys(&:to_sym)
|
|
17
|
-
)
|
|
18
15
|
datasource = ForestAdminRpcAgent::Facades::Container.datasource
|
|
19
16
|
collection = datasource.get_collection(args[:params]['collection_name'])
|
|
20
17
|
filter = FilterFactory.from_plain_object(args[:params]['filter'])
|
|
21
18
|
|
|
22
|
-
collection.update(caller, filter, args[:params]['
|
|
19
|
+
collection.update(args[:caller], filter, args[:params]['patch'])
|
|
23
20
|
end
|
|
24
21
|
end
|
|
25
22
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: forest_admin_rpc_agent
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.13.
|
|
4
|
+
version: 1.13.4
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Matthieu
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2025-11-
|
|
12
|
+
date: 2025-11-06 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: base64
|