Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 11 additions & 34 deletions .rubocop.yml
Original file line number Diff line number Diff line change
@@ -1,47 +1,24 @@
AllCops:
TargetRubyVersion: 2.5.1
# Rails: true
# Include:
# - '**/Rakefile'
# - '**/config.ru'
TargetRubyVersion: 3.1.4
NewCops: enable
Exclude:
- 'doc/**/*'
- 'tmp/**/*'
- 'bin/**/*'
- 'db/**/*'
- 'test/**/*'
- 'config/**/*'
- 'script/**/*'
- 'vendor/**/*'
- 'spec/**/*'
- !ruby/regexp /old_and_unused\.rb$/

# Style/WhileUntilModifier:
# MaxLineLength: 160

# Style/IfUnlessModifier:
# MaxLineLength: 160

Metrics/LineLength:
Max: 160
Gemspec/DevelopmentDependencies:
EnforcedStyle: gemspec

Metrics/AbcSize:
Max: 120

Metrics/MethodLength:
CountComments: false # count full line comments?
Max: 120

NumericPredicate:
EnforcedStyle: comparison
Max: 20

Style/Documentation:
Metrics/CollectionLiteralLength:
Enabled: false

Metrics/ModuleLength:
Exclude:
- 'lib/rack/cloudflare/countries.rb'

Naming/FileName:
Exclude:
- 'rack-cloudflare.gemspec'
RSpec/ExampleLength:
Max: 15

Style/Documentation:
Enabled: false
1 change: 1 addition & 0 deletions .ruby-version
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
3.1.4
4 changes: 2 additions & 2 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
sudo: false
language: ruby
rvm:
- 2.5.1
before_install: gem install bundler -v 1.16.2
- 3.1.4
before_install: gem install bundler -v 2.3.26
5 changes: 3 additions & 2 deletions Rakefile
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ require 'rubocop/rake_task'
require 'rubycritic/rake_task'

RuboCop::RakeTask.new do |task|
task.requires << 'rubocop-rake'
task.requires << 'rubocop-rspec'
end

Expand All @@ -27,5 +28,5 @@ end

RSpec::Core::RakeTask.new(:spec)

# task default: %w[rubocop:auto_correct rubycritic spec]
task default: %w[rubocop:auto_correct spec]
# task default: %w[rubocop:autocorrect rubycritic spec]
task default: %w[rubocop:autocorrect spec]
17 changes: 9 additions & 8 deletions data/ips_v4.txt
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
173.245.48.0/20
103.21.244.0/22
103.22.200.0/22
103.31.4.0/22
104.16.0.0/12
108.162.192.0/18
131.0.72.0/22
141.101.64.0/18
162.158.0.0/15
172.64.0.0/13
173.245.48.0/20
188.114.96.0/20
108.162.192.0/18
190.93.240.0/20
188.114.96.0/20
197.234.240.0/22
198.41.128.0/17
198.41.128.0/17
162.158.0.0/15
104.16.0.0/13
104.24.0.0/14
172.64.0.0/13
131.0.72.0/22
7 changes: 4 additions & 3 deletions data/ips_v6.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
2400:cb00::/32
2405:b500::/32
2606:4700::/32
2803:f800::/32
2c0f:f248::/32
2a06:98c0::/29
2405:b500::/32
2405:8100::/32
2a06:98c0::/29
2c0f:f248::/32
4 changes: 2 additions & 2 deletions lib/rack/cloudflare/ips.rb
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@ def update!
def fetch(url)
Cloudflare.info "[#{name}] Updating Cloudflare IP list: #{url.inspect}"
parse URI(url).read
rescue OpenURI::HTTPError => ex
Cloudflare.error "[#{name}] #{ex.class.name} fetching #{url.inspect}: #{ex.message}"
rescue OpenURI::HTTPError => e
Cloudflare.error "[#{name}] #{e.class.name} fetching #{url.inspect}: #{e.message}"
[]
end

Expand Down
4 changes: 3 additions & 1 deletion lib/rack/cloudflare/middleware/rewrite_headers.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,9 @@ def initialize(app)
def call(env)
headers = Headers.new(env)

