mirror of
https://gitea.invidious.io/iv-org/shard-kemal.git
synced 2024-08-15 00:53:36 +00:00
Omitting filters fix for lowercase methods requests (#647)
This commit is contained in:
parent
93521b7120
commit
c8f857dff3
5 changed files with 45 additions and 8 deletions
37
spec/filters_spec.cr
Normal file
37
spec/filters_spec.cr
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
require "./spec_helper"
|
||||||
|
|
||||||
|
describe "Kemal::FilterHandler" do
|
||||||
|
it "handles with upcased 'POST'" do
|
||||||
|
filter_handler = Kemal::FilterHandler.new
|
||||||
|
filter_handler._add_route_filter("POST", "*", :before) do |env|
|
||||||
|
env.set "sensitive", "1"
|
||||||
|
end
|
||||||
|
Kemal.config.add_filter_handler(filter_handler)
|
||||||
|
|
||||||
|
post "/sensitive_post" do |env|
|
||||||
|
env.get "sensitive"
|
||||||
|
end
|
||||||
|
|
||||||
|
request = HTTP::Request.new("POST", "/sensitive_post")
|
||||||
|
client_response = call_request_on_app(request)
|
||||||
|
client_response.status_code.should eq(200)
|
||||||
|
client_response.body.should eq("1")
|
||||||
|
end
|
||||||
|
|
||||||
|
it "handles with downcased 'post'" do
|
||||||
|
filter_handler = Kemal::FilterHandler.new
|
||||||
|
filter_handler._add_route_filter("POST", "*", :before) do |env|
|
||||||
|
env.set "sensitive", "1"
|
||||||
|
end
|
||||||
|
Kemal.config.add_filter_handler(filter_handler)
|
||||||
|
|
||||||
|
post "/sensitive_post" do
|
||||||
|
"sensitive"
|
||||||
|
end
|
||||||
|
|
||||||
|
request = HTTP::Request.new("post", "/sensitive_post")
|
||||||
|
client_response = call_request_on_app(request)
|
||||||
|
client_response.status_code.should eq(200)
|
||||||
|
client_response.body.should eq("")
|
||||||
|
end
|
||||||
|
end
|
|
@ -85,6 +85,7 @@ end
|
||||||
|
|
||||||
Spec.after_each do
|
Spec.after_each do
|
||||||
Kemal.config.clear
|
Kemal.config.clear
|
||||||
|
Kemal::FilterHandler::INSTANCE.tree = Radix::Tree(Array(Kemal::FilterHandler::FilterBlock)).new
|
||||||
Kemal::RouteHandler::INSTANCE.routes = Radix::Tree(Route).new
|
Kemal::RouteHandler::INSTANCE.routes = Radix::Tree(Route).new
|
||||||
Kemal::RouteHandler::INSTANCE.cached_routes = Hash(String, Radix::Result(Route)).new
|
Kemal::RouteHandler::INSTANCE.cached_routes = Hash(String, Radix::Result(Route)).new
|
||||||
Kemal::WebSocketHandler::INSTANCE.routes = Radix::Tree(WebSocket).new
|
Kemal::WebSocketHandler::INSTANCE.routes = Radix::Tree(WebSocket).new
|
||||||
|
|
|
@ -3,6 +3,7 @@ module Kemal
|
||||||
class FilterHandler
|
class FilterHandler
|
||||||
include HTTP::Handler
|
include HTTP::Handler
|
||||||
INSTANCE = new
|
INSTANCE = new
|
||||||
|
property tree
|
||||||
|
|
||||||
# This middleware is lazily instantiated and added to the handlers as soon as a call to `after_X` or `before_X` is made.
|
# This middleware is lazily instantiated and added to the handlers as soon as a call to `after_X` or `before_X` is made.
|
||||||
def initialize
|
def initialize
|
||||||
|
|
|
@ -11,19 +11,17 @@ module Kemal
|
||||||
|
|
||||||
macro only(paths, method = "GET")
|
macro only(paths, method = "GET")
|
||||||
class_name = {{@type.name}}
|
class_name = {{@type.name}}
|
||||||
method_downcase = {{method.downcase}}
|
class_name_method = "#{class_name}/#{{{method}}}"
|
||||||
class_name_method = "#{class_name}/#{method_downcase}"
|
|
||||||
({{paths}}).each do |path|
|
({{paths}}).each do |path|
|
||||||
@@only_routes_tree.add class_name_method + path, '/' + method_downcase + path
|
@@only_routes_tree.add class_name_method + path, '/' + {{method}} + path
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
macro exclude(paths, method = "GET")
|
macro exclude(paths, method = "GET")
|
||||||
class_name = {{@type.name}}
|
class_name = {{@type.name}}
|
||||||
method_downcase = {{method.downcase}}
|
class_name_method = "#{class_name}/#{{{method}}}"
|
||||||
class_name_method = "#{class_name}/#{method_downcase}"
|
|
||||||
({{paths}}).each do |path|
|
({{paths}}).each do |path|
|
||||||
@@exclude_routes_tree.add class_name_method + path, '/' + method_downcase + path
|
@@exclude_routes_tree.add class_name_method + path, '/' + {{method}} + path
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -74,7 +72,7 @@ module Kemal
|
||||||
end
|
end
|
||||||
|
|
||||||
private def radix_path(method : String, path : String)
|
private def radix_path(method : String, path : String)
|
||||||
"#{self.class}/#{method.downcase}#{path}"
|
"#{self.class}/#{method}#{path}"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -57,7 +57,7 @@ module Kemal
|
||||||
end
|
end
|
||||||
|
|
||||||
private def radix_path(method, path)
|
private def radix_path(method, path)
|
||||||
'/' + method.downcase + path
|
'/' + method + path
|
||||||
end
|
end
|
||||||
|
|
||||||
private def add_to_radix_tree(method, path, route)
|
private def add_to_radix_tree(method, path, route)
|
||||||
|
|
Loading…
Reference in a new issue