class StackMob::Middleware::Proxy
Constants
- EXCLUDED_HEADERS
- HEADER_NAME
- LEGACY_RACK_ENV_NAME
- RACK_ENV_NAME
- STACKMOB_FORWARDED_HOST_ENV
- STACKMOB_FORWARDED_PORT_ENV
- VALID_HEADER_VALUES
Public Class Methods
new(app)
click to toggle source
# File lib/stackmob/middleware/proxy.rb, line 31 def initialize(app) @app = app end
Public Instance Methods
call(env)
click to toggle source
Calls superclass method
# File lib/stackmob/middleware/proxy.rb, line 35 def call(env) if VALID_HEADER_VALUES.include?(env[RACK_ENV_NAME]) || env['PATH_INFO'] =~ /^\/?.*\/accessToken/ super(env) elsif VALID_HEADER_VALUES.include?(env[LEGACY_RACK_ENV_NAME]) req = ::Rack::Request.new(env) method = http_method(env) headers = http_headers(env) params = [:put,:post].include?(method) ? req.body : req.query_string response = client.request(method, :api, env['PATH_INFO'], params, true, headers) [response.code.to_i, response.to_hash, response.body] else @app.call(env) end end
http_headers(env)
click to toggle source
# File lib/stackmob/middleware/proxy.rb, line 73 def http_headers(env) headers = {} for headerArr in env.select { |k, v| k.start_with? 'HTTP_' } if !EXCLUDED_HEADERS.include?(headerArr[0]) headers[normalize(headerArr[0])] = headerArr[1] end end headers["Accept"] = "application/json" headers end
http_method(env)
click to toggle source
# File lib/stackmob/middleware/proxy.rb, line 69 def http_method(env) env['REQUEST_METHOD'].downcase.to_sym end
normalize(key)
click to toggle source
# File lib/stackmob/middleware/proxy.rb, line 84 def normalize(key) key.sub('HTTP_', '').split('_').map! { |p| p.downcase }.join("-") end
rewrite_env(env)
click to toggle source
# File lib/stackmob/middleware/proxy.rb, line 52 def rewrite_env(env) env[STACKMOB_FORWARDED_HOST_ENV] = "127.0.0.1" env[STACKMOB_FORWARDED_PORT_ENV] = env['SERVER_PORT'] env['HTTP_HOST'] = StackMob.plain_proxy_host if StackMob.plain_proxy_host != ENV['STACKMOB_DEV_URL'] # rewrite port for api.stackmob.com env['SERVER_PORT'] = 80 end env end
Private Instance Methods
client()
click to toggle source
# File lib/stackmob/middleware/proxy.rb, line 64 def client @client ||= StackMob::Client.new(StackMob.dev_url, StackMob.app_name, StackMob::SANDBOX, StackMob.key, StackMob.secret) end