Module: GRApiManager

Defined in:
lib/gr_api_manager.rb

Defined Under Namespace

Modules: BodyParser, JWT, Validator Classes: FilePayload, RateLimiter, RouteGroup, Server

Class Method Summary collapse

Class Method Details

.extract_client_ip(request) ⇒ Object

Extracts the client IP from proxy headers (Cloudflare, X-Real-IP, X-Forwarded-For), falling back to request.ip or REMOTE_ADDR.



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/gr_api_manager.rb', line 18

def self.extract_client_ip(request)
  env = request.respond_to?(:env) ? request.env : request
  return (request.respond_to?(:ip) ? request.ip : '127.0.0.1') unless env.is_a?(Hash)

  if env['HTTP_CF_CONNECTING_IP'] && !env['HTTP_CF_CONNECTING_IP'].to_s.strip.empty?
    return env['HTTP_CF_CONNECTING_IP'].to_s.strip
  end

  if env['HTTP_X_REAL_IP'] && !env['HTTP_X_REAL_IP'].to_s.strip.empty?
    return env['HTTP_X_REAL_IP'].to_s.strip
  end

  if env['HTTP_X_FORWARDED_FOR'] && !env['HTTP_X_FORWARDED_FOR'].to_s.strip.empty?
    client = env['HTTP_X_FORWARDED_FOR'].to_s.split(',').first
    return client.strip if client && !client.strip.empty?
  end

  request.respond_to?(:ip) ? request.ip : (env['REMOTE_ADDR'] || '127.0.0.1')
end

.gb(n) ⇒ Object



14
# File 'lib/gr_api_manager.rb', line 14

def self.gb(n) = n * 1_024 * 1_024 * 1_024

.mb(n) ⇒ Object

Convenience size helpers — use in max_body_size:

GRApiManager.mb(50)   => 50 MB in bytes
GRApiManager.gb(2)    => 2 GB in bytes


13
# File 'lib/gr_api_manager.rb', line 13

def self.mb(n) = n * 1_024 * 1_024