upfluence-utils 0.9.4 → 0.10.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: aa9bd490a9a2cd9c548925ebd068e9cbe33e29ab1b8ff94c9e0d9edab622da66
4
- data.tar.gz: f61adace9b4078ce5231b7e65cad0b6205d5794459bd5aa952925e99c10a90aa
3
+ metadata.gz: e165b139bfb84f2f7542f52d4bb0df3e5fb10277ebf42d776101339372c1da74
4
+ data.tar.gz: '069f2d3e7e58224388753f264594b636ef94cc8d2de96cbd1e6ef7c142f33ad8'
5
5
  SHA512:
6
- metadata.gz: 4f69d56979c1fe6cda75022744e4c583c83e1a8a80c3a5aac2c93ea182d62d847df433496529324dd5bbd67f9a69becd70ce18826bdf31de8ce184b80ff9f2d5
7
- data.tar.gz: 4a85bc22c5a54b6512e7a4c37ee153755e9533a328a109bc5e9098e00dad4780177a5ef754897f0ed59031d087396dfce18b18f227d882f7ee6991c8ffb019e5
6
+ metadata.gz: 76fd919f917a42efad089f545ec02d0d343a2e0df692ac452250ae60aa2f9c3480ecddb902506cdae2ec9082af3f89a4c499612ad4f385dbf98a587af947a0d6
7
+ data.tar.gz: '08368ab11e84e4ef0cc5affc56b27157ab65e9b05b2351011d092e4788e3409959324a14e6c4c677ebdd7eff2b130f32bc7f3d978f5d93c33773b70f516fdcd1'
@@ -101,7 +101,7 @@ module Upfluence
101
101
  [422, Base::Exceptions::ValidationError.from_model(e.record).to_json]
102
102
  end
103
103
 
104
- Sinatra::Base.error StrongParameters::ParameterMissing.error do |e|
104
+ Sinatra::Base.error Upfluence::Mixin::StrongParameters::ParameterMissing do |e|
105
105
  [
106
106
  400,
107
107
  {
@@ -44,9 +44,11 @@ module Upfluence
44
44
  end
45
45
 
46
46
  def record(env, code, duration)
47
+ path = parse_route(env, code)
48
+
47
49
  @request_total_count.increment(
48
50
  labels: {
49
- path: parse_route(env),
51
+ path: path,
50
52
  method: env['REQUEST_METHOD'].downcase,
51
53
  status: code,
52
54
  env: Upfluence.env.to_s
@@ -56,16 +58,16 @@ module Upfluence
56
58
  @request_histogram.observe(
57
59
  duration,
58
60
  labels: {
59
- path: parse_route(env),
61
+ path: path,
60
62
  method: env['REQUEST_METHOD'].downcase,
61
63
  env: Upfluence.env.to_s
62
64
  }
63
65
  )
64
66
  end
65
67
 
66
- def parse_route(env)
68
+ def parse_route(env, code)
67
69
  parse_route_sinatra(env) || parse_route_rails(env) ||
68
- parse_route_default(env)
70
+ parse_route_default(env, code)
69
71
  end
70
72
 
71
73
  def parse_route_rails(env)
@@ -90,7 +92,9 @@ module Upfluence
90
92
  end.reverse.join('/')
91
93
  end
92
94
 
93
- def parse_route_default(env)
95
+ def parse_route_default(env, code)
96
+ return 'unexpected-route' if code.eql? 404
97
+
94
98
  Rack::Request.new(env).path.gsub(%r{/\d+(/|$)}, '/:id\\1')
95
99
  end
96
100
  end
@@ -0,0 +1,25 @@
1
+ require 'loofah'
2
+
3
+ module Upfluence
4
+ module Mixin
5
+ module HTMLScrubbing
6
+ def scrub_params(params, *keys)
7
+ keys.reduce(params) do |vs, key|
8
+ if vs.key? key
9
+ vs.merge(key => scrub_value(vs[key]))
10
+ else
11
+ vs
12
+ end
13
+ end
14
+ end
15
+
16
+ private
17
+
18
+ def scrub_value(value)
19
+ return nil unless value.is_a? String
20
+
21
+ Loofah.fragment(value).scrub!(:prune).to_s
22
+ end
23
+ end
24
+ end
25
+ end
@@ -3,6 +3,12 @@ module Upfluence
3
3
  module Thrift
4
4
  module Middleware
5
5
  class ErrorCatcher
6
+ STANDARD_THRIFT_EXCEPTIONS = [
7
+ ::Thrift::ApplicationException,
8
+ ::Thrift::TransportException,
9
+ ::Thrift::ProtocolException
10
+ ].freeze
11
+
6
12
  def initialize(app, error_logger)
7
13
  @app = app
8
14
  @error_logger = error_logger
@@ -11,6 +17,10 @@ module Upfluence
11
17
  def method_missing(method, *args, &block)
12
18
  @app.send(method, *args, &block)
13
19
  rescue ::Thrift::Exception => e
20
+ if STANDARD_THRIFT_EXCEPTIONS.include? exc.class
21
+ @error_logger.notify(e, method, *args)
22
+ end
23
+
14
24
  raise e
15
25
  rescue => e
16
26
  @error_logger.notify(e, method, *args)
@@ -1,5 +1,5 @@
1
1
  module Upfluence
2
2
  module Utils
3
- VERSION = '0.9.4'.freeze
3
+ VERSION = '0.10.2'.freeze
4
4
  end
5
5
  end
data/rbutils.gemspec CHANGED
@@ -31,4 +31,5 @@ Gem::Specification.new do |spec|
31
31
  spec.add_runtime_dependency 'prometheus-client', '~> 2.1'
32
32
  spec.add_runtime_dependency 'userializer'
33
33
  spec.add_runtime_dependency 'activerecord'
34
+ spec.add_runtime_dependency 'loofah'
34
35
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: upfluence-utils
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.4
4
+ version: 0.10.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Upfluence
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-04-01 00:00:00.000000000 Z
11
+ date: 2021-12-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -220,6 +220,20 @@ dependencies:
220
220
  - - ">="
221
221
  - !ruby/object:Gem::Version
222
222
  version: '0'
223
+ - !ruby/object:Gem::Dependency
224
+ name: loofah
225
+ requirement: !ruby/object:Gem::Requirement
226
+ requirements:
227
+ - - ">="
228
+ - !ruby/object:Gem::Version
229
+ version: '0'
230
+ type: :runtime
231
+ prerelease: false
232
+ version_requirements: !ruby/object:Gem::Requirement
233
+ requirements:
234
+ - - ">="
235
+ - !ruby/object:Gem::Version
236
+ version: '0'
223
237
  description:
224
238
  email:
225
239
  - dev@upfluence.com
@@ -255,6 +269,7 @@ files:
255
269
  - lib/upfluence/http/middleware/prometheus.rb
256
270
  - lib/upfluence/http/server.rb
257
271
  - lib/upfluence/logger.rb
272
+ - lib/upfluence/mixin/html_scrubbing.rb
258
273
  - lib/upfluence/mixin/pagination.rb
259
274
  - lib/upfluence/mixin/strong_parameters.rb
260
275
  - lib/upfluence/peer.rb
@@ -292,7 +307,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
292
307
  - !ruby/object:Gem::Version
293
308
  version: '0'
294
309
  requirements: []
295
- rubygems_version: 3.1.4
310
+ rubygems_version: 3.0.3
296
311
  signing_key:
297
312
  specification_version: 4
298
313
  summary: Upfluence common utils for Ruby projects