Sha256: d394994202b6463cfe4999f0d1cf58e6c240274530cc48bcd8dc9dcae230ca2b

Contents?: true

Size: 1.23 KB

Versions: 1

Compression:

Stored size: 1.23 KB

Contents

class Bullhorn
  module Sender
    extend self

    def serialize(str)
      str # CGI.escape(Base64.encode64(str.to_json).strip)
    end

    def notify(exception, env)
      Net::HTTP.post_form(URI(url), {
        :api_key      => api_key,
        :message      => exception.message,
        :backtrace    => serialize(exception.backtrace),
        :env          => serialize(whitelist(env)),
        :request_body => serialize(whitelist(request_body(env)))
      })
    end

  protected
    def request_body(env)
      if io = env['rack.input']
        io.rewind if io.respond_to?(:rewind)
        io.read
      end
    rescue
      ""
    end

    def whitelist(str_or_hash)
      case str_or_hash
      when Hash
        str_or_hash.dup.tap do |h|
          h.keys.each do |key|
            if h[key].respond_to?(:gsub)
              h[key] = sanitize(h[key])
            else
              h[key] = h[key].inspect
            end
          end
        end

      when String
        sanitize(str_or_hash)
      end
    end

    def sanitize(str)
      str.dup.tap do |ret|
        @filters.each do |filter|
          ret.gsub!(Regexp.new(FILTERING % filter)) { |m|
            m.gsub($1, '[FILTERED]')
          }
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
bullhorn-0.0.1 lib/bullhorn/sender.rb