lib/grape-dsl/ace.rb in grape-dsl-2.0.1 vs lib/grape-dsl/ace.rb in grape-dsl-2.0.2
- old
+ new
@@ -1,83 +1,89 @@
module GrapeDSL
module Include
module AccessControlEndpoint
- def generate_ip_regexp_collection *args
+ module Helpers
+ class << self
- if args.empty?
- raise ArgumentError, "missing ip(s) for allowed sources"
- end
+ def generate_ip_regexp_collection *args
- @cached_regexp_collection ||= {}
- if @cached_regexp_collection[args].nil?
- @cached_regexp_collection= {}
+ if args.empty?
+ raise ArgumentError, "missing ip(s) for allowed sources"
+ end
- ip_regex_collection= []
- args.each do |ip_addr|
+ @cached_regexp_collection ||= {}
+ if @cached_regexp_collection[args].nil?
+ @cached_regexp_collection= {}
- ip_regex_builder= [[],[],[],[]]
+ ip_regex_collection= []
+ args.each do |ip_addr|
- #ip_addr.to_s.check(/([0-9\*]{1,3}\.){3}([0-9\*]{1,3})/)#(/([0-9\*]{1,3}\.){3}(0|\*)$/)
- if (ip_addr.to_s =~ /([0-9\*]{1,3}\.){3}([0-9\*]{1,3})/).nil? ? false : true
+ ip_regex_builder= [[],[],[],[]]
- ip_addr_index= 0
- ip_addr.split('.').each do |ip_addr_part|
+ #ip_addr.to_s.check(/([0-9\*]{1,3}\.){3}([0-9\*]{1,3})/)#(/([0-9\*]{1,3}\.){3}(0|\*)$/)
+ if (ip_addr.to_s =~ /([0-9\*]{1,3}\.){3}([0-9\*]{1,3})/).nil? ? false : true
- # 0.0.0.0
- # 255.255.255.255
+ ip_addr_index= 0
+ ip_addr.split('.').each do |ip_addr_part|
- if ip_addr_part.include?("*")
- ip_regex_builder[ip_addr_index]= "([0-9]{1,2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])"
+ # 0.0.0.0
+ # 255.255.255.255
+
+ if ip_addr_part.include?("*")
+ ip_regex_builder[ip_addr_index]= "([0-9]{1,2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])"
+ else
+ ip_regex_builder[ip_addr_index].push(ip_addr_part)
+ end
+
+ # increment index
+ ip_addr_index += 1
+
+ end
+
else
- ip_regex_builder[ip_addr_index].push(ip_addr_part)
+ next
end
- # increment index
- ip_addr_index += 1
+ ip_regex_builder.map! do |element|
- end
+ case true
- else
- next
- end
+ when element.class <= Regexp
+ element.inspect[1..(element.inspect.length-2)]
- ip_regex_builder.map! do |element|
+ when element.class <= String
+ element
- case true
+ when element.class <= Array
+ "(#{element.join('|')})"
- when element.class <= Regexp
- element.inspect[1..(element.inspect.length-2)]
+ else
+ element.to_s
- when element.class <= String
- element
+ end
- when element.class <= Array
- "(#{element.join('|')})"
+ end
- else
- element.to_s
+ ip_regex_collection.push /#{ip_regex_builder.join('\.')}/
end
+ @cached_regexp_collection[args]= ip_regex_collection
+
end
- ip_regex_collection.push /#{ip_regex_builder.join('\.')}/
+ return @cached_regexp_collection[args]
end
- @cached_regexp_collection[args]= ip_regex_collection
-
end
-
- return @cached_regexp_collection[args]
-
end
def allowed_ips *args
- tests= generate_ip_regexp_collection(*args).map{ |regexp|
+ tests= ::GrapeDSL::Include::AccessControlEndpoint::Helpers.generate_ip_regexp_collection(*args).map{ |regexp|
request.instance_variable_get("@env")['REMOTE_ADDR'] =~ regexp
}.compact
if tests.empty?
error!('403.6 - IP address rejected.', 403)
@@ -87,21 +93,20 @@
alias :allowed_ip :allowed_ips
def banned_ips *args
- tests= generate_ip_regexp_collection(*args).map{ |regexp|
+ tests= ::GrapeDSL::Include::AccessControlEndpoint::Helpers.generate_ip_regexp_collection(*args).map{ |regexp|
request.instance_variable_get("@env")['REMOTE_ADDR'] =~ regexp
}.compact
unless tests.empty?
error!('403.6 - IP address rejected.', 403)
end
end
alias :banned_ip :banned_ips
-
end
end
end
\ No newline at end of file