Sha256: 664358abfd36e76d334863dbab817bb736c9c480fa6d89353bab973c44d0aebf

Contents?: true

Size: 821 Bytes

Versions: 2

Compression:

Stored size: 821 Bytes

Contents

module JumpBack
  
  class RefererInterpreter
    
    def back?(request, options)
      has_referer?(request) ? is_local?(request, options) ? true : false : false
    end
    
    def has_referer?(request)
      !request.env["HTTP_REFERER"].blank? and request.env["HTTP_REFERER"] != request.env["REQUEST_URI"]
    end
    
    def is_local?(request, options)
      return true if options[:offsite]
      host = host(request.env["HTTP_REFERER"])
      !(host && host != request.host)
    end
    
    private
    
      def host(string)
        return URI.parse(string).host if uri? string
      end
    
      def uri?(string)
        uri = URI.parse(string)
        %w( http https ).include?(uri.scheme)
        rescue URI::BadURIError
        false
        rescue URI::InvalidURIError
        false
      end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
jump_back-0.2.1 lib/jump_back/referer_interpreter.rb
jump_back-0.1.1 lib/jump_back/referer_interpreter.rb