sqreen 1.22.1 → 1.23.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 57d4b7264d76b91e470ef68f34927c03050684f38cd02c4c00e22cf6119da732
4
- data.tar.gz: 4e4d4ad4e0967db38931e6fe8bcce3ca437b20e7a8db302ef3c51ecfdf999bd7
3
+ metadata.gz: e6b62b53864420b27411824bf5d51c80949a7e98357edd128e64ee0e77039476
4
+ data.tar.gz: 85a9d762af8063c9e42978100907561397bd00e8278978b9a67f01e5fe52670f
5
5
  SHA512:
6
- metadata.gz: 6191b1900193ee47b0794aecd80ba598642f10b643c1f98d425006e116a3d2b49eec61bde709fd19bfa721400a362c1f07f3707d09fa8843f7d6b630a6fe3e7a
7
- data.tar.gz: 6f90abf84cf3a036bb1dfe2474500f36266fe8dad4f5886c1c1226e0e211a093c0d9b09750cef9c8ee3052cdc19c69203e10d7701a626fd63cb42550cd8eab06
6
+ metadata.gz: ca4c03f84749101fe1b2235ead061cf597bfb0a4d08d95d9cd3b24cdb9ca77eea3928fa00ce4db22219acea02c93539251f384002ccb3e4fffd1c484d54ad938
7
+ data.tar.gz: 02e372ee65122d783685df0756bf069a30225348239703465a7a20f751865bc5ab79ba9c0c99dafc1551d1812532669089681dc71b8375cb4791df749f9d3977
@@ -1,3 +1,7 @@
1
+ ## 1.23.0
2
+
3
+ * Implement GraphQL support
4
+
1
5
  ## 1.22.1
2
6
 
3
7
  * Fix excessive exception reporting, reducing CPU and network load
@@ -377,6 +377,10 @@ module Sqreen
377
377
  end
378
378
  end
379
379
 
380
+ def graphql_args=(args)
381
+ request.env['sqreen.request.graphql_args'] = args if request
382
+ end
383
+
380
384
  def self.parameters_from_request(request)
381
385
  return {} unless request
382
386
 
@@ -388,6 +392,8 @@ module Sqreen
388
392
  if (p = rack_params(request))
389
393
  r[P_RACK] = p
390
394
  end
395
+ p = request.env['sqreen.request.graphql_args']
396
+ r['graphql'] = p if p
391
397
  # Add grape parameters if seen
392
398
  p = request.env['grape.request.params']
393
399
  r[P_GRAPE] = p if p
@@ -4,5 +4,5 @@
4
4
  # Please refer to our terms for more information: https://www.sqreen.com/terms.html
5
5
 
6
6
  module Sqreen
7
- VERSION = '1.22.1'.freeze
7
+ VERSION = '1.23.0'.freeze
8
8
  end
@@ -230,6 +230,8 @@ class Sqreen::Weave::Legacy::Instrumentation
230
230
  @hooks << add_callback('weave,hardcoded', hard_callback, strategy)
231
231
  end
232
232
 
233
+ @hooks << install_graphql_hook
234
+
233
235
  metrics_engine = self.metrics_engine
234
236
 
235
237
  request_hook = Sqreen::Graft::Hook['Sqreen::ShrinkWrap#call', strategy]
@@ -566,4 +568,30 @@ class Sqreen::Weave::Legacy::Instrumentation
566
568
  Sqreen::Rules::RunUserActions.new(Sqreen, :auth_track, 1),
567
569
  ]
568
570
  end
571
+
572
+ def install_graphql_hook
573
+ hook = Sqreen::Graft::Hook['GraphQL::Execution::Multiplex.run_queries']
574
+
575
+ hook.add do
576
+ before('weave,test,graphql', mandatory: true) do |call|
577
+ find_args = proc do |*items|
578
+ args = []
579
+ items.each do |e|
580
+ args << e if e.is_a?(GraphQL::Language::Nodes::Argument)
581
+ args += find_args.call(*e.children)
582
+ end
583
+ args
584
+ end
585
+ queries = call.args[1]
586
+ qdocs = queries.map { |q| [q.query_string, q.document] }
587
+ qargs = qdocs.map do |q, doc|
588
+ next if doc.nil?
589
+ [q, find_args.call(*doc.children).map { |arg| { arg.name => arg.value } }.reduce(&:merge)]
590
+ end
591
+ Sqreen.framework.graphql_args = Hash[*qargs.flatten(1)]
592
+ end
593
+ end.install
594
+
595
+ hook
596
+ end
569
597
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sqreen
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.22.1
4
+ version: 1.23.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sqreen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-12-16 00:00:00.000000000 Z
11
+ date: 2021-01-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sqreen-backport
@@ -348,7 +348,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
348
348
  - !ruby/object:Gem::Version
349
349
  version: '0'
350
350
  requirements: []
351
- rubygems_version: 3.1.3
351
+ rubygems_version: 3.2.3
352
352
  signing_key:
353
353
  specification_version: 4
354
354
  summary: Sqreen Ruby agent