class Griddler::Ses::Middleware

Public Class Methods

new(app) click to toggle source
# File lib/griddler/ses/middleware.rb, line 4
def initialize(app)
  @app = app
end

Public Instance Methods

call(env) click to toggle source
# File lib/griddler/ses/middleware.rb, line 8
def call(env)
  # a bug on the AWS side doesn't set the content type to application/json type properly,
  # so we have to intercept and do this in order for Griddler's controller to correctly
  # parse the parameters (see https://forums.aws.amazon.com/thread.jspa?messageID=418160)
  if is_griddler_request?(env) && is_aws_sns_request?(env)
    env['CONTENT_TYPE'] = 'application/json; charset=UTF-8'
  end

  @app.call(env)
end

Private Instance Methods

griddler_path() click to toggle source
# File lib/griddler/ses/middleware.rb, line 20
def griddler_path
  @griddler_path ||= Rails.application.routes.url_helpers.url_for(controller: 'griddler/emails', action: 'create', only_path: true)
end
is_aws_sns_request?(request) click to toggle source
# File lib/griddler/ses/middleware.rb, line 28
def is_aws_sns_request?(request)
  request['HTTP_X_AMZ_SNS_MESSAGE_TYPE'].present?
end
is_griddler_request?(request) click to toggle source
# File lib/griddler/ses/middleware.rb, line 24
def is_griddler_request?(request)
  request['REQUEST_PATH'] == griddler_path
end