Sha256: d238a73003d0bcdbcbca6ae9e393160502b22611f4d831e5c1ffcc842748aacb

Contents?: true

Size: 1.1 KB

Versions: 1

Compression:

Stored size: 1.1 KB

Contents

require "base64"

module Nexaas
  module Throttle
    class Guardian
      def initialize(request, configuration)
        @request = request
        @token = configuration.request_identifier.new(request).token
        @ignored_user_agents = configuration.ignored_user_agents
      end

      def throttle!
        validate { token }
      end

      def track!
        validate { true }
      end

      private

      attr_reader :request, :token, :ignored_user_agents

      def validate
        return if ignore_user_agents? || assets? || token.blank?
        request.env["nexaas.token"] = token
        yield if block_given?
      end

      def assets?
        path = request.path
        path.match(/\/assets/).present? || path.match(extensions_regexp).present?
      end

      def extensions_regexp
        @assets_extensions ||= begin
          extensions = %w(css js png jpg gif)
          /\.(#{extensions.join("|")})/
        end
      end

      def ignore_user_agents?
        ignored_user_agents && !ignored_user_agents.map { |regexp| regexp.match(request.user_agent) }.compact.blank?
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
nexaas-throttle-2.0.0 lib/nexaas/throttle/guardian.rb