cloudflare-rails 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/.circleci/config.yml +57 -0
- data/.rubocop.yml +5 -0
- data/.rubocop_airbnb.yml +2 -0
- data/.rubocop_todo.yml +39 -0
- data/README.md +4 -5
- data/cloudflare-rails.gemspec +9 -5
- data/lib/cloudflare/rails.rb +0 -2
- data/lib/cloudflare/rails/railtie.rb +8 -13
- data/lib/cloudflare/rails/version.rb +1 -1
- metadata +55 -23
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 4af88462102fa96a7026865456538d3273dbed25b27571be2a1ff35d85a571d0
|
4
|
+
data.tar.gz: d0822418ace7ea370d89465cfae344ee03915bde1cd1fa6509474608f2262c30
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cb376a89e2afe44c37d7dcacfa983ed7654d9be50aab5a110527003d3433a75935ed0988cea31a4b90dd6c9bbef99ee6ff080de548fe40ad511c422e1972684e
|
7
|
+
data.tar.gz: 16fed68fb3b86e05da7317208544bb26b51271848e93b159db064ec220264f2e8efae9de0e1fd6ad9063ed572364155e73f26860586738abb66c243a5d55dfbc
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# Ruby CircleCI 2.0 configuration file
|
2
|
+
#
|
3
|
+
# Check https://circleci.com/docs/2.0/language-ruby/ for more details
|
4
|
+
#
|
5
|
+
version: 2
|
6
|
+
jobs:
|
7
|
+
build:
|
8
|
+
docker:
|
9
|
+
# specify the version you desire here
|
10
|
+
- image: circleci/ruby:2.5.1
|
11
|
+
|
12
|
+
# Specify service dependencies here if necessary
|
13
|
+
# CircleCI maintains a library of pre-built images
|
14
|
+
# documented at https://circleci.com/docs/2.0/circleci-images/
|
15
|
+
# - image: circleci/postgres:9.4
|
16
|
+
|
17
|
+
working_directory: ~/repo
|
18
|
+
|
19
|
+
steps:
|
20
|
+
- checkout
|
21
|
+
|
22
|
+
# Download and cache dependencies
|
23
|
+
- restore_cache:
|
24
|
+
keys:
|
25
|
+
- v1-dependencies-{{ checksum "cloudflare-rails.gemspec" }}
|
26
|
+
# fallback to using the latest cache if no exact match is found
|
27
|
+
- v1-dependencies-
|
28
|
+
|
29
|
+
- run:
|
30
|
+
name: install dependencies
|
31
|
+
command: |
|
32
|
+
bundle install --jobs=4 --retry=3 --path vendor/bundle
|
33
|
+
|
34
|
+
- save_cache:
|
35
|
+
paths:
|
36
|
+
- ./vendor/bundle
|
37
|
+
key: v1-dependencies-{{ checksum "Gemfile.lock" }}
|
38
|
+
|
39
|
+
# run tests!
|
40
|
+
- run:
|
41
|
+
name: run tests
|
42
|
+
command: |
|
43
|
+
mkdir /tmp/test-results
|
44
|
+
TEST_FILES="$(circleci tests glob "spec/**/*_spec.rb" | circleci tests split --split-by=timings)"
|
45
|
+
|
46
|
+
bundle exec rspec --format progress \
|
47
|
+
--format RspecJunitFormatter \
|
48
|
+
--out /tmp/test-results/rspec.xml \
|
49
|
+
--format progress \
|
50
|
+
$TEST_FILES
|
51
|
+
|
52
|
+
# collect reports
|
53
|
+
- store_test_results:
|
54
|
+
path: /tmp/test-results
|
55
|
+
- store_artifacts:
|
56
|
+
path: /tmp/test-results
|
57
|
+
destination: test-results
|
data/.rubocop.yml
ADDED
data/.rubocop_airbnb.yml
ADDED
data/.rubocop_todo.yml
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
# This configuration was generated by
|
2
|
+
# `rubocop --auto-gen-config`
|
3
|
+
# on 2018-06-03 21:15:22 -0700 using RuboCop version 0.52.1.
|
4
|
+
# The point is for the user to remove these configuration records
|
5
|
+
# one by one as the offenses are removed from the code base.
|
6
|
+
# Note that changes in the inspected code, or installation of new
|
7
|
+
# versions of RuboCop, may require this file to be generated again.
|
8
|
+
|
9
|
+
# Offense count: 4
|
10
|
+
# Cop supports --auto-correct.
|
11
|
+
Layout/MultilineBlockLayout:
|
12
|
+
Exclude:
|
13
|
+
- 'spec/cloudflare/rails_spec.rb'
|
14
|
+
|
15
|
+
# Offense count: 4
|
16
|
+
# Cop supports --auto-correct.
|
17
|
+
# Configuration parameters: EnforcedStyle, EnforcedStyleForEmptyBraces, SpaceBeforeBlockParameters.
|
18
|
+
# SupportedStyles: space, no_space
|
19
|
+
# SupportedStylesForEmptyBraces: space, no_space
|
20
|
+
Layout/SpaceInsideBlockBraces:
|
21
|
+
Exclude:
|
22
|
+
- 'spec/cloudflare/rails_spec.rb'
|
23
|
+
|
24
|
+
# Offense count: 4
|
25
|
+
# Cop supports --auto-correct.
|
26
|
+
# Configuration parameters: EnforcedStyle, ProceduralMethods, FunctionalMethods, IgnoredMethods.
|
27
|
+
# SupportedStyles: line_count_based, semantic, braces_for_chaining
|
28
|
+
# ProceduralMethods: benchmark, bm, bmbm, create, each_with_object, measure, new, realtime, tap, with_object
|
29
|
+
# FunctionalMethods: let, let!, subject, watch
|
30
|
+
# IgnoredMethods: lambda, proc, it
|
31
|
+
Style/BlockDelimiters:
|
32
|
+
Exclude:
|
33
|
+
- 'spec/cloudflare/rails_spec.rb'
|
34
|
+
|
35
|
+
# Offense count: 6
|
36
|
+
# Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
|
37
|
+
# URISchemes: http, https
|
38
|
+
Metrics/LineLength:
|
39
|
+
Max: 126
|
data/README.md
CHANGED
@@ -1,12 +1,11 @@
|
|
1
|
-
# Cloudflare::Rails [](https://badge.fury.io/rb/cloudflare-rails)
|
2
|
-
|
1
|
+
# Cloudflare::Rails [](https://badge.fury.io/rb/cloudflare-rails) [](https://circleci.com/gh/modosc/cloudflare-rails/tree/master)
|
3
2
|
This gem correctly configures Rails for [CloudFlare](https://www.cloudflare.com) so that `request.remote_ip` / `request.ip` both work correctly.
|
4
3
|
|
5
4
|
## Rails Compatibility
|
6
5
|
|
7
|
-
For Rails 5, use 0.2.x
|
6
|
+
For Rails 5, use >= `0.2.x`
|
8
7
|
|
9
|
-
For Rails 4.2, use 0.1.x
|
8
|
+
For Rails 4.2, use `0.1.x`
|
10
9
|
|
11
10
|
## Installation
|
12
11
|
|
@@ -31,7 +30,7 @@ This code will fetch CloudFlare's current [IPv4](https://www.cloudflare.com/ips-
|
|
31
30
|
You can configure the HTTP `timeout` and `expires_in` cache parameters inside of your rails config:
|
32
31
|
```
|
33
32
|
config.cloudflare.expires_in = 12.hours # default value
|
34
|
-
config.
|
33
|
+
config.cloudflare.timeout = 5.seconds # default value
|
35
34
|
```
|
36
35
|
|
37
36
|
## Alternatives
|
data/cloudflare-rails.gemspec
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# coding: utf-8
|
2
|
+
|
2
3
|
lib = File.expand_path('../lib', __FILE__)
|
3
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
5
|
require 'cloudflare/rails/version'
|
@@ -20,13 +21,16 @@ Gem::Specification.new do |spec|
|
|
20
21
|
spec.require_paths = ["lib"]
|
21
22
|
|
22
23
|
spec.add_development_dependency "bundler", "~> 1.10"
|
23
|
-
spec.add_development_dependency "rake", "~>
|
24
|
-
spec.add_development_dependency "
|
25
|
-
spec.add_development_dependency "rspec-rails"
|
26
|
-
spec.add_development_dependency "
|
24
|
+
spec.add_development_dependency "rake", "~> 12.3.1"
|
25
|
+
spec.add_development_dependency "rspec_junit_formatter", "~> 0.4.1"
|
26
|
+
spec.add_development_dependency "rspec-rails", "~> 3.7.2"
|
27
|
+
spec.add_development_dependency "rspec", "~> 3.7.0"
|
28
|
+
spec.add_development_dependency "rubocop-airbnb", "~> 1.0.0"
|
29
|
+
spec.add_development_dependency "webmock", "~> 3.4.2"
|
27
30
|
|
31
|
+
spec.add_dependency "httparty"
|
28
32
|
spec.add_dependency "rails", "~> 5.0"
|
29
|
-
|
33
|
+
|
30
34
|
|
31
35
|
# we need Module#prepend
|
32
36
|
spec.required_ruby_version = '>= 2.0'
|
data/lib/cloudflare/rails.rb
CHANGED
@@ -3,12 +3,11 @@ require "httparty"
|
|
3
3
|
module Cloudflare
|
4
4
|
module Rails
|
5
5
|
class Railtie < ::Rails::Railtie
|
6
|
-
|
7
6
|
# patch rack::request::helpers to use our cloudflare ips - this way request.ip is
|
8
7
|
# correct inside of rack and rails
|
9
8
|
module CheckTrustedProxies
|
10
9
|
def trusted_proxy?(ip)
|
11
|
-
::Rails.application.config.cloudflare.ips.any?{ |proxy| proxy === ip } || super
|
10
|
+
::Rails.application.config.cloudflare.ips.any? { |proxy| proxy === ip } || super
|
12
11
|
end
|
13
12
|
end
|
14
13
|
|
@@ -17,7 +16,6 @@ module Cloudflare
|
|
17
16
|
# patch ActionDispatch::RemoteIP to use our cloudflare ips - this way
|
18
17
|
# request.remote_ip is correct inside of rails
|
19
18
|
module RemoteIpProxies
|
20
|
-
|
21
19
|
def proxies
|
22
20
|
super + ::Rails.application.config.cloudflare.ips
|
23
21
|
end
|
@@ -33,8 +31,8 @@ module Cloudflare
|
|
33
31
|
|
34
32
|
class ResponseError < HTTParty::ResponseError; end
|
35
33
|
|
36
|
-
IPS_V4_URL = '/ips-v4'
|
37
|
-
IPS_V6_URL = '/ips-v6'
|
34
|
+
IPS_V4_URL = '/ips-v4'.freeze
|
35
|
+
IPS_V6_URL = '/ips-v6'.freeze
|
38
36
|
|
39
37
|
class << self
|
40
38
|
def ips_v6
|
@@ -48,19 +46,17 @@ module Cloudflare
|
|
48
46
|
def fetch(url)
|
49
47
|
resp = get url, timeout: ::Rails.application.config.cloudflare.timeout
|
50
48
|
if resp.success?
|
51
|
-
resp.body.split("\n").reject(&:blank?).map{|ip| IPAddr.new ip}
|
49
|
+
resp.body.split("\n").reject(&:blank?).map { |ip| IPAddr.new ip }
|
52
50
|
else
|
53
|
-
raise ResponseError
|
51
|
+
raise ResponseError, resp.response
|
54
52
|
end
|
55
53
|
end
|
56
54
|
|
57
55
|
def fetch_with_cache(type)
|
58
56
|
::Rails.cache.fetch("cloudflare-rails:#{type}", expires_in: ::Rails.application.config.cloudflare.expires_in) do
|
59
|
-
|
57
|
+
send type
|
60
58
|
end
|
61
59
|
end
|
62
|
-
|
63
|
-
|
64
60
|
end
|
65
61
|
end
|
66
62
|
|
@@ -68,8 +64,8 @@ module Cloudflare
|
|
68
64
|
DEFAULTS = {
|
69
65
|
expires_in: 12.hours,
|
70
66
|
timeout: 5.seconds,
|
71
|
-
ips:
|
72
|
-
}
|
67
|
+
ips: [],
|
68
|
+
}.freeze
|
73
69
|
|
74
70
|
config.before_configuration do |app|
|
75
71
|
app.config.cloudflare = ActiveSupport::OrderedOptions.new
|
@@ -89,7 +85,6 @@ module Cloudflare
|
|
89
85
|
::Rails.logger.error "Cloudflare::Rails: Got exception: #{e} for type:#{type}"
|
90
86
|
end
|
91
87
|
end
|
92
|
-
|
93
88
|
end
|
94
89
|
end
|
95
90
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cloudflare-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- jonathan schatz
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-06-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -30,70 +30,84 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 12.3.1
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 12.3.1
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: rspec_junit_formatter
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
47
|
+
version: 0.4.1
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
54
|
+
version: 0.4.1
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rspec-rails
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - "
|
59
|
+
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
61
|
+
version: 3.7.2
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - "
|
66
|
+
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
68
|
+
version: 3.7.2
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: rspec
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - "
|
73
|
+
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
75
|
+
version: 3.7.0
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - "
|
80
|
+
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
82
|
+
version: 3.7.0
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
84
|
+
name: rubocop-airbnb
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version:
|
90
|
-
type: :
|
89
|
+
version: 1.0.0
|
90
|
+
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version:
|
96
|
+
version: 1.0.0
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: webmock
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: 3.4.2
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 3.4.2
|
97
111
|
- !ruby/object:Gem::Dependency
|
98
112
|
name: httparty
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -108,6 +122,20 @@ dependencies:
|
|
108
122
|
- - ">="
|
109
123
|
- !ruby/object:Gem::Version
|
110
124
|
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: rails
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '5.0'
|
132
|
+
type: :runtime
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '5.0'
|
111
139
|
description: ''
|
112
140
|
email:
|
113
141
|
- modosc@users.noreply.github.com
|
@@ -115,8 +143,12 @@ executables: []
|
|
115
143
|
extensions: []
|
116
144
|
extra_rdoc_files: []
|
117
145
|
files:
|
146
|
+
- ".circleci/config.yml"
|
118
147
|
- ".gitignore"
|
119
148
|
- ".rspec"
|
149
|
+
- ".rubocop.yml"
|
150
|
+
- ".rubocop_airbnb.yml"
|
151
|
+
- ".rubocop_todo.yml"
|
120
152
|
- ".travis.yml"
|
121
153
|
- Gemfile
|
122
154
|
- LICENSE
|
@@ -148,7 +180,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
148
180
|
version: '0'
|
149
181
|
requirements: []
|
150
182
|
rubyforge_project:
|
151
|
-
rubygems_version: 2.6
|
183
|
+
rubygems_version: 2.7.6
|
152
184
|
signing_key:
|
153
185
|
specification_version: 4
|
154
186
|
summary: This gem configures Rails for CloudFlare so that request.ip and request.remote_ip
|