From 3fd3349383324bdcdba25ada9ceae9eee9d76079 Mon Sep 17 00:00:00 2001 From: Sdogruyol Date: Sun, 20 Aug 2017 20:10:38 +0300 Subject: [PATCH] Don't raise on WS route not found --- spec/websocket_handler_spec.cr | 13 +++++++++++++ src/kemal/ext/context.cr | 13 +++++++------ src/kemal/websocket_handler.cr | 2 +- 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/spec/websocket_handler_spec.cr b/spec/websocket_handler_spec.cr index dd97ee2..759332d 100644 --- a/spec/websocket_handler_spec.cr +++ b/spec/websocket_handler_spec.cr @@ -1,6 +1,19 @@ require "./spec_helper" describe "Kemal::WebSocketHandler" do + it "doesn't match on wrong route" do + handler = Kemal::WebSocketHandler.new "/" { } + headers = HTTP::Headers{ + "Upgrade" => "websocket", + "Connection" => "Upgrade", + "Sec-WebSocket-Key" => "dGhlIHNhbXBsZSBub25jZQ==", + } + request = HTTP::Request.new("GET", "/asd", headers) + io_with_context = create_request_and_return_io(handler, request) + client_response = HTTP::Client::Response.from_io(io_with_context, decompress: false) + client_response.status_code.should eq(404) + end + it "matches on given route" do handler = Kemal::WebSocketHandler.new "/" { } headers = HTTP::Headers{ diff --git a/src/kemal/ext/context.cr b/src/kemal/ext/context.cr index 96e732e..ba8a834 100644 --- a/src/kemal/ext/context.cr +++ b/src/kemal/ext/context.cr @@ -13,12 +13,13 @@ class HTTP::Server end def params - websocket? = @request.headers.has_key?("Upgrade") - @request.url_params ||= unless websocket? - route_lookup.params - else - ws_route_lookup.params - end + connection_type = @request.headers.fetch("Connection", nil) + @request.url_params ||= unless connection_type == "Upgrade" + route_lookup.params + else + ws_route_lookup.params + end + @params ||= if @request.param_parser @request.param_parser.not_nil! else diff --git a/src/kemal/websocket_handler.cr b/src/kemal/websocket_handler.cr index 4816278..2d9b396 100644 --- a/src/kemal/websocket_handler.cr +++ b/src/kemal/websocket_handler.cr @@ -8,7 +8,7 @@ module Kemal end def call(context) - raise Kemal::Exceptions::RouteNotFound.new(context) unless context.ws_route_defined? + return call_next(context) unless context.ws_route_defined? super end end