class FaradayMiddleware::Reddit::Modhash

Middleware that keeps track of and sets modhash-related HTTP headers.

Reddit uses modhashes as a form of XSS protection and requires them for most POST and PUT requests. Modhashes are currently provided in response to listing GET requests.

Public Class Methods

new(app, options = nil) click to toggle source
Calls superclass method
# File lib/faraday_middleware/reddit/use/modhash.rb, line 15
def initialize(app, options = nil)
  super(app)
  @options = options || {}
  @modhash = @options[:modhash]
end

Public Instance Methods

call(env) click to toggle source
# File lib/faraday_middleware/reddit/use/modhash.rb, line 21
def call(env)
  # Modhash unnecessary when using OAuth.
  return @app.call(env) if env[:request_headers]['Authorization']

  @modhash = env[:modhash] if env[:modhash]
  env[:request_headers]['X-Modhash'] = @modhash if @modhash
  @app.call(env).on_complete do |response_env|
    update_modhash(response_env)
  end
end
update_modhash(env) click to toggle source
# File lib/faraday_middleware/reddit/use/modhash.rb, line 32
def update_modhash(env)
  modhash = extract_modhash(env)
  @modhash = modhash if modhash
rescue JSON::JSONError
  # Ignore -- modhash can be acquired lazily.
end