Class: GraphAttack::RateLimiter
- Inherits:
-
Object
- Object
- GraphAttack::RateLimiter
- Defined in:
- lib/graph_attack/rate_limiter.rb
Overview
Query analyser you can add to your GraphQL schema to limit calls by IP.
ApplicationSchema = GraphQL::Schema.define do
query_analyzer GraphAttack::RateLimiter.new
end
Defined Under Namespace
Classes: Error, RateLimited
Instance Method Summary collapse
- #call(memo, visit_type, irep_node) ⇒ Object
- #final_value(memo) ⇒ Object
- #initial_value(query) ⇒ Object
-
#initialize(redis_client: Redis.new) ⇒ RateLimiter
constructor
A new instance of RateLimiter.
Constructor Details
#initialize(redis_client: Redis.new) ⇒ RateLimiter
Returns a new instance of RateLimiter.
15 16 17 |
# File 'lib/graph_attack/rate_limiter.rb', line 15 def initialize(redis_client: Redis.new) @redis_client = redis_client end |
Instance Method Details
#call(memo, visit_type, irep_node) ⇒ Object
26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/graph_attack/rate_limiter.rb', line 26 def call(memo, visit_type, irep_node) if rate_limited_node?(visit_type, irep_node) data = rate_limit_data(irep_node) memo[:query_rate_limits].push(data) increment_rate_limit(memo[:ip], data[:key]) end memo end |
#final_value(memo) ⇒ Object
38 39 40 |
# File 'lib/graph_attack/rate_limiter.rb', line 38 def final_value(memo) handle_exceeded_calls_on_queries(memo) end |
#initial_value(query) ⇒ Object
19 20 21 22 23 24 |
# File 'lib/graph_attack/rate_limiter.rb', line 19 def initial_value(query) { ip: query.context[:ip], query_rate_limits: [], } end |