upfluence-utils 0.9.3 → 0.10.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9de927439a57bb3fe4965c7ae407a23a3bd2a66c3d77d2cf020d278154cc0233
4
- data.tar.gz: a28ae01832068a5a06af2810480e272f5120e40c429fd89b8a94d2142cbc2d1d
3
+ metadata.gz: cb4e2632e8587838d13ca2d29e049d3d59b796d559f7db7d32e75deb06d76b4c
4
+ data.tar.gz: c31a5166ee3bc02a871e463bca091e6c9310062c639ea1350e010e1edba8e073
5
5
  SHA512:
6
- metadata.gz: d246c89ce9474146caf1a31759e898343fffaa36d5c08139e277e8b302a3dfbb3a796b34bfacc47edbb2b34a90afd0332b3477114c93085682e2eeb1fb17db7b
7
- data.tar.gz: 978b2e1d3b54ed04a58a289ce0aef61e84ee8d2eee4d4285f46be421c15d8c387b6697fc5d4fa3247cd4203a06477eb8ef7cd5b5e3b5a8f361dc559f40d27a56
6
+ metadata.gz: 70ef607f2ecc4b24d0b954ba320fb0d61e357a4403c8b2b1253eaf28e3d2c1e677f46926e074f923fe9a1f3552f6c678ec59bee085b770c85c085975a27a48bf
7
+ data.tar.gz: f469721246b7a276e7ab028d2d45ef5a6b51840bdf5e2aa5f8a2baf5fe48d3b4fefcb1330d182234f7e93e70a9ee0b496c5970ef115354326c98242d1cc78ef8
@@ -2,6 +2,7 @@ require 'sinatra'
2
2
  require 'active_record'
3
3
  require 'active_support/hash_with_indifferent_access'
4
4
  require 'upfluence/http/endpoint/validation_error'
5
+ require 'upfluence/mixin/strong_parameters'
5
6
 
6
7
  module Upfluence
7
8
  module HTTP
@@ -99,6 +100,16 @@ module Upfluence
99
100
  Sinatra::Base.error ActiveRecord::RecordInvalid do |e|
100
101
  [422, Base::Exceptions::ValidationError.from_model(e.record).to_json]
101
102
  end
103
+
104
+ Sinatra::Base.error Upfluence::Mixin::StrongParameters::ParameterMissing do |e|
105
+ [
106
+ 400,
107
+ {
108
+ error: 'missing_parameter',
109
+ param: e.param
110
+ }.to_json
111
+ ]
112
+ end
102
113
  end
103
114
  end
104
115
  end
@@ -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
@@ -1,5 +1,5 @@
1
1
  module Upfluence
2
2
  module Utils
3
- VERSION = '0.9.3'.freeze
3
+ VERSION = '0.10.1'.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.3
4
+ version: 0.10.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Upfluence
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-02-15 00:00:00.000000000 Z
11
+ date: 2021-09-30 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