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.
12 13 14 |
# File 'lib/graph_attack/rate_limiter.rb', line 12 def initialize(redis_client: Redis.new) @redis_client = redis_client end |
Instance Method Details
#call(memo, visit_type, irep_node) ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/graph_attack/rate_limiter.rb', line 23 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
35 36 37 |
# File 'lib/graph_attack/rate_limiter.rb', line 35 def final_value(memo) handle_exceeded_calls_on_queries(memo) end |
#initial_value(query) ⇒ Object
16 17 18 19 20 21 |
# File 'lib/graph_attack/rate_limiter.rb', line 16 def initial_value(query) { ip: query.context[:ip], query_rate_limits: [], } end |