class Wifidiag::App

Constants

CONTEXT_RACK_ENV_NAME
TRUSTED_IPS

Public Class Methods

initialize_context(config) click to toggle source
# File lib/wifidiag/app.rb, line 18
def self.initialize_context(config)
  {
    config: config,
    revision: self.revision(),
  }
end
rack(config={}) click to toggle source
# File lib/wifidiag/app.rb, line 34
def self.rack(config={})
  klass = App

  context = initialize_context(config)
  app = lambda { |env|
    env[CONTEXT_RACK_ENV_NAME] = context
    klass.call(env)
  }
end
revision() click to toggle source
# File lib/wifidiag/app.rb, line 25
def self.revision
  path = File.join(__dir__, '..', '..', 'REVISION')
  if File.exist?(path)
    File.read(path).chomp
  else
    nil
  end
end

Public Instance Methods

client_ip() click to toggle source
# File lib/wifidiag/app.rb, line 62
def client_ip
  return conf[:dummy_ip] if conf[:dummy_ip]
  @client_ip ||= begin
    remote_addrs = request.get_header('REMOTE_ADDR')&.split(/,\s*/)
    filtered_remote_addrs = remote_addrs.grep_v(TRUSTED_IPS)

    if filtered_remote_addrs.empty? && request.get_header('HTTP_X_FORWARDED_FOR')
      forwarded_ips = request.get_header('HTTP_X_FORWARDED_FOR')&.split(/,\s*/)
      filtered_forwarded_ips = forwarded_ips.grep_v(TRUSTED_IPS)

      filtered_forwarded_ips.empty? ? forwarded_ips.first : remote_addrs.first
    else
      filtered_remote_addrs.first || remote_addrs.first
    end
  end
end
collector() click to toggle source
# File lib/wifidiag/app.rb, line 53
def collector
  conf.collector
end
conf() click to toggle source
# File lib/wifidiag/app.rb, line 49
def conf
  context[:config]
end
context() click to toggle source
# File lib/wifidiag/app.rb, line 45
def context
  request.env[CONTEXT_RACK_ENV_NAME]
end
data() click to toggle source
# File lib/wifidiag/app.rb, line 79
def data
  begin
    @data = JSON.parse(request.body.tap(&:rewind).read)
  rescue JSON::ParserError
    halt 400, '{"error": "invalid_payload"}'
  end
end
revision() click to toggle source
# File lib/wifidiag/app.rb, line 57
def revision
  context[:revision]
end