Cloudflare.warn "[#{self.class.name}] Untrusted Network (REMOTE_ADDR): #{headers.target_headers}" unless headers.trusted?
unless headers.trusted?
Cloudflare.warn "[#{self.class.name}] Untrusted Network (REMOTE_ADDR): #{headers.target_headers}"
end
Cloudflare.debug "[#{self.class.name}] Target Headers: #{headers.target_headers}"
Cloudflare.debug "[#{self.class.name}] Rewritten Headers: #{headers.rewritten_target_headers}"

Expand Down
2 changes: 1 addition & 1 deletion lib/rack/cloudflare/version.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@

module Rack
class Cloudflare
VERSION = '1.0.5'
VERSION = '1.0.6'
end
end
10 changes: 7 additions & 3 deletions rack-cloudflare.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ Gem::Specification.new do |spec|
spec.version = Rack::Cloudflare::VERSION
spec.authors = ['Joel Van Horn']
spec.email = ['joel@joelvanhorn.com']
spec.required_ruby_version = '>= 3.1.4'

spec.summary = 'Deal with Cloudflare features in Rack-based apps.'
spec.description = 'Deal with Cloudflare features in Rack-based apps.'
Expand All @@ -23,9 +24,12 @@ Gem::Specification.new do |spec|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
spec.require_paths = ['lib']

spec.add_development_dependency 'bundler', '~> 1.16'
spec.add_development_dependency 'rake', '~> 10.0'
spec.add_development_dependency 'rspec', '~> 3.0'
spec.add_development_dependency 'bundler', '~> 2.5'
spec.add_development_dependency 'rake', '~> 13.1'
spec.add_development_dependency 'rspec', '~> 3.12'
spec.add_development_dependency 'rubocop'
spec.add_development_dependency 'rubocop-rake'
spec.add_development_dependency 'rubocop-rspec'
spec.add_development_dependency 'rubycritic'
spec.metadata['rubygems_mfa_required'] = 'true'
end
14 changes: 8 additions & 6 deletions spec/rack/cloudflare_spec.rb
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
# frozen_string_literal: true

RSpec.describe Rack::Cloudflare do
let!(:default_message) { Rack::Cloudflare::Middleware::AccessControl.message }
let!(:default_response) { Rack::Cloudflare::Middleware::AccessControl.response }

before(:each) do
before do
Rack::Cloudflare::Headers.backup = true
Rack::Cloudflare::Headers.remove_proxies = false
Rack::Cloudflare::Headers.original_remote_addr = 'ORIGINAL_REMOTE_ADDR'
Expand Down Expand Up @@ -82,7 +84,7 @@
)
end

it "removes proxies when Headers.remove_proxies = true" do
it 'removes proxies when Headers.remove_proxies = true' do
env = {
'REMOTE_ADDR' => '103.21.244.1',
'HTTP_CF_CONNECTING_IP' => '1.2.3.4',
Expand Down Expand Up @@ -204,24 +206,24 @@
'HTTP_X_FORWARDED_FOR' => '74.64.167.164, 173.245.52.147'
)
end

it 'blocks access for non-Cloudflare networks with 404 preset' do
env = { 'REMOTE_ADDR' => '127.0.0.1' }
Rack::Cloudflare::Middleware::AccessControl.as(:not_found)
middleware = Rack::Cloudflare::Middleware::AccessControl.new(->(*) { 'success' })

expect(middleware.call(env)).to eq([404, { 'Content-Type' => 'text/plain' }, ["Not Found\n"]])
end

it 'blocks access for non-Cloudflare networks with 404 preset and custom message' do
env = { 'REMOTE_ADDR' => '127.0.0.1' }
Rack::Cloudflare::Middleware::AccessControl.as(:not_found)
Rack::Cloudflare::Middleware::AccessControl.message = "Oops..."
Rack::Cloudflare::Middleware::AccessControl.message = 'Oops...'
middleware = Rack::Cloudflare::Middleware::AccessControl.new(->(*) { 'success' })

expect(middleware.call(env)).to eq([404, { 'Content-Type' => 'text/plain' }, ["Oops...\n"]])
end

it 'blocks access for non-Cloudflare networks with 404 preset and custom message keyword' do
env = { 'REMOTE_ADDR' => '127.0.0.1' }
Rack::Cloudflare::Middleware::AccessControl.as(:not_found, message: 'Woah...')
Expand Down
2 changes: 2 additions & 0 deletions spec/spec_helper.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
# frozen_string_literal: true

require 'bundler/setup'
require 'rack/cloudflare'

Expand Down