Merge pull request #162 from dancek/work-with-multiple-trailing-slashes

Support stripping multiple slashes
This commit is contained in:
Tommi Reiman 2018-11-03 14:16:45 +02:00 committed by GitHub
commit 1af3beda6a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 11 additions and 3 deletions

View file

@ -131,7 +131,7 @@
(let [uri (:uri request)] (let [uri (:uri request)]
(if (str/ends-with? uri "/") (if (str/ends-with? uri "/")
(if (not= method :add) (if (not= method :add)
(maybe-redirect request (subs uri 0 (-> uri count dec)))) (maybe-redirect request (str/replace-first uri #"/+$" "")))
(if (not= method :strip) (if (not= method :strip)
(maybe-redirect request (str uri "/"))))))] (maybe-redirect request (str uri "/"))))))]
(fn (fn

View file

@ -281,7 +281,11 @@
(testing "strips slashes" (testing "strips slashes"
(is (= 301 (:status (app {:request-method :get, :uri "/slash-less/"})))) (is (= 301 (:status (app {:request-method :get, :uri "/slash-less/"}))))
(is (= 308 (:status (app {:request-method :post, :uri "/slash-less/"}))))))) (is (= 308 (:status (app {:request-method :post, :uri "/slash-less/"})))))
(testing "strips multiple slashes"
(is (= 301 (:status (app {:request-method :get, :uri "/slash-less/////"}))))
(is (= 308 (:status (app {:request-method :post, :uri "/slash-less//"})))))))
(testing "without option (equivalent to using :method :both)" (testing "without option (equivalent to using :method :both)"
(let [app (ring/ring-handler (let [app (ring/ring-handler
@ -300,7 +304,11 @@
(testing "strips slashes" (testing "strips slashes"
(is (= 301 (:status (app {:request-method :get, :uri "/slash-less/"})))) (is (= 301 (:status (app {:request-method :get, :uri "/slash-less/"}))))
(is (= 308 (:status (app {:request-method :post, :uri "/slash-less/"}))))))))) (is (= 308 (:status (app {:request-method :post, :uri "/slash-less/"})))))
(testing "strips multiple slashes"
(is (= 301 (:status (app {:request-method :get, :uri "/slash-less/////"}))))
(is (= 308 (:status (app {:request-method :post, :uri "/slash-less//"})))))))))
(deftest async-ring-test (deftest async-ring-test
(let [promise #(let [value (atom ::nil)] (let [promise #(let [value (atom ::nil)]