cloudfront-rails 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 798f5816174c333e4a0273531b9f61d77ae04af1
4
- data.tar.gz: ca2a70549d3c1745cdce2dc0bcbc9a358d8ff7d2
3
+ metadata.gz: e30b0bb4a44345937f2986776c042412d0a8e1e3
4
+ data.tar.gz: 97bd443050d29199c36c7fa4d7a6028e58a19e73
5
5
  SHA512:
6
- metadata.gz: b41926c050986fbe69cf4c6a1866a1ded71700c91a360f9c15c022b8e26eb129c0d7098175d993d66fd1e02cb2eab3628bbe1a13b5af6e9bf2b987cf0d7335c5
7
- data.tar.gz: 5ac4581c46586d5535582b6f444196acfb22f8dff443ad6cd2babe9676ac7a18b2a941e81ee04e4de69159f6ad2ea1673c48a0c6fd5df069b6844eaf3b3ec81f
6
+ metadata.gz: 3b3d4634990288efd052dec24cfed2ab94023923cdf633e457d4e591c1ebc674fb60f8328f9344f644d9e0d1450b0a5a05aefe60bde253871753cb1246d7c4c4
7
+ data.tar.gz: 05ca80e7d87e5a68fbec61ce837a1651a826173d1e4e6d21489fc3a435e7816b2b0ad74f6e177b31f701b07bcd3a863531c1e1a3cf579cdd7c7a06f5b6846141
data/.gitignore CHANGED
@@ -1,6 +1,7 @@
1
1
  /.bundle/
2
2
  /.yardoc
3
3
  /Gemfile.lock
4
+ /gemfiles/Gemfile-*.lock
4
5
  /_yardoc/
5
6
  /coverage/
6
7
  /doc/
@@ -2,7 +2,8 @@ sudo: false
2
2
  cache: bundler
3
3
  language: ruby
4
4
  rvm:
5
- - 2.2.7
6
5
  - 2.3.4
7
6
  - 2.4.1
