ip_restriction 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 68e94b900f295426882409cf6dfb3a304612f901
4
+ data.tar.gz: a132349a45a4e0bacd6401b9aac945a4dc7c7b68
5
+ SHA512:
6
+ metadata.gz: 2f334e979fa2aa66dab507cc7fd7bab013ea1671917e65db6b836b0d9872b44bb380a57d699591fd854124130caa9af0a4708def3470b887f749d1327c22ac03
7
+ data.tar.gz: cd12370e41a165550f59a28c287ce7b6bd36f14e60ae8b5cbbaf00af5b2095ae9de35dd5e126be18ceef83fb4460c47a20834e61f429e41c6a32ada09860165c
@@ -0,0 +1,10 @@
1
+ require 'ip_restriction/version'
2
+ require 'ip_restriction/ip_checker'
3
+ require 'ip_restriction/allowed_ips_constraint'
4
+ require 'ip_restriction/ip_loader'
5
+ require 'ip_restriction/configuration'
6
+ require 'ip_restriction/ips_retriever'
7
+
8
+ module IpRestriction
9
+ extend Configuration
10
+ end
@@ -0,0 +1,13 @@
1
+ module IpRestriction
2
+ class AllowedIpsConstraint
3
+ def matches?(request)
4
+ checker.allowed?(request.remote_ip)
5
+ end
6
+
7
+ private
8
+
9
+ def checker
10
+ @checker ||= IpChecker.new(IpsRetriever.new.office_ips)
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,15 @@
1
+ module IpRestriction
2
+ module Configuration
3
+ DEFAULT_FILE_PATH = 'config/ip_restriction.yml'
4
+
5
+ attr_accessor :file_path
6
+
7
+ def configure
8
+ yield self
9
+ end
10
+
11
+ def file_path
12
+ @file_path || DEFAULT_FILE_PATH
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,17 @@
1
+ require 'ipaddr'
2
+
3
+ module IpRestriction
4
+ class IpChecker
5
+ attr_reader :ranges
6
+
7
+ def initialize(ranges)
8
+ @ranges = ranges
9
+ end
10
+
11
+ def allowed?(ip)
12
+ ranges.any? do |range_or_ip|
13
+ IPAddr.new(range_or_ip).include?(IPAddr.new(ip))
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,21 @@
1
+ require 'yaml'
2
+
3
+ module IpRestriction
4
+ class IpLoader
5
+ DEFAULT_IPS = ['127.0.0.1']
6
+
7
+ attr_reader :file_path
8
+
9
+ def initialize(file_path)
10
+ @file_path = file_path
11
+ end
12
+
13
+ def load
14
+ unless File.exist? file_path
15
+ warn "LwIpRestriction: file #{file_path} does not exist"
16
+ return DEFAULT_IPS
17
+ end
18
+ YAML.load_file(file_path)['ips']
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,7 @@
1
+ module IpRestriction
2
+ class IpsRetriever
3
+ def office_ips
4
+ IpLoader.new(IpRestriction.file_path).load
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,13 @@
1
+ module IpRestriction
2
+ class AllowedIpsConstraint
3
+ def matches?(request)
4
+ checker.allowed?(request.remote_ip)
5
+ end
6
+
7
+ private
8
+
9
+ def checker
10
+ @checker ||= IpChecker.new(IpsRetriever.new.office_ips)
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,3 @@
1
+ module IpRestriction
2
+ VERSION = '0.0.1'
3
+ end
metadata ADDED
@@ -0,0 +1,153 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ip_restriction
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Locaweb
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-03-10 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: pry-nav
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.2.0
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 0.2.4
23
+ type: :development
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: 0.2.0
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 0.2.4
33
+ - !ruby/object:Gem::Dependency
34
+ name: rspec
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: 3.1.0
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 3.1.0
43
+ type: :development
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: 3.1.0
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 3.1.0
53
+ - !ruby/object:Gem::Dependency
54
+ name: rubocop
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: 0.27.0
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: 0.27.1
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: 0.27.0
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: 0.27.1
73
+ - !ruby/object:Gem::Dependency
74
+ name: yard
75
+ requirement: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - "~>"
78
+ - !ruby/object:Gem::Version
79
+ version: 0.8.0
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: 0.8.7
83
+ type: :development
84
+ prerelease: false
85
+ version_requirements: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 0.8.0
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: 0.8.7
93
+ - !ruby/object:Gem::Dependency
94
+ name: redcarpet
95
+ requirement: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - "~>"
98
+ - !ruby/object:Gem::Version
99
+ version: 3.2.0
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: 3.2.2
103
+ type: :development
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: 3.2.0
110
+ - - ">="
111
+ - !ruby/object:Gem::Version
112
+ version: 3.2.2
113
+ description: Restrict some IPs to do something
114
+ email:
115
+ - developers@locaweb.com.br
116
+ executables: []
117
+ extensions: []
118
+ extra_rdoc_files: []
119
+ files:
120
+ - lib/ip_restriction.rb
121
+ - lib/ip_restriction/allowed_ips_constraint.rb
122
+ - lib/ip_restriction/configuration.rb
123
+ - lib/ip_restriction/ip_checker.rb
124
+ - lib/ip_restriction/ip_loader.rb
125
+ - lib/ip_restriction/ips_retriever.rb
126
+ - lib/ip_restriction/locaweb_allowed_ips_constraint.rb
127
+ - lib/ip_restriction/version.rb
128
+ homepage: ''
129
+ licenses:
130
+ - MIT
131
+ metadata: {}
132
+ post_install_message:
133
+ rdoc_options: []
134
+ require_paths:
135
+ - lib
136
+ required_ruby_version: !ruby/object:Gem::Requirement
137
+ requirements:
138
+ - - ">="
139
+ - !ruby/object:Gem::Version
140
+ version: '0'
141
+ required_rubygems_version: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ requirements: []
147
+ rubyforge_project:
148
+ rubygems_version: 2.4.5
149
+ signing_key:
150
+ specification_version: 4
151
+ summary: Restrict some IPs
152
+ test_files: []
153
+ has_rdoc: