Ну, вот мое решение, как аннотировать файл маршрутов, так что я могу получить доступ к нему в моем промежуточном слое (в данном примере Rack Attack)
file = File.read(File.expand_path('../../routes.rb', __FILE__))
file = file.split("\n")[1..-2].join("\n") # remove first line and last line
myroutes = Rails.application.routes
myroutes.prepend do
eval(file)
end
myroutes.clear!
counter = 0
myroutes.named_routes.routes.each do |route| # For each route
extractedroute = route[1]
if extractedroute.defaults[:attackip] != nil
attack = extractedroute.defaults[:attackip]
path = extractedroute.path.spec.left.to_s
attack.each do |method| # For each Attack method
counter = counter + 1
if method[:t] != nil # If we have a throttle
throttlename = 'throttle-'+counter.to_s+'-'+path
Rails.logger.error 'Creating throttle: '+throttlename
throttle(throttlename, :limit => method[:t][0], :period => method[:t][1]) do |req|
if req.path.start_with?(path)
req.ip
end
end
elsif method[:a] != nil
allow2banname = 'allow2banname-'+counter.to_s+'-'+path
Rails.logger.error 'Creating allow2ban: '+allow2banname
Rack::Attack.blacklist(allow2banname) do |req|
Rack::Attack::Allow2Ban.filter(allow2banname+req.ip, :maxretry => method[:a][0], :findtime => method[:a][1], :bantime => method[:a][2]) do
if req.path.start_with?(path)
true
end
end
end
end
end # For all attack mechanisms
end # If we have an attack directive
end # EOF for all routes
myroutes.prepend.clear
Что вы пытаетесь сделать в вашей части промежуточное программное обеспечение, которое требует знания маршрутов рельсов? –
Я хочу усилить Rack Attack (https://github.com/kickstarter/rack-attack), добавив директивы маршрутов в route.rb для описания того, как защитить каждый путь. Идея состоит в том, чтобы добавить метаданные в файл routes.rb и что камень Rack Attack автоматически генерирует правильные дроссели, основываясь на информации, существующей в файле маршрутов. Таким образом, он будет намного более эффективным и последовательным. Поэтому, когда вы добавляете новый путь к файлу маршрутов, он будет автоматически защищен. Мне нужно иметь возможность программно анализировать/обрабатывать файл маршрутов. –
Да, это кажется законным обоснованием. Хотя я лично не знаю, как этого добиться, может быть, кто-то это сделает. –