cloudfront-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 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/