Class: RailsApiGuard::Middleware::RateLimiter

Inherits:
Object
  • Object
show all
Defined in:
lib/rails_api_guard/middleware/rate_limiter.rb

Instance Method Summary collapse

Constructor Details

#initialize(app) ⇒ RateLimiter

Returns a new instance of RateLimiter.



4
5
6
7
8
9
# File 'lib/rails_api_guard/middleware/rate_limiter.rb', line 4

def initialize(app)
    @app = app
    @limit = RailsApiGuard.config.limit
    @expiry_time = RailsApiGuard.config.expiry_time
    @rate_limit_store = Services::RateLimitStore.new(@limit, @expiry_time)
end

Instance Method Details

#call(env) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/rails_api_guard/middleware/rate_limiter.rb', line 11

def call(env)
    request = Rack::Request.new(env)
    
    if Services::ExclusionChecker.excluded_endpoint?(request.path)
        Rails.logger.info "Skipping rate limiting for #{request.path}"
        return @app.call(env)
    end
   
    ip = request.ip
    
    
    if @rate_limit_store.increment_and_check(ip, request.path)
        Rails.logger.info "Rate limiting exceeded!!!"
        Services::SlackNotifier.notify("🚨 Rate limit exceeded for #{ip}!")
        return too_many_requests
    end


    @app.call(env)
end