8
- before_install: gem install bundler -v 1.15.1
7
+ gemfile:
8
+ - gemfiles/Gemfile-4.x
9
+ - gemfiles/Gemfile-5.x
@@ -0,0 +1,11 @@
1
+ # Contributing
2
+
3
+ Thank you for contributing!
4
+
5
+ For Feature/Bug Fixes create a Pull Request and I'll get to it as soon as I can (Promise!)
6
+
7
+ ## Testing
8
+
9
+ Please do complete your Pull Request with `spec` changes for completeness.
10
+
11
+ **Thanks**
data/README.md CHANGED
@@ -6,7 +6,7 @@ This Gem is a shameless copy of [cloudflare-rails](https://github.com/modosc/clo
6
6
 
7
7
  ## Installation
8
8
 
9
- __This gem now supports Rails 5,, for Rails 4, please use version ~> 0.1.0__
9
+ __This gem supports Rails 4 and 5__
10
10
 
11
11
  Add this line to your application's Gemfile:
12
12
 
@@ -49,4 +49,3 @@ Bug reports and pull requests are welcome on GitHub at https://github.com/dinks/
49
49
  ## License
50
50
 
51
51
  The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
52
-
@@ -20,12 +20,10 @@ Gem::Specification.new do |spec|
20
20
  spec.add_development_dependency "bundler", "~> 1.12"
21
21
  spec.add_development_dependency "rake", "~> 10.0"
22
22
  spec.add_development_dependency "rspec", "~> 3.0"
23
- spec.add_development_dependency "rspec-rails"
24
23
 
25
24
  spec.add_development_dependency "webmock"
26
25
 
27
- spec.add_dependency "rails", "~> 5.0"
28
- spec.add_dependency "httparty", ">= 0.13.7"
26
+ spec.add_dependency "railties", "> 4.0"
29
27
 
30
28
  spec.required_ruby_version = ">= 2.0"
31
29
  end
@@ -0,0 +1,5 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec path: '..'
4
+
5
+ gem 'railties', '~> 4.0'
@@ -0,0 +1,5 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec path: '..'
4
+
5
+ gem 'railties', '~> 5.0'
@@ -1,3 +1,6 @@
1
+ require "rails"
2
+ require "net/http"
3
+
1
4
  require "cloudfront/rails/version"
2
5
 
3
6
  module Cloudfront
@@ -6,4 +9,6 @@ module Cloudfront
6
9
  end
7
10
  end
8
11
 
12
+ require "cloudfront/rails/importer"
13
+ require "cloudfront/rails/importer/response_error"
9
14
  require "cloudfront/rails/railtie"
@@ -0,0 +1,47 @@
1
+ module Cloudfront
2
+ module Rails
3
+ class Importer
4
+ class << self
5
+ def fetch
6
+ uri = URI("https://ip-ranges.amazonaws.com/ip-ranges.json")
7
+ response = Net::HTTP.start(uri.host,
8
+ uri.port,
9
+ use_ssl: uri.scheme == 'https',
10
+ open_timeout: ::Rails.application.config.cloudfront.timeout,
11
+ read_timeout: ::Rails.application.config.cloudfront.timeout,
12
+ ssl_timeout: ::Rails.application.config.cloudfront.timeout
13
+ ) do |http|
14
+ http.request(Net::HTTP::Get.new(uri))
15
+ end
16
+
17
+ case response
18
+ when Net::HTTPSuccess
19
+ json = ActiveSupport::JSON.decode response.body
20
+
21
+ trusted_ipv4_proxies = json["prefixes"].select do |details|
22
+ details["service"] == 'CLOUDFRONT'
23
+ end.map do |details|
24
+ IPAddr.new(details["ip_prefix"])
25
+ end
26
+
27
+ trusted_ipv6_proxies = json["ipv6_prefixes"].select do |details|
28
+ details["service"] == 'CLOUDFRONT'
29
+ end.map do |details|
30
+ IPAddr.new(details["ipv6_prefix"])
31
+ end
32
+
33
+ trusted_ipv4_proxies + trusted_ipv6_proxies
34
+ else
35
+ raise ResponseError.new(response)
36
+ end
37
+ end
38
+ def fetch_with_cache
39
+ ::Rails.cache.fetch("cloudfront-rails-ips",
40
+ expires_in: ::Rails.application.config.cloudfront.expires_in) do
41
+ self.fetch
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,12 @@
1
+ module Cloudfront
2
+ module Rails
3
+ class Importer
4
+ class ResponseError < StandardError
5
+ attr_reader :response
6
+ def initialize(response)
7
+ @response = response
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
@@ -1,5 +1,3 @@
1
- require "httparty"
2
-
3
1
  module Cloudfront
4
2
  module Rails
5
3
  class Railtie < ::Rails::Railtie
@@ -10,7 +8,11 @@ module Cloudfront
10
8
  end
11
9
  end
12
10
 
13
- Rack::Request::Helpers.prepend CheckTrustedProxies
11
+ if ::Rails.version.start_with? '4.'
12
+ Rack::Request.prepend CheckTrustedProxies
13
+ else
14
+ Rack::Request::Helpers.prepend CheckTrustedProxies
15
+ end
14
16
 
15
17
  module RemoteIpProxies
16
18
  def proxies
@@ -20,49 +22,6 @@ module Cloudfront
20
22
 
21
23
  ActionDispatch::RemoteIp.prepend RemoteIpProxies
22
24
 
23
- class Importer
24
- include HTTParty
25
-
26
- base_uri "https://ip-ranges.amazonaws.com"
27
- follow_redirects true
28
- default_options.update(verify: true)
29
-
30
- class ResponseError < HTTParty::ResponseError; end
31
-
32
- class << self
33
- def fetch
34
- resp = get "/ip-ranges.json", timeout: ::Rails.application.config.cloudfront.timeout
35
-
36
- if resp.success?
37
- json = ActiveSupport::JSON.decode resp.body
38
-
39
- trusted_ipv4_proxies = json["prefixes"].select do |details|
40
- details["service"] == 'CLOUDFRONT'
41
- end.map do |details|
42
- IPAddr.new(details["ip_prefix"])
43
- end
44
-
45
- trusted_ipv6_proxies = json["ipv6_prefixes"].select do |details|
46
- details["service"] == 'CLOUDFRONT'
47
- end.map do |details|
48
- IPAddr.new(details["ipv6_prefix"])
49
- end
50
-
51
- trusted_ipv4_proxies + trusted_ipv6_proxies
52
- else
53
- raise ResponseError.new(resp.response)
54
- end
55
- end
56
-
57
- def fetch_with_cache
58
- ::Rails.cache.fetch("cloudfront-rails-ips",
59
- expires_in: ::Rails.application.config.cloudfront.expires_in) do
60
- self.fetch
61
- end
62
- end
63
- end
64
- end
65
-
66
25
  CLOUDFRONT_DEFAULTS = {
67
26
  expires_in: 12.hours,
68
27
  timeout: 5.seconds,
@@ -1,5 +1,5 @@
1
1
  module Cloudfront
2
2
  module Rails
3
- VERSION = "0.3.0"
3
+ VERSION = "0.4.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cloudfront-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dinesh V
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-07-30 00:00:00.000000000 Z
11
+ date: 2018-07-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,20 +52,6 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '3.0'
55
- - !ruby/object:Gem::Dependency
56
- name: rspec-rails
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: '0'
69
55
  - !ruby/object:Gem::Dependency
70
56
  name: webmock
71
57
  requirement: !ruby/object:Gem::Requirement
@@ -81,33 +67,19 @@ dependencies:
81
67
  - !ruby/object:Gem::Version
82
68
  version: '0'
83
69
  - !ruby/object:Gem::Dependency
84
- name: rails
70
+ name: railties
85
71
  requirement: !ruby/object:Gem::Requirement
86
72
  requirements:
87
- - - "~>"
73
+ - - ">"
88
74
  - !ruby/object:Gem::Version
89
- version: '5.0'
75
+ version: '4.0'
90
76
  type: :runtime
91
77
  prerelease: false
92
78
  version_requirements: !ruby/object:Gem::Requirement
93
79
  requirements:
94
- - - "~>"
95
- - !ruby/object:Gem::Version
96
- version: '5.0'
97
- - !ruby/object:Gem::Dependency
98
- name: httparty
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - ">="
102
- - !ruby/object:Gem::Version
103
- version: 0.13.7
104
- type: :runtime
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - ">="
80
+ - - ">"
109
81
  - !ruby/object:Gem::Version
110
- version: 0.13.7
82
+ version: '4.0'
111
83
  description: " Whitelist Cloudfront Proxies for Rails so that request.ip and request.remote_ip
112
84
  work properly "
113
85
  email:
@@ -120,6 +92,7 @@ files:
120
92
  - ".rspec"
121
93
  - ".travis.yml"
122
94
  - CODE_OF_CONDUCT.md
95
+ - CONTRIBUTING.md
123
96
  - Gemfile
124
97
  - LICENSE.txt
125
98
  - README.md
@@ -127,7 +100,11 @@ files:
127
100
  - bin/console
128
101
  - bin/setup
129
102
  - cloudfront-rails.gemspec
103
+ - gemfiles/Gemfile-4.x
104
+ - gemfiles/Gemfile-5.x
130
105
  - lib/cloudfront/rails.rb
106
+ - lib/cloudfront/rails/importer.rb
107
+ - lib/cloudfront/rails/importer/response_error.rb
131
108
  - lib/cloudfront/rails/railtie.rb
132
109
  - lib/cloudfront/rails/version.rb
133
110
  homepage: https://github.com/dinks/cloudfront-rails/