oxy 0.1.6 → 0.1.7

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
  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