oxy 0.1.6 → 0.1.7

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
  SHA1:
3
- metadata.gz: 1dc029fabf7f3300afc7aa8156da83ab10dba4f1
4
- data.tar.gz: c7df0a15e2dffafbe8c0e2d854a43879825bc030
3
+ metadata.gz: 9784707b90cf512ed97acba79d0d29d9f0070c69
4
+ data.tar.gz: d7d65afac275082ca68af9c34cb4f3f5535aca28
5
5
  SHA512:
6
- metadata.gz: c90f66c4e53db9c2af996b8266125976456d0329fe6674cc2bb9c270d83b4d8f959573719cc9637f3e2c334e712663baf0ed9081e2f2771304c074742edd0125
7
- data.tar.gz: f117738dc8f0c9b86ca9a537968abdcf842fa68d9a19361af1846c268617f3f0158fdaf5140c72a11d6e47f30dd56930e5203b6d710f2671ceedc81605a9890a
6
+ metadata.gz: da49d443e355df2bc01a9c08929e7d9d43c07ba576d500c75e75be5fe9a2a44b362260f33442c4c90b6a544ddd72ac7d4e431ed5d1491a75fdfaf1dbbd8bba77
7
+ data.tar.gz: 8a853e8723e0c1779b91ad7d1bc8cb97fbea225f023d62ddc1166a4c24107f027d5c1d2cbec189fe8d533e741ff456de18ad8aabe7c8455ccc670ab26610859d
@@ -11,6 +11,8 @@ class Oxy::RSVP
11
11
  def initialize(app, logger = $stderr)
12
12
  @app = app
13
13
  @logger = logger
14
+ # middleware to deflect abusive clients, 10/90 rps
15
+ @deflect = Rack::Deflect.new(app, :log => logger, :request_threshold => 10, :interval => 90, :log_format => "[Rack::Deflect]: (%s) ~> %s")
14
16
  end
15
17
 
16
18
  # Middleware's entry point
@@ -18,6 +20,9 @@ class Oxy::RSVP
18
20
  # instantiate the request object
19
21
  req = Rack::Request.new(env)
20
22
  if req.path == "/rsvp" && req.post?
23
+ # first ask deflect layer for permission to process the request
24
+ resp = @deflect.call(env)
25
+ return resp if forbidden(resp)
21
26
  # enqueue background processing for valid submissions only
22
27
  Threaded.enqueue(Subscribe, req.POST, @logger) if valid_form(req.POST)
23
28
  # redirect anyways
@@ -28,6 +33,11 @@ class Oxy::RSVP
28
33
  end
29
34
 
30
35
  private
36
+ # simple helper to find out whether the request is forbidden or not
37
+ def forbidden(resp)
38
+ resp[0] == 403
39
+ end
40
+
31
41
  # only request with eligible form fields are valid
32
42
  def valid_form(form)
33
43
  unless form.all? { |key, _| ELIGIBLE_FORMS_FIELDS.include?(key) }
@@ -1,3 +1,3 @@
1
1
  module Oxy
2
- VERSION = "0.1.6"
2
+ VERSION = "0.1.7"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: oxy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 0.1.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pavel Tsurbeleu
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-11-15 00:00:00.000000000 Z
11
+ date: 2017-11-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack