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 +4 -4
- data/lib/oxy/middleware/rsvp.rb +10 -0
- data/lib/oxy/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9784707b90cf512ed97acba79d0d29d9f0070c69
|
4
|
+
data.tar.gz: d7d65afac275082ca68af9c34cb4f3f5535aca28
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: da49d443e355df2bc01a9c08929e7d9d43c07ba576d500c75e75be5fe9a2a44b362260f33442c4c90b6a544ddd72ac7d4e431ed5d1491a75fdfaf1dbbd8bba77
|
7
|
+
data.tar.gz: 8a853e8723e0c1779b91ad7d1bc8cb97fbea225f023d62ddc1166a4c24107f027d5c1d2cbec189fe8d533e741ff456de18ad8aabe7c8455ccc670ab26610859d
|
data/lib/oxy/middleware/rsvp.rb
CHANGED
@@ -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) }
|
data/lib/oxy/version.rb
CHANGED
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.
|
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-
|
11
|
+
date: 2017-11-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rack
|