ahoy_matey 1.2.2 → 1.3.0

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: d6686254ab1f5bb79219bdb93194e2e3ddb9ddd8
4
- data.tar.gz: afd9cb6035e939db2c60b881b5a80a2ea0bb407e
3
+ metadata.gz: a0f2bb6fef22274ec84a1e02664f8a1baec9b590
4
+ data.tar.gz: 5e2bfe3a50b214345c0f375f00efda90fa47de35
5
5
  SHA512:
6
- metadata.gz: 504dd73058c78a635072af48ca326f623a335af74d5cbfc7636ccd0c2d5a0ab12304cee3cc01d51f11829aa80200dada366734d7f55d1b99946ff0d49b072bb2
7
- data.tar.gz: f1664a981c88b2896e856ec8bcdba0e4b1e94e26b93f290b1b495ad72166787952965ff5566e5325eb0be59ddcf8f70ebc4cdeeccf40cfa8614475fa4c5e35ae
6
+ metadata.gz: b6e677762054719a8834731d1f25d9b5aa9015d9a0f62e8980458916cb1174e51ef82ca7a8606e98da9bacf40f901394b170f80891b6a99b07cee4dc05a4f788
7
+ data.tar.gz: 605aa3c66d858c7e164496785bb42f4dea7d00c4ab3bf5166188245f026c549cd0cbb16c21c2fdbcecb27305e87aa3b8efcb44a694a8140fdee2b71141d2833f
@@ -1,3 +1,8 @@
1
+ ## 1.3.0
2
+
3
+ - Added throttling
4
+ - Added `max_content_length` and `max_events_per_request`
5
+
1
6
  ## 1.2.2
2
7
 
3
8
  - Fixed issue with latest version of `browser` gem
@@ -27,6 +27,7 @@ Gem::Specification.new do |spec|
27
27
  spec.add_dependency "request_store"
28
28
  spec.add_dependency "uuidtools"
29
29
  spec.add_dependency "errbase"
30
+ spec.add_dependency "rack-attack"
30
31
 
31
32
  spec.add_development_dependency "bundler", "~> 1.5"
32
33
  spec.add_development_dependency "rake"
@@ -4,12 +4,23 @@ module Ahoy
4
4
  filters = _process_action_callbacks.map(&:filter) - [:load_authlogic]
5
5
  if respond_to?(:skip_action)
6
6
  skip_action *filters
7
+ before_action :verify_request_size
7
8
  else
8
9
  skip_filter *filters
10
+ before_filter :verify_request_size
9
11
  end
10
12
 
13
+ protected
14
+
11
15
  def ahoy
12
16
  @ahoy ||= Ahoy::Tracker.new(controller: self, api: true)
13
17
  end
18
+
19
+ def verify_request_size
20
+ if request.content_length > Ahoy.max_content_length
21
+ logger.info "[ahoy] Payload too large"
22
+ render text: "Payload too large\n", status: 413
23
+ end
24
+ end
14
25
  end
15
26
  end
@@ -14,7 +14,7 @@ module Ahoy
14
14
  end
15
15
  end
16
16
 
17
- events.each do |event|
17
+ events.first(Ahoy.max_events_per_request).each do |event|
18
18
  time = Time.zone.parse(event["time"]) rescue nil
19
19
 
20
20
  # timestamp is deprecated
@@ -62,6 +62,21 @@ module Ahoy
62
62
  mattr_accessor :geocode
63
63
  self.geocode = true
64
64
 
65
+ mattr_accessor :max_content_length
66
+ self.max_content_length = 8192
67
+
68
+ mattr_accessor :max_events_per_request
69
+ self.max_events_per_request = 10
70
+
71
+ mattr_accessor :throttle
72
+ self.throttle = true
73
+
74
+ mattr_accessor :throttle_limit
75
+ self.throttle_limit = 20
76
+
77
+ mattr_accessor :throttle_period
78
+ self.throttle_period = 1.minute
79
+
65
80
  def self.ensure_uuid(id)
66
81
  valid = UUIDTools::UUID.parse(id) rescue nil
67
82
  if valid
@@ -1,7 +1,12 @@
1
1
  module Ahoy
2
2
  class Engine < ::Rails::Engine
3
- initializer "ahoy.middleware", after: "sprockets.environment" do
3
+ initializer "ahoy.middleware", after: "sprockets.environment" do |app|
4
4
  Rails::Rack::Logger.send(:prepend, Ahoy::LogSilencer) if Ahoy.quiet
5
+
6
+ if Ahoy.throttle
7
+ require "ahoy/throttle"
8
+ app.middleware.use Ahoy::Throttle
9
+ end
5
10
  end
6
11
  end
7
12
  end
@@ -0,0 +1,17 @@
1
+ require "rack/attack"
2
+
3
+ module Ahoy
4
+ class Throttle < Rack::Attack
5
+ throttle("ahoy/ip", limit: Ahoy.throttle_limit, period: Ahoy.throttle_period) do |req|
6
+ if req.path.start_with?("/ahoy/")
7
+ req.ip
8
+ end
9
+ end
10
+
11
+ def_delegators self, :whitelisted?, :blacklisted?, :throttled?, :tracked?
12
+
13
+ def self.throttled_response
14
+ Rack::Attack.throttled_response
15
+ end
16
+ end
17
+ end
@@ -1,3 +1,3 @@
1
1
  module Ahoy
2
- VERSION = "1.2.2"
2
+ VERSION = "1.3.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ahoy_matey
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.2
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Kane
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-03-06 00:00:00.000000000 Z
11
+ date: 2016-03-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -136,6 +136,20 @@ dependencies:
136
136
  - - ">="
137
137
  - !ruby/object:Gem::Version
138
138
  version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: rack-attack
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :runtime
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
139
153
  - !ruby/object:Gem::Dependency
140
154
  name: bundler
141
155
  requirement: !ruby/object:Gem::Requirement
@@ -217,6 +231,7 @@ files:
217
231
  - lib/ahoy/stores/log_store.rb
218
232
  - lib/ahoy/stores/mongoid_store.rb
219
233
  - lib/ahoy/subscribers/active_record.rb
234
+ - lib/ahoy/throttle.rb
220
235
  - lib/ahoy/tracker.rb
221
236
  - lib/ahoy/version.rb
222
237
  - lib/ahoy/visit_properties.